现在的位置: 首页 > 综合 > 正文

MySQL+HandlerSocket=MySQL的功能+NoSQL的性能

2017年12月27日 ⁄ 综合 ⁄ 共 1051字 ⁄ 字号 评论关闭

文章首先分析了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的架构如下图(来自原文):

mysql_handlersocket_thumb.png

从图中可以看到,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

抱歉!评论已关闭.