文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>MySQL加上事务处理等于MaxSQL

MySQL加上事务处理等于MaxSQL

时间:2007-02-17  来源:PHP爱好者

去年八月在 O'Reilly 赞助的开放源码大会上,MySQL 开发人员Monty Widenius 宣布了一项新的项目叫做MaxSQL,一个目前十分流行的MySQL 数据库的增强版本。最重要的是MaxSQL 结合了来自Sleepycat软件的最新的 Berkeley DB 库,因此程序以另外一种表类型支持事务处理。
c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg

c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg
  目前,你还不能直接安装MaxSQL的二进制版本,你必须从MySQL 3.23 beta 的源码来编译,但是当你看到这篇文章的时候,你应该可以从MySQL 网站下载MaxSQL了。 想要自己编译最新的版本的话,请看“编译自己的MaxSQL”一文,在那里我详细叙述了编译步骤。
c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg

c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg
什么是事务?
c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg

c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg
  为什么增加了一个事务安全的表需要命名一个新的项目名字呢?或许我应该提一下MySQL 的主要开发者 Monty Widenius 有两个孩子,一个叫My ,另一个叫Max,哥儿俩相互竞争不说,另外还有一个对手PostgreSQL。
c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg

c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg
  关于PostgreSQL,我们本期的另外一篇文章"PostgreSQL为电子商务加了一个等级" 会有提到,是一个对我们都有利的竞争者,因为每一个项目组都在克服自己产品中的弱点。而MaxSQL 所作的就是消除这两个对手之间的 差距。MySQL 有很快的读操作,因此很受Web 开发者欢迎,因为Web 内容 以读为主。但是,另外一方面,因为MySQL 使用了ISAM 表,所以写操作时,必须给整个表加锁,这样减慢了更新和插入的操作,当流量很大时会是一个很大的问题。当每秒请求数目剧增时,写操作在服务器中排队,Web 页面会发生超时错误。
c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg

c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg
  使用了 MaxSQL后,你依然可以建立普通的快速ISAM 类型表,也可以在某个表需要使用事务安全特性时,选择使用新的BDB 类型。
c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg

c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg
  BDB 表在写操作时要比 ISAM 快得多。因为他们不使用表一级的锁。 另外,对于任何事务表的处理都有日志记录以防硬件失效。日志允许 COMMIT/ROLLBACK 操作。例如,你在一个在线商店下订单, 订单会在"order" 表中记录一行。系统会从"inventory"表中的某一行中 减掉对应的库存货物数量。如果使用MySQL的ISAM表,一个CGI 程序需要执行以下六步:
c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg

c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg
  LOCK inventory table
c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg
  LOCK order table
c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg
  UPDATE inventory table
c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg
  UPDATE order table
c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg
  UNLOCK inventory table
c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg
  UNLOCK order table
c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg

c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg
  如果有人锁住了任何一个表,这个 CGI 程序就必须等待。一旦两个都加锁以后,CGI 才可以更新他们,然后释放锁。如果在第三步失败的话(例如服 务器宕机),order 表就不会被更新而你的库存已经减了下来。
c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg

c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg
  使用 MaxSQL BDB 事务安全类型的表之后,只需要四步:
c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg

c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg
  BEGIN
c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg
  UPDATE inventory table
c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg
  UPDATE order table
c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg
  COMMIT
c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg

c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg
  你不必等待释放锁,所有的四个步骤是一个事务。只要读到BEGIN 语句, MySQL 就把命令读入缓冲,一直到看到COMMIT 命令为止。因此,所有的操作在同一时间发生。即使有意外操作发生(磁盘满或者掉电),也不会因此而毁掉数据库。在一个非事务安全的系统里,如果第三步失败的话, 数据库就会发生不一致,而在BDB 表中,如果对order 表操作失败MySQL 会恢复对库存表的操作,这样不会发生不一致的情况了。
c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg

c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg
  许多网站采用早期版本的 MySQL来实现表锁,但是采用 MaxSQL 以后,会很容易和快速。
c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg

c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg
还有什么新式武器?
c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg

c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg
  除了因为 BDB 表需要把 MySQL 转变成 MaxSQL之外,另外还有一些 重要的改变。其中一个秘密武器就是数据库复制,你可以把一个服务器作为 主服务器,而配置任意数目的从服务器,这样对主服务器的更新也将拷贝到 从服务器。为了使用这样的系统,改变你的CGI 脚本,让他们知道MySQL 从 服务器的存在。这个脚本也会在不能连接上主服务器时,切换到从服务器。
c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg

c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg
  需要注意的是,这样的系统对很少写操作的数据库才有效,因为复制不是同步的。如果有人在主服务器上启动一个事务,而在事务结束之前服务器死机的话,主服务器没有时间把更新复制到从服务器。这样,这种系统不合适作电子商务,而且,CGI 脚本总是首先连接主服务器,所以不是负载平衡的系统。
c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg

c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg
  另外一个重大改进是 ISAM 类型表的格式。缺省的表类型现在叫作 MyISAM。 这种类型的表能处理到每个表最大2GB ,而且可以跨平台。 你可以从Linux 拷贝一个MyISAM 文件到Solaris 而不需要任何转换。
c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg

c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg
结论:
c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg

c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg
  MaxSQL 可以作为价格昂贵的商务系统的一个很优秀的替代品。很多系统不需要处理很多的事务交易,而要求安装Oracle。而MaxSQL 提供的事务安全的表,使更新数据库的编程工作更加轻松。
c hina it power . c omgu7QczPEPCFSgh2TfrRupP6Jg
php爱好者站 http://www.phpfans.net c/vc/c++/java.
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载