MySQL英文文献及翻译
MySQL的历史与架构
MySQL的架构的最好的理解是从他的历史背景中去发现。
MySQL的历史
MySQL的历史可以追溯到1979年,当时蒙蒂文德纽斯,在一家名为TcX的小公司工作,他用BASIC语言创造了一个报告工具,在这个报告工具的基础上他在16KB的RAM中写了4跑道的Mhzcomputer。随着时间的推移,该工具被用C语言重新编写并且移植到Unix系统上运行。但它任然只是一个有前端报告的低级别存储引擎。该工具被称为Unireg。
在计算资源少的不利条件啊,也许只是靠着上帝赐予他的创造天赋,蒙蒂自然而然的开发了一种习惯和能力去编写有效的代码。在不会事先知毕业论文http://www.751com.cn 许这是从一开始就赐予他的天赋。
除了上面所述,在TcX这个小公司,蒙蒂作为拥有者之一,他对自己编写的代码有着很多发言权。虽然有可能在那也有许多很蒙蒂一样拥有天赋和能力的程序员,但由于各种各样的原因,他们中很少能有可以执行代码超过20年的,但蒙蒂是这样。
蒙蒂的努力工作,天赋,和代码所有权为以后MySQL的创造打下了坚实的基础。
在20世纪90年代那段时间,TcX的顾客们开始把他们的数据按进SQL的接口中。考虑了几种可能性。一,加载到一个商业数据库。但蒙蒂并不满意运行的速度。于是他试图借用SQL中的部分mSQL代码并结合自己的低级别存储引擎。但并不成功,接着作为一个有天赋的驱动程序员的经典去举动出现了:“我已经有足够的工具那些别人写出来并不能运行的,但我在写我自己的东西。”
因此,在1996年5月MySQL的1.0版本被试用到一个有限制的群体中,随后在1996年10月公开发布了MySQL的3.11.1版本。首次公开发行只提供了对Solaris的二进制分发。一个月后,源和Linux二进制被释放。
在未来两年中,随着功能集逐渐的增加,MySQL被移植到许多别的操作系统中。MySQL最初在一个特殊许可证下发布,允许商业利用那些谁也没分配的软件。特殊许可证也可以与商品一起绑定出售给那些需要的人。此外,商业产权也在被出售。尽管他们独创的目的已经达到,但TcX从中获得的收入已经证明了MySQL未来的发展肯能。
在此期间MySQL发展到3..22版本。它支持SQL语言的完整的一个子集,比我们预期可能有一个人写的优化了很多更复杂的,非常快,非常稳定。APIs的成员都做出了贡献,使任何一个人几乎能在任意一个客户端编写程序语言。但它任然缺少交易,子查询,外键,存储过程和视图的支持。锁定只能发生在一个表级别,在某些情况下可能慢下来然后突然停止运行。一些程序员无法解它的局限性任然认为这只是个玩具,而另、其他人更倾向于MySQL更乐意抛售Oracle和SQL Server,并在处理性能和节约成本的改善换取其代码中的局限。
在1999年~2000年这个时间里,一个命名为MySQL AB的独立公司成立。它公司雇佣了一些开发商并和提供Sleepycat的Berkeley DB的数据文件的SQL接口的建立了伙伴关系。由于Berkeley DB有交易功能。这件给MySQL以前完全被锁定的交易功能带来支持。为了准备整合Berkeley DB在修改一些代码之后,版本3.23被推出了。
虽然MySQL的开发人员不肯做到Berkeley DB所有苛刻的要求,Berkeley DB表也从来没有稳定运行,但努力没有白费。因此,MySQL源代码成为配有挂钩添加任何类型存储的发动机,包括一个事物之一。
到2000年4月,凭借一些来自于Slashdot的鼓励和赞助,增加了masterslave的复制能力。老的非事物存储引擎,无耻悲鄙下流的网.学,网总是抄辣|文,论-文.网,本网不再提供完整内容. 与InnoDB的组逐步稳定,使得MySQL到达了另一个层面。在2003年3月宣布4.0版本正式进入稳定生产。
版本的升级是值得一提的但绝不是因为InnoDB的补充而导致的结果。MySQL的开发人员一直认为InnoDB是非常重要的的补充,但不意味着是完全依赖它而导致成功的。那时,即使是现在,一个新存储引擎的补充不肯能像一个版本的改变一样庆祝。事实上,相比过去的版本,4.0版本没有多大的补充。也许最重要的补充就是增加了缓存查询,这个使大量代码运行的表现得到了大大的提高。代码的复制与重写使用两个线程:一是来之主机对网络I/O,另一个是处理更新。又增加了一些改进的优化。客户机/服务器协议成为SSL能力。
在2003年3月,命名为alpha的4.1版本发布,并在2004年6月宣布进行测试。不同于4.0版本,它增加了许多重大的改进。也许最重要的是子查询,一个被许多使用者期待已久的功能。空间索引功能的直接被增加到MySQL的存储引擎中。实施了Unicode的支持。客户机/服务器协议得到了许多改变。它更能抵抗外界的攻击,并支持编写报表。
在alpha4..1版本发布的同时,另一个发展分支任然在进行开发工作:版本5.0,它增加了存储过程,服务器端游标,触发器,试图,XA事物,查询优化器有了巨大的改进,并且有了许多新功能。因为MySQL的开发者感觉到如果如果把所有最新的顶级功能加入到4.1版本中将会花费很长的时间去稳定,而且他们不得不对存储过程进行处理,于是决定设立一个单独的开发分支。终于在2003年12月alpha5.0版本发布了。有一阵子,由于alpha形成了两个分支机构造成了很大的混乱。总后当4.1版本在2004年10月达到稳定时,混乱也同时解决了。
一年之后,在2005年10月5.0版本也达到了稳定。
随后在2005年11月第一个alpha5.1版本发布,它增加了许多改进,其中有表中的数据分区,基于行的复制,事件调度,和标准化的API插件,这有利于其它的插件与新存储引擎的整合。
在这一点上,MySQL正在积极发展。5.0是目前最稳定的版本,虽然5.1是测试版,但应该很快能达到稳定。新功能会被引进到5.2版本中。
MySQL的架构
对于大部分,MySQL的架构不同于正式定义和规范。在最初代码编写时,不是为了在未来成为大系统中的一部分,而是为了解决一些非常具体的问题。然而它写的这么好又有足够的洞察力,由于它有足够的优秀作品达到的地步促使它组建一个数据库服务器。
核心模块
我做个尝试在这节中找出系统中的核心模块。但我要补充说明下这只是一个尝试去寻在正规的存在。MySQL的开发者很少考虑这些条件。相反,他们更在乎文件,类,目录,结构和功能。“这发生在mi_open()”比“这发生在MylSAM存储引擎水平”更常被听到。MySQL的开发者太了解代码,因此他们能更多的去想运行等级,结构层次和类。他们更可能在本节中发现抽象的东西而不是无用的东西。但,这将对人们用来思考团队模块和团队管理有帮助。
关于MySQL中,我使用团队模块而不是松散的。不像普通人会在许多情况下调用一个模块,在许多情况下,这不是一个你轻易可以拔出用另一个取而代之去实现。一个模块中的代码可能分散在多个文件中,而且你会常常发现来自于不同模块的代码会在一个文件中。特别是在旧的代码中。更新的代码tendsm能更好的适应模块的模式。因此我们定义,一个模块是一段代码逻辑上属于同一地址。,并执行服务器上的某些重要功能。人们可以在服务器中识别以下模块:1506