去年八月在 OReilly 赞助的开放源码大会上,MySQL 开发人员Monty Widenius 宣布了一项新的项目叫做MaxSQL,一个目前十分流行的MySQL 数据库的增强版本。最重要的是MaxSQL 结合了来自Sleepycat软件的最新的 Berkeley DB 库,因此程序以另外一种表类型支持事务处理。
目前,你还不能直接安装MaxSQL的二进制版本,你必须从MySQL 3.23 beta 的源码来编译,但是当你看到这篇文章的时候,你应该可以从MySQL 网站下载MaxSQL了。 想要自己编译最新的版本的话,请看“编译自己的MaxSQL”一文,在那里我详细叙述了编译步骤。
什么是事务?
为什么增加了一个事务安全的表需要命名一个新的项目名字呢?或许我应该提一下MySQL 的主要开发者 Monty Widenius 有两个孩子,一个叫My ,另一个叫Max,哥儿俩相互竞争不说,另外还有一个对手PostgreSQL。
关于PostgreSQL,我们本期的另外一篇文章"PostgreSQL为电子商务加了一个等级" 会有提到,是一个对我们都有利的竞争者,因为每一个项目组都在克服自己产品中的弱点。而MaxSQL 所作的就是消除这两个对手之间的 差距。MySQL 有很快的读操作,因此很受Web 开发者欢迎,因为Web 内容 以读为主。但是,另外一方面,因为MySQL 使用了ISAM 表,所以写操作时,必须给整个表加锁,这样减慢了更新和插入的操作,当流量很大时会是一个很大的问题。当每秒请求数目剧增时,写操作在服务器中排队,Web 页面会发生超时错误。
使用了 MaxSQL后,你依然可以建立普通的快速ISAM 类型表,也可以在某个表需要使用事务安全特性时,选择使用新的BDB 类型。
BDB 表在写操作时要比 ISAM 快得多。因为他们不使用表一级的锁。 另外,对于任何事务表的处理都有日志记录以防硬件失效。日志允许 COMMIT/ROLLBACK 操作。例如,你在一个在线商店下订单, 订单会在"order" 表中记录一行。系统会从"inventory"表中的某一行中 减掉对应的库存货物数量。如果使用MySQL的ISAM表,一个CGI 程序需要执行以下六步:
已抢65526个
抢已抢30080个
抢已抢16435个
抢已抢8357个
抢已抢10786个
抢已抢22182个
抢