隨著Web應用變得越來越復雜,單純的mysql + Memcached似乎已滿足不了數據存儲的需求,一些企業紛紛轉向NoSQL方案,比如MongoDB、CouchDB、 TokyoCabinet/Tyrant、Cassandra等。在他們看來,如果數據訪問模式不是很復雜,用不上SQL數據庫。然而,DeNA公司截然相反,他們選擇了 "only MySQL" 的方案,且獲得了遠遠超越NoSQL的性能。
該公司仍在使用MySQL + Memcached,Memcached主要用于前端Cache,比如預處理的HTML、計數和摘要信息等,但數據行并不放在Cache里,而是直接從數據庫查,因為普通的服務器就可以獲得75萬次每秒的查詢,當前又有哪種NoSQL可以做到呢?
可以使用sysbench、super-smack、mysqlslap等工具測試MySQL性能,比如
[matsunobu@host ~]$ mysqlslap --query="select user_name,..
from test.user where user_id=1" \
--number-of-queries=10000000 --concurrency=30 --host=xxx -uroot
然后使用如下命令得到每秒讀取的行數,
[matsunobu@host ~]$ mysqladmin extended-status -i 1 -r -uroot \
grep -e "Com_select"
...
Com_select | 107069
Com_select | 108873
Com_select | 108921
Com_select | 109511
Com_select | 108084
Com_select | 108483
Com_select | 108115
...
可以使用vmstat和Oprofile等工具診斷系統瓶頸。
MySQL Cluster因為性能問題一直受人批判,為改善這種情況引入了NDBAPI,使得性能提升了N倍。但對于非集群情況怎么優化呢?通過MySQL瓶頸分 析,發現大部分時間花費在SQL解析和表操作上,如果繞過這層操作直接存取存儲引擎,可大大提升性能,MySQL的插件HandlerSocket正是由 此獲得了每秒75萬次查詢操作的性能,這個評測數據無疑會顛覆整個NoSQL世界。另外,HandlerSocket支持批量讀取和寫操作,這進一步提升 了它的性能。