8 个不得不说的 MySQL 陷阱

Mysql安装简单,速度较快,功能丰富。另外它仍是开源运动的标杆,它的伟大成就向咱们展现了一个成功的公司是能够创建在开源代码之上的。
然而用过mysql的人都曾对着显示器挥舞过拳头。但你不可能发明一种每秒能保存成千上万行互联网数据,而且一点错误都没有的技术吧。
为了在这个夏天躁起来,咱们列举了8个抱怨开源关系型数据库的理由。下面列举的理由中不只限于 MySQL,有一些是针对关系型数据库的。若是咱们没有理清楚关系型数据库和 MySQL,咱们将会永远陷入90年代的思想上。咱们须要推倒而后重建这些。或者咱们转向使用一个最近流行的,存在时间没有长到能够列出一堆像下面同样的理由的数据库。
根深蒂固的bugs
任何大的软件包都有 bug。但稍微深刻了解一下,就会发现和 Mysql 相关的 bugs 自成体系。忽然你就须要留心,由于 NULL 并非以一样的方式出现,外键约束也没有像你想像的那样执行,连主键自动增加也会出错。
小问题大量存在,并且并不老是能够修复,这就是为何一些人保持一个列表。还好 MySQL 维护着一个很是好的 bug 报告系统,让咱们能够知道我些咱们没法想像的事情,知道其余人也在经受一样的磨难。
关系表的不灵活性 mysql

关系表具备条理性,条理性是好的——可是,它使得程序员不得不编造或硬塞一些数据到已经定义好模式的列中。NoSQL开始愈来愈受到欢迎的缘由之一,就是它为程序员提供了足够的灵活性,来加速数据库的使用。若是一个街道地址须要增长一行,那么,你能够将它很容易地插入到一个NoSQL文档中。若是你想添加一个完整的新的数据块,不管它包含什么内容,文档模型也能够原封不动地接受你的数据,而没必要改成它要求的数据格式。
试想一下,你用整数格式创建了一个所有是邮编的表格。这个表是十分高效的,它执行的规则也很好。忽然一次,有人上传了一个使用了连字符的九位数邮编。或者还有可能,你获得了一位来自加拿大客户的信件,上面写有邮政编码。
这时,一切都乱了。老板要求网站要在几小时内恢复正常工做。然而,如今已经没有时间来重建数据库。程序员能够作什么?也许,可使用黑客手段把加拿大邮政编码由base64的数字格式改成base 10格式?或者设置一个使用转义编码的辅助表格,用来讲明真正的邮政编码或者其余?谁知道呢?处处都有黑客,他们都是危险的。但你没有时间来搞定它。
MySQL的关联规则让每一个人都诚实和谨慎,但它能强制咱们避开易受攻击和欺骗的麻烦。
JOIN联合查询 程序员

曾几什么时候,将数据分表保存是计算机科学史上的伟大创新。分开后的表不只结构简单,也简化了使用。但它却须要使用join语句进行查询。
sql经过一系列join构建的复杂查询将开发者推入了困惑与绝望的深渊。并且存储引擎也须要以最优的方式来高效地解析join语句。开发者须要绞尽脑汁编写查询语句,而后数据库对其进行解析。
这就是不少注重运行速度的开发者放弃数据分表转而使用不规范数据表的缘由。不区分数据实体,将全部数据保存到一个大表中——以免复杂的查询。这样确实很快,而且服务器也不会耗尽内存。
磁盘空间如今很廉价。8TB的磁盘已经在售,更大的也要上市了。咱们再也不须要为使用join而绞尽脑汁了。
分支的混乱 sql

是的,一个可靠的、获得良好支持的MySQL分支,能够带来竞争和选择,可是它也引发困惑和混乱。更糟糕的是,一个称为MariaDB的MySQL分支,由Monty Widenius维护着。他一样也在参与编写MySQL。那么,MariaDB是真正独立的值得咱们拥护的吗?或者它是MySQL?咱们是否应该坚持使用由建立原始MySQL数据库的组织运营的核心代码?或者咱们应该加入那些被认为更聪明的,每每很酷的背叛者?
还有,咱们应当如何得到关于兼容性的信息?一方面,咱们被确信MariaDB和MySQL十分地类似。另外一方面,咱们要相信有差别——否则为何你们都在争论它?也许它们在性能和咱们查询的范围内,在两个阵营中工做方式相同?但也许他们不一样-或者未来会不一样。
存储引擎混乱 数据库

MySQL不是事实上的同一的数据库;它由几个数据库组成,它们的大多数细节都被统一的表面所掩盖。在开始的时候,有一个MyISAM引擎,它很快可是在先后一致上不能作到完备。有时候你须要速度而且能够接受不一致的结果时是很好的。
当人们须要更多时,具有完整事务支持的InnoDB出现了。但这还不够。如今,它可能有20种存储引擎的选择——这足以使一个数据库管理员疯狂。固然,有些时候在不一样的存储引擎之间切换而没必要重写你的SQL是很好的,可是切换后总会带来混乱。这个表格我选择的引擎是 MyISAM 仍是 innoDB 呢?或者,我决定输出的数据是CSV格式的吗?
盈利的动机
虽然 MySQL 是一款成功的开源产品,但它仍然是一门生意,里面尽是靠它得到薪水的专业开发者。当大多数用户在持续地享受开源许可证带来的最佳体验时,毫无疑问这家公司还在为赚取足够的钱来维持运营而努力。这致使自由代码在“社区版”和出售给企业的完整产品之间产生了奇怪的分岐。
你应该付钱吗?你在这里挣到了多少钱?在社区版之上开展经营行为是否公平?企业版中额外的功能,是否只是一个噱头来引诱咱们不断付费呢?这至少说明一点,它是另外一组须要回答的问题。选用哪一个版本?遵守哪一种许可证?选用它的哪一个功能集?
原生 JSON 支持的缺少 服务器

看 MySQL 的年龄最好的办法是安装它,而后你会意识到须要添加更多的驱动程序使它可用。MySQL 一般在 3306 端口上通讯,它通常输出的是它本身难以理解的格式化数据。若是你想让你的代码和它通讯,你必须添加另外一层的代码,将 MySQL 的语言转换成有用的东西。这些层的代码,以库的形式分发,常常须要人们购买一个商业的许可证。
现代数据存储层一般直接以 JSON 通讯。虽然 MySQL 和 MariaDB 如今有能力解析 SQL 中的 JSON 部分,但这还远远不够好,原生的 JSON 接口已经在 CouchDB,MongoDB,或任何最新的工具中普遍使用。
封闭源和专有模块的兴起 ide

我说过 MySQL 是开源的吗?它是,但除了一些在”开源核心“周边开发的一些较新的、非开源的代码、专有模块。程序员须要吃饭,Oracle须要拿它的辛苦成果来换钱,这是商业的现实之一。它不像那些医院,使用 MySQL 能够免费医疗护理。它不象那些农民,使用 MySQL 能够赠送食物。
要求 MySQL 始终坚持在一个很高的标准是有点不公平的,由于开源的成功多是一个圈套。这是由于它开始能够免费,但并不意味着它能够始终如此。若是企业须要许多新的功能,他们将不得不用这种或那种方式付费。有时向 Oracle 付费,比本身来编写代码要便宜得多。有时商业的、不开源的代码是有意义的。事实不言而喻。 工具

 

英文原文:http://www.pcadvisor.co.uk/news/software/8-mysql-gotchas-worth-a-rant-3620577/性能

相关文章
相关标签/搜索