我在这里将讨论一些关于 MySQL 的面向企业级应用的思路,以及能否用 MySQL 替代当前 Oracle 的问题。
首先说明一点的是,我不是说 MySQL 没有大企业级的应用,事实上,可以看到越来越多的成功布署 MySQL 的应用,但是,还不够多,还有许多大企业的关键应用还不敢用 MySQL。或许这篇小文能和大家一起探讨一些比较"虚"的东西。
存储引擎
由于 MySQL 自己一直没有一个成熟可靠的存储引擎,估计这让他们深感痛处(尤其是目前最成熟的事务型引擎 InnoDB 又在 Oracle 手里)。MySQL 寄予厚望的 Falcon 在开发了两年多之后,建树不大,而该项目带头人 Jim Starkey 前不久又离开了 MySQL,陋屋偏逢连夜雨。
Sun 会给 MySQL 一个稳健的引擎么? 我看短时间内未必能达到。除非,Sun 从 Oracle 手里把 InnoDB 买回来。
如果进行大企业级应用,考虑到引擎本身的稳定性,似乎可选的也只有 InnoDB 了,但 InnoDB 的备份工具又是收费的。至于 MyISAM ,尽管有人的确喜欢用,但对于并发能力要求稍微严格一点,MyISAM 根本不行。
在线 DDL 锁表问题
MySQL 中,在线对表对象做 DDL 操作是要锁表的,对于可用性要求比较高,而应用变化又比较频繁的环境,这是个非常很糟糕瓶颈。没想到有什么好的办法,除非,像大家开玩笑说的,把所有的表都预留出足够的空闲列,减少类似增加列的变更麻烦。
这个 MySQL 天生的缺陷在 PostgreSQL 中是不存在的,比如创建索引,可以用CREATE INDEX CONCURRENTLY 的方式来减小影响。(MySQL 后续的版本中在逐渐改善这个问题:添加了 ONLINE 关键字)
这个看似是个小问题,但实际上却是对很多人最为困扰的。
在线备份问题
MySQL 6.0 后终于具备在线备份的能力了。但现在,恐怕比较激进的用户也只能用版本 5 而已。
很多 MySQL 资深用户能够根据自己应用的特点布署适合自己的备份方式(尽管可能也会有缺陷,比如基于时间点的恢复)。
至于另一个常用来衡量 DB 可扩展性的特性:分区,现在 MySQL 已经能够支持了,尽管实现的的确有点晚。而使用 MySQL 的用户,一般都采取 Sharding 的策略对数据进行切分,所以,分区的问题倒似乎并不是最为关键的。
存储引擎
继续上一篇的讨论,记录针对 MySQL 在大企业级商用上我的一些零星想法。网络上到处都有关于各个引擎之间的对比。这里要提醒一点是,注意各个引擎的锁的粒度。InnoDB 是行锁,锁的实现是依赖于索引的,MyISAM 只是表锁。锁粒度是衡量存储引擎的一个重要指标,其能力很大程度上决定并发能力。
至于 TRANSACTION ISOLATION LEVEL,则是另外一个需要衡量的指标。
老生常谈的,某某引擎适合什么类型的应用,归根结底还是由于其实现的机制决定了引擎的特性。
存储层的解决方案
相信没有人愿意在 MySQL 上用 RAW 设备,很多人几乎就是直接把数据文件放在文件系统上(个人认为,对于数据库这样的应用来说,文件系统可靠性还有所欠缺)。我还没发现 MySQL 上类似 Oracle ASM 的解决方案。如果用文件系统,单节点的数据存储能力肯定要受到制约--没有人喜欢把几个 T 的数据扔到一个 MySQL DB 上吧? 一旦某个文件系统故障,麻烦就来了。从这个角度考虑,或许 LVM2 是一个可选的方式。
当然,如果把数据文件扔到 SAN 上也还不错。一方面问题是,现在存储厂商对于 MySQL 的重视长度还远不如 Oracle、DB2 等老牌商业数据库。另一方面,很多 MySQL 用户没有 SAN 环境的,数据都是在本地磁盘上。
固态硬盘与 MySQL
前两天有朋友在上一篇分析留言,提及应注重闪存的应用。其实还不如布署固态硬盘 (SSD) 对 MySQL 可能的影响问题。 相信现在有很多企业需要在 DB 的 IOPS 上寻求突破,SSD 是个可能的突破口,但从目前我收集到的数据来看,还没有足够的数据说明启用了 SSD 的 MySQL 能有预期的数量级上的 IOPS 提升。
商业支持
现在 MySQL 的背后有 Sun ,但是,如果不购买服务的话,到哪里去找比较正规的商业支持(我是说软件集成商)? 即使购买了服务,如果问题出在存储引擎上,MySQL 能给即时、有效的技术响应么? 这也是 MySQL 没有自有存储引擎的一个弱点,因为衔接的环节多,一旦有商务上的问题,很容易陷入扯皮阶段。
分享到:
相关推荐
文章介绍了企业级工位管理系统的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。 本企业级工位管理系统管理员和员工。管理员功能有个人中心,部门信息管理,工位信息管理,使用...
J2EE(Java 2 Platform, Enterprise Edition)是用于构建企业级应用的成熟框架,提供了丰富的组件和服务,保证了系统的可移植性、安全性和可重用性。MySpl(可能是MySQL的误写)将作为数据库管理系统,MyEclipse6.5...
文章介绍了企业级工位管理系统的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。 本企业级工位管理系统管理员和员工。管理员功能有个人中心,部门信息管理,工位信息管理,使用...
文章介绍了企业级工位管理系统的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。本企业级工位管理系统管理员和员工。管理员功能有个人中心,部门信息管理,工位信息管理,使用...
文章介绍了企业级工位管理系统的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。 本企业级工位管理系统管理员和员工。管理员功能有个人中心,部门信息管理,工位信息管理,使用...
【JAVA企业级应用开发】课程设计要求主要针对的是安徽工程大学计算机与信息学院的学生,旨在通过实际项目开发提升学生的JAVA编程能力和企业管理软件的运用技能。以下是该课程设计涉及的知识点和详细说明: 1. **...
企业级工位管理系统-企业级工位管理系统的设计与实现代码-java-springboot-基于springboot的企业级工位管理系统项目-代码-源码-项目-系统-毕设-网站 1、技术栈:java,springboot,vue,ajax,maven,mysql,...
* 可行性分析:对企业级工位管理系统的可行性进行分析和研究,了解系统的可行性和可扩展性。 五、数据库设计 企业级工位管理系统的数据库设计是指对企业级工位管理系统的数据库结构和数据模型进行设计和实现。...
企业级工位管理系统的设计与实现代码-java-springboot-基于springboot的企业级工位管理系统项目-代码-源码-项目-系统-毕设-网站 1、技术栈:java,springboot,vue,ajax,maven,mysql,MyBatisPlus等 2、系统的实现...
文章介绍了企业级工位管理系统的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。 本企业级工位管理系统管理员和员工。管理员功能有个人中心,部门信息管理,工位信息管理,使用...
文章介绍了企业级工位管理系统的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。 本企业级工位管理系统管理员和员工。管理员功能有个人中心,部门信息管理,工位信息管理,使用...
- Spring框架提供了一个分层架构,简化了企业级应用的开发。 4. **经济可行性**: - 利用学生身份获取免费的阿里云服务器,降低初期投入。 - 通过免费试用模式吸引用户,后续可通过在线广告等途径获得收入。 5....
2. **MySQL数据库**:MySQL是一种流行的关系型数据库管理系统,因其稳定性和性能优势,在企业级应用中得到了广泛应用。 #### 系统功能设计 - **管理员功能** - **个人中心**:管理员可以在此模块中管理个人信息,...
本文将详细探讨基于Spring Boot框架和MYSQL数据库的企业级工位管理系统的设计与实现。 首先,Spring Boot是一个由Pivotal Team开发的Java框架,其目的是简化新Spring应用的初始搭建以及开发过程。它集成了大量常用...
SSM(Spring、SpringMVC、MyBatis)是一个流行的Java企业级开发框架,结合MySQL数据库,可以构建出稳定且可扩展的企业级应用。 1. 人力资源管理的重要性 人力资源管理是企业运营的核心部分,涉及到员工的招聘、培训...
Spring框架是一个开源的Java框架,提供了一个灵活的架构,能够帮助开发者快速构建企业级应用程序。SpringMVC是一个基于Java的Web应用程序框架,提供了一个强大的MVC架构,能够帮助开发者快速构建Web应用程序。...
java-springboot-基于springboot的企业级工位管理系统项目-代码-源码-项目-系统-毕设-网站 1、技术栈:java,springboot,vue,ajax,maven,mysql,MyBatisPlus等 2、系统的实现 用户信息 图片素材 视频素材 摘 要 ...
### 《软件工程》Look for jobs系统可行性分析 #### 一、引言 ##### 1.1 编写目的 本文旨在对“Look for jobs”系统进行全面的可行性分析,探讨该系统是否具备实施的可能性,包括经济、操作、技术、运行及社会法律...
【标题】"企业级通用进销系统C#版附有数据库"揭示了这是一个基于C#编程语言开发的企业级应用,主要用于处理进销存管理。C#是一种由微软开发的面向对象的编程语言,广泛用于构建Windows平台上的应用程序,尤其是.NET...