我在这里将讨论一些关于 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 没有自有存储引擎的一个弱点,因为衔接的环节多,一旦有商务上的问题,很容易陷入扯皮阶段。
分享到:
相关推荐
【JAVA可行性分析报告】 在当前数字化时代,网络购物已经成为日常生活的一部分。本报告旨在探讨使用Java技术开发一个网上手机订购系统的可行性。此系统旨在为用户提供一个便捷的平台,以获取手机产品的详细信息并...
文章介绍了企业级工位管理系统的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。 本企业级工位管理系统管理员和员工。管理员功能有个人中心,部门信息管理,工位信息管理,使用...
文章介绍了企业级工位管理系统的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。 本企业级工位管理系统管理员和员工。管理员功能有个人中心,部门信息管理,工位信息管理,使用...
文章介绍了企业级工位管理系统的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。本企业级工位管理系统管理员和员工。管理员功能有个人中心,部门信息管理,工位信息管理,使用...
文章介绍了企业级工位管理系统的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。 本企业级工位管理系统管理员和员工。管理员功能有个人中心,部门信息管理,工位信息管理,使用...
【标题】:“可行性分析和开发计划.docx” 【描述】:这份文档是针对软件工程课程设计的可行性分析和开发计划,旨在为2020年软件工程专业的学生提供指导。项目是一个小型电子商城,旨在解决小团体特别是农户或种植...
* 可行性分析:对企业级工位管理系统的可行性进行分析和研究,了解系统的可行性和可扩展性。 五、数据库设计 企业级工位管理系统的数据库设计是指对企业级工位管理系统的数据库结构和数据模型进行设计和实现。...
2. **系统开发流程**:课程设计报告需要包括可行性研究、系统分析、系统设计、主要代码和主要运行界面、工作总结等部分,这涵盖了软件开发生命周期的主要阶段,如需求分析、设计、实现和测试。 3. **系统功能设计**...
3.1 可行性分析 5 3.1.1技术可行性 5 3.1.2经济可行性 5 3.1.3运行可行性 6 3.2 系统流程 6 3.2.1 操作信息流程 6 3.2.2 登录信息流程 6 3.2.3 删除信息流程 7 3.3 性能需求 7 第4章 系统设计 8 4.1系统整体结构 8 ...
3.1 可行性分析 5 3.1.1技术可行性 5 3.1.2经济可行性 5 3.1.3运行可行性 6 3.2 系统流程 6 3.2.1 操作信息流程 6 3.2.2 登录信息流程 6 3.2.3 删除信息流程 7 3.3 性能需求 7 第4章 系统设计 8 4.1系统整体结构 8 ...
文章介绍了企业级工位管理系统的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。 本企业级工位管理系统管理员和员工。管理员功能有个人中心,部门信息管理,工位信息管理,使用...
### 《软件工程》Look for jobs系统可行性分析 #### 一、引言 ##### 1.1 编写目的 本文旨在对“Look for jobs”系统进行全面的可行性分析,探讨该系统是否具备实施的可能性,包括经济、操作、技术、运行及社会法律...
此JAVA人事管理系统论文详细描述了一个完整的开发流程,从前期的需求分析到后期的系统实现,展现了JAVA在企业级应用中的应用实力。通过这个系统,可以有效提升企业的人力资源管理效率,同时,也为其他类似项目的开发...
课题的可行性分析将涉及技术难度评估、资源需求和预期成果的合理性。 计划进度方面,初期阶段将集中于理论学习和源码分析,中期构建和测试存储引擎及优化器,后期进行性能优化实践并收集数据,最后整理研究成果,...
Spring框架是一个开源的Java框架,提供了一个灵活的架构,能够帮助开发者快速构建企业级应用程序。SpringMVC是一个基于Java的Web应用程序框架,提供了一个强大的MVC架构,能够帮助开发者快速构建Web应用程序。...
本文主要介绍了基于J2EE的在线考试系统的设计与实现,涵盖了系统的需求分析、技术可行性分析、操作可行性分析、经济可行性分析、法律可行性分析、系统性能分析、系统功能分析等方面的知识点。 Java 简介 Java是一...
SSM(Spring、SpringMVC、MyBatis)是一个流行的Java企业级开发框架,结合MySQL数据库,可以构建出稳定且可扩展的企业级应用。 1. 人力资源管理的重要性 人力资源管理是企业运营的核心部分,涉及到员工的招聘、培训...
《软件可行性分析报告》 软件可行性分析是软件项目开发中的关键环节,旨在评估一个软件项目在技术、经济、法律和操作层面上是否可行。本文将以一个名为“通达大学生实习在线项目”的案例来阐述如何进行这样的分析。...
MySQL 广泛应用于企业级软件开发,例如电子商务系统、在线支付系统等。 5. 系统总体设计 系统总体设计主要包括需求分析、可行性分析、功能性需求分析三个部分。 5.1 需求分析 需求分析是指对高速公路收费系统的...