|
一般認(rèn)為NoSQL數(shù)據(jù)庫在性能方面要優(yōu)于傳統(tǒng)的SQL數(shù)據(jù)庫。但是有兩個SQL的解決方案宣布:對于大型系統(tǒng)的高可擴展性需求,SQL仍然是可行的解決方案!這兩個SQL解決方案分別是MySQL加NoSQL層插件和支持SQL的VoltDB數(shù)據(jù)庫。
MySQL + HandlerSocket
Yoshinori Matsunobu是Sun/Oracle的前雇員,從事MySQL的研發(fā)工作,目前是DeNA的首席數(shù)據(jù)庫和基礎(chǔ)設(shè)施架構(gòu)師,他以插件的方式為MySQL/InnoDB提供解決方案,可以在一臺2.53GHZ、8核CPU、32G內(nèi)存的Nehalem服務(wù)器上把每秒的查詢數(shù)量(qps)提升到750,000以上。
在同樣的硬件環(huán)境下,無插件的MySQL只能提供100,000左右的qps,如果使用memecached的話,可以增加到大約400,000。經(jīng)過對RDBMS的分析,Matsunobu意識到大部分時間都花在SQL的開銷上,比如調(diào)用MYSQLparse()、MYSQLlex()、make_join_statistics()和JOIN::optimize()等。他寫到:
很顯然性能降低的原因主要在SQL層,而不是“InnoDB(存儲)”層。MySQL必須做很多事情......但memcached/NoSQL是不需要做這些額外工作的。
SQL層的功能包括解析SQL語句、打開/鎖定/解鎖/關(guān)閉表、解決并發(fā)問題等。Matsunobu的解決方案就是增加額外的NoSQL層:
我們認(rèn)為最好的方式就是在MySQL內(nèi)部實現(xiàn)一個NoSQL的網(wǎng)絡(luò)服務(wù)器。也就是說,編寫一個網(wǎng)絡(luò)服務(wù)器作為MySQL的插件(守護插件),用來監(jiān)聽特定端口,接收NoSQL的協(xié)議和API,然后通過MySQL內(nèi)部存儲引擎API直接訪問InnoDB。這種方式很像NDBAPI,不同的是它可以與InnoDB交互。
他的團隊開發(fā)了HandlerSocket插件,有了這個插件,MySQL更像一個NoSQL數(shù)據(jù)庫,通過監(jiān)聽一個獨立的端口,接收從SQL層來的簡單查詢請求,例如主鍵查詢,索引掃描和插入/更新/刪除。這一變化把數(shù)據(jù)庫性能提升到了750K qps以上。常用端口可以接收處理復(fù)雜查詢,其核心仍然是SQL數(shù)據(jù)庫。DeNA采用SQL/NoSQL混合的方式取得了成功,據(jù)Matsunobu所言,在相同的時間內(nèi),這種解決方案把多個memcached和MySQL主從服務(wù)器的方案遠(yuǎn)遠(yuǎn)甩在了后面。
VoltDB
另一個很有希望的SQL解決方案是VoltDB,這是一個內(nèi)存中的開源OLTP SQL數(shù)據(jù)庫,能夠保證事務(wù)的完整性(ACID)。VoltDB是由原Ingres和Postgres的架構(gòu)師Mike Stonebraker設(shè)計的。該數(shù)據(jù)庫主要特征如下:
- 為了獲得最大化吞吐量,數(shù)據(jù)保存在內(nèi)存中(而不是在硬盤),這樣可以有效消除緩沖區(qū)管理。
- VoltDB通過SQL引擎把數(shù)據(jù)分發(fā)給集群服務(wù)器的每個CPU進行處理。
- 每個單線程分區(qū)自主執(zhí)行,消除鎖定和閂鎖的需求。
- VoltDB可以通過簡單的在集群中增加附加節(jié)點的方式實現(xiàn)性能的線性增加。
正如其開發(fā)者宣稱的那樣,該數(shù)據(jù)庫的性能使其成為NoSQL解決方案的有力競爭者:
除了它的性能,VoltDB的主要優(yōu)勢是可以與SQL用戶進行交流,這些SQL用戶是很好的資源。
近期還會推出VoltDB的企業(yè)版本,包括基于瀏覽器的數(shù)據(jù)庫管理系統(tǒng),提供、管理和監(jiān)控數(shù)據(jù)庫集群。除了免費的社區(qū)版本,針對企業(yè)版的支持也開始了。
查看英文原文:MySQL/HandlerSocket and VoltDB: Contenders to NoSQL
it知識庫:MySQL/HandlerSocket和VoltDB:NoSQL的競爭者,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。