MySQL+HandlerSocket=MySQL的功能+NoSQL的性能
文章首先分析了MySQL查詢時的瓶頸(SQL分析、數據表的打開關閉等),然后介紹了HandlerSocket插件。HandlerSocket插件讓MySQL達到了近兩倍于memcached的查詢性能,灰常的niubi!
approx qps server CPU util MySQL via SQL 105,000 %us 60% %sy 28% memcached 420,000 %us 8% %sy 88% MySQL via HandlerSocket 750,000 %us 45% %sy 53%MySQL+HandlerSocket的架構如下圖(來自原文):
從圖中可以看到,HandlerSocket開了9998和9999端口,分別用于讀寫操作。對于基于主鍵的CRUD操作,客戶端通過HandlerSocket進行,省略了SQL分析、數據表的打開關閉等操作。而其他查詢仍然通過MySQL的3306端口進行。
相比常見的memcached+MySQL的架構,MySQL+HandlerSocket架構有兩個最明顯的優勢:
- 節約內存:由于MySQL InnoDB本身就會緩存數據,所以沒必要在memcached多保存一份。
- 避免數據不一致性:引入memcached后,一個很頭痛的問題就是保證數據的一致性。而去掉memcached后,由于所有的數據庫操作都是直接達到InnoDB引擎,所以完全消除了此問題。
相對于其他NoSQL解決方案,MySQL+HandlerSocket也有優勢:
- 降低應用開發難度:由于SQL提供了豐富的查詢功能,相當于大多數NoSQL來說,開發應用時更簡單。
- 降低風險:NoSQL各有特色,選擇不慎會造成深遠的影響。而且能夠完全掌握NoSQL的技術人員也不夠普遍,出了問題不一定能夠馬上解決。
不過,HandlerSocket雖然省掉了一些步驟,但要是內存不足以緩存大部分常用數據。那么HandlerSocket帶來的優勢就蕩然無存了。因此在使用HandlerSocket時,服務器一定要具備足夠的內存空間用于InnoDB的Buffer Pool。此外對PHP開發者來說,HandlerSocket目前還沒有可用的PHP擴展。
作者說他們已經將HandlerSocket用于了生產環境,取得了很好的效果。作者目前就職于日本最大的社會化游戲平臺提供商DeNA。
最后,附上HandelrSocket的倉庫地址,這是一個開源項目:http://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL。
總結
以上是生活随笔為你收集整理的MySQL+HandlerSocket=MySQL的功能+NoSQL的性能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux c socket通信
- 下一篇: 编译php5遇到iconv错误的解决方法