去年八月在 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 程式需要執行以下六步:
LOCK inventory table
LOCK order table
UPDATE inventory table
UPDATE order table
UNLOCK inventory table
UNLOCK order table
如果有人鎖住了任何一個表,這個 CGI 程式就必須等待。一旦兩個都加鎖以後,CGI 才可以更新他們,然後釋放鎖。如果在第三步失敗的話(例如服 務器宕機),order 表就不會被更新而你的庫存已經減了下來。
使用 MaxSQL BDB 事務安全類型的表之後,只需要四步:
BEGIN
UPDATE inventory table
UPDATE order table
COMMIT
你不必等待釋放鎖,所有的四個步驟是一個事務。只要讀到BEGIN 語句, MySQL 就把命令讀入緩衝,一直到看到COMMIT 命令為止。因此,所有的操作在同一時間發生。即使有意外操作發生(磁碟滿或者掉電),也不會因此而毀掉資料庫。在一個非事務安全的系統裡,如果第三步失敗的話, 資料庫就會發生不一致,而在BDB 表中,如果對order 表操作失敗MySQL 會恢複對庫存表的操作,這樣不會發生不一致的情況了。
許多網站採用早期版本的 MySQL來實現表鎖,但是採用 MaxSQL 以後,會很容易和快速。
還有什麼新式武器?
除了因為 BDB 表需要把 MySQL 轉變成 MaxSQL之外,另外還有一些 重要的改變。其中一個秘密武器就是資料庫複寫,你可以把一個伺服器作為 主伺服器,而配置任意數目的從伺服器,這樣對主伺服器的更新也將拷貝到 從伺服器。為了使用這樣的系統,改變你的CGI 指令碼,讓他們知道MySQL 從 伺服器的存在。這個指令碼也會在不能串連上主伺服器時,切換到從伺服器。
需要注意的是,這樣的系統對很少寫操作的資料庫才有效,因為複製不是同步的。如果有人在主伺服器上啟動一個事務,而在事務結束之前伺服器死機的話,主伺服器沒有時間把更新複製到從伺服器。這樣,這種系統不合適作電子商務,而且,CGI 指令碼總是首先串連主伺服器,所以不是Server Load Balancer的系統。
另外一個重大改進是 ISAM 類型表的格式。預設的表類型現在叫作 MyISAM。 這種類型的表能處理到每個表最大2GB ,而且可以跨平台。 你可以從Linux 拷貝一個MyISAM 檔案到Solaris 而不需要任何轉換。
結論:
MaxSQL 可以作為價格昂貴的商務系統的一個很優秀的替代品。很多系統不需要處理很多的事務交易,而要求安裝Oracle。而MaxSQL 提供的事務安全的表,使更新資料庫的編程工作更加輕鬆。
http://www.bkjia.com/PHPjc/532068.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/532068.htmlTechArticle去年八月在 OReilly 贊助的開放源碼大會上,MySQL 開發人員Monty Widenius 宣布了一項新的項目叫做MaxSQL,一個目前十分流行的MySQL 資料庫的增強...