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()等。他寫到:
很顯然效能降低的原因主要在SQL層,而不是“InnoDB(儲存)”層。MySQL必須做很多事情......但
memcached/NoSQL是不需要做這些額外工作的。
參考:
MySQL/HandlerSocket和VoltDB:NoSQL的競爭者
http://hi.baidu.com/%CA%AB%D5%B9/blog/item/30e9aed38d3af024960a1649.html
通常,MySQL Server可以被看成兩層架構:即SQL Layer和Storage Engine Layer,它們之間通過
Handler API進行互動。MySQL Server在接收到用戶端的Query請求後,通常需要在SQL layer中進行詞法
分析,文法分析,最佳化等過程,最終產生一個樹型的查詢計劃,交由執行引擎執行。執行引擎根據查詢
計劃,跟相應的儲存引擎通訊,得到查詢結果。
HandlerSocket的作者認為,對於CPU bound的MySQL server來說,SQL layer消耗了過多的資源,以致總
體效能不佳。HandlerSocket則繞過了MySQL Server的SQL layer,直接跟儲存引擎互動,從而帶來了大
幅的效能提升。預設情況下HandlerSocket Plugin監聽9998和9999兩個連接埠,其中9998隻支援讀操作,
9999支援讀寫操作,但是效能跟9998連接埠相比稍慢。
參考:
http://whitesock.javaeye.com/blog/811339
有人認為目前HandlerSocket還不能跟Memcache比較:
HandlerSocket is great, but don't compare it to Memcache just yet.
Dec. 28th, 2010 at 11:34 AM
The HandlerSocket plugin for MySQL currently lacks atomic operations . It is impossible to
implement counters (increment/decrement value) or REPLACE functionality with the current
implementation.
It currently exceeds the performance of Memcache for get/set operations, but I want to see
how fast it is once atomic operations are implemented. Until then, I don't think it is a
serious contender for replacing Memcache for the cache layer in a complex environment.
HandlerSocket效能評測:
HandlerSocket on SSD
http://www.mysqlperformanceblog.com/2010/11/02/handlersocket-on-ssd/
在CentOS 5中安裝Percona-Server和HandlerSocket:
Installing HandlerSocket on CentOS 5 + Percona-Server in Five Easy Steps
1 – Set up the Percona Yum Repository
%> rpm -Uhv http://www.percona.com/downloads/percona-release/percona-release-0.0-
1.x86_64.rpm
Additional documentation for other distributions can be found at
http://www.percona.com/docs/wiki/repositories:start
2 – Install Percona-Server Packages
%> yum install Percona-Server-client-51.x86_64 Percona-Server-devel-51.x86_64 Percona-
Server-server-51.x86_64 Percona-Server-shared-51.x86_64 Percona-Server-shared-compat.x86_64
3 – Enable the PlugIn in my.cnf by adding the following lines in [mysqld]:
loose_handlersocket_port = 9998
loose_handlersocket_port_wr = 9999
loose_handlersocket_threads = 16
loose_handlersocket_threads_wr = 1
open_files_limit = 65535
4 – Install the PlugIn
mysql> install plugin handlersocket soname 'handlersocket.so';
5 – Verify
The easiest way to verify that HandlerSocket is running is to simply telnet to ports 9998
and 9999 on the localhost.
安裝參考:
http://whitesock.javaeye.com/blog/811339
http://hi.baidu.com/higkoo/blog/item/fdb7a8fc51645deffd037f06.html
NoSQL:
NoSQL 是非關係型資料存放區的廣義定義。它打破了長久以來關係型資料庫與 ACID 理論大一統的局面。
NoSQL 資料存放區不需要固定的表結構,通常也不存在串連 操作。在大資料存取上具備關係型資料庫無法
比擬的效能優勢。該術語在 2009 年初得到了廣泛認同。
當今的應用體繫結構需要資料存放區在橫向伸縮性 上能夠滿足需求。而 NoSQL 儲存就是為了實現這個需
求。Google 的 BigTable 與 Amazon 的 Dynamo 是非常成功的商業 NoSQL 實現。一些開源的 NoSQL 體
系,如Facebook 的 Cassandra , Apache 的 HBase ,也得到了廣泛認同。
參考:
http://blog.csdn.net/DL88250/archive/2010/01/14/5191092.aspx