MySQL/HandlerSocket和VoltDB:NoSQL的競爭者

通常認爲NoSQL數據庫在性能方面要優於傳統的SQL數據庫。可是有兩個SQL的解決方案宣佈:對於大型系統的高可擴展性需求,SQL仍然是可行的解決方案!這兩個SQL解決方案分別是MySQL加NoSQL層插件和支持SQL的VoltDB數據庫。html

MySQL + HandlerSocket

Yoshinori Matsunobu是Sun/Oracle的前僱員,從事MySQL的研發工做,目前是DeNA的首席數據庫和基礎設施架構師,他以插件的方式爲MySQL/InnoDB提供解決方案,能夠在一臺2.53GHZ、8核CPU、32G內存的Nehalem服務器上把每秒的查詢數量(qps)提高到750,000以上。在一樣的硬件環境下,無插件的MySQL只能提供100,000左右的qps,若是使用memecached的話,能夠增長到大約400,000。通過對RDBMS的分析,Matsunobu意識到大部分時間都花在SQL的開銷上,好比調用MYSQLparse()、MYSQLlex()、make_join_statistics()和JOIN::optimize()等。他寫到:mysql

很顯然性能下降的緣由主要在SQL層,而不是「InnoDB(存儲)」層。MySQL必須作不少事情......但memcached/NoSQL是不須要作這些額外工做的。git

SQL層的功能包括解析SQL語句、打開/鎖定/解鎖/關閉表、解決併發問題等。Matsunobu的解決方案就是增長額外的NoSQL層:github

咱們認爲最好的方式就是在MySQL內部實現一個NoSQL的網絡服務器。也就是說,編寫一個網絡服務器做爲MySQL的插件(守護插件),用來監聽特定端口,接收NoSQL的協議和API,而後經過MySQL內部存儲引擎API直接訪問InnoDB。這種方式很像NDBAPI,不一樣的是它能夠與InnoDB交互。sql

他的團隊開發了HandlerSocket插件,有了這個插件,MySQL更像一個NoSQL數據庫,經過監聽一個獨立的端口,接收從SQL層來的簡單查詢請求,例如主鍵查詢,索引掃描和插入/更新/刪除。這一變化把數據庫性能提高到了750K qps以上。經常使用端口能夠接收處理複雜查詢,其核心仍然是SQL數據庫。DeNA採用SQL/NoSQL混合的方式取得了成功,據Matsunobu所言,在相同的時間內,這種解決方案把多個memcached和MySQL主從服務器的方案遠遠甩在了後面。數據庫

VoltDB

另外一個頗有但願的SQL解決方案是VoltDB,這是一個內存中的開源OLTP SQL數據庫,可以保證事務的完整性(ACID)。VoltDB是由原Ingres和Postgres的架構師Mike Stonebraker設計的。該數據庫主要特徵以下:瀏覽器

  • 爲了得到最大化吞吐量,數據保存在內存中(而不是在硬盤),這樣能夠有效消除緩衝區管理。服務器

  • VoltDB經過SQL引擎把數據分發給集羣服務器的每一個CPU進行處理。網絡

  • 每一個單線程分區自主執行,消除鎖定和閂鎖的需求。架構

  • VoltDB能夠經過簡單的在集羣中增長附加節點的方式實現性能的線性增長。

正如其開發者宣稱的那樣,該數據庫的性能使其成爲NoSQL解決方案的有力競爭者:

  • VoltDB在單節點上能夠每秒處理53000個事務請求(TPS),其餘DBMS在相同的硬件環境下只能處理1155個。VoltDB的擴展是近似線性的──在12個節點的VoltDB集羣上進行一樣測試,能夠處理560,000 TPS。

  • 基準案例:某個客戶的在線遊戲在12個節點的VoltDB集羣上處理了130萬 TPS。

  • VoltDB還針對NoSQL的鍵-值存儲方式做了基準測試,VoltDB在處理各類鍵-值存儲負載的狀況下得到了相同或更好的性能。

除了它的性能,VoltDB的主要優點是能夠與SQL用戶進行交流,這些SQL用戶是很好的資源。

近期還會推出VoltDB的企業版本,包括基於瀏覽器的數據庫管理系統,提供、管理和監控數據庫集羣。除了免費的社區版本,針對企業版的支持也開始了。


應用網址:http://www.infoq.com/cn/news/2010/11/MySQL-HandlerSocket-VoltDB

查看英文原文:MySQL/HandlerSocket and VoltDB: Contenders to NoSQL

相關文章
相關標籤/搜索