项目地址:https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQLphp
写这一篇内容的缘由是MySQL5.6.2忽然推出了memcached的功能。NoSQL to InnoDB with Memcached的出现,能够看出NoSQL对关系数据库的确产生了巨大的影响,我的以为这是一个很是大的进步,可让开发人员更加方便的使用NoSQL和关系数据库。NoSQL通常被认为性能高于关系数据库,那么直接在InnoDB之上提供NoSQL功能并和MySQL共存是不是一个更好的选择呢?html
去年在twitter上看到HandlerSocket的出现,并宣称性能是Memcached的两倍时,很是使人吃惊,竟然能够达到750000qps。接着HandlerSocket成为NoSQL领域谈论的焦点之一, 大量的人开始想要尝试,并作过一些本身的性能测试。 下图是HandlerSocket的结构图:mysql
图1 HandlerSocket结构图(来源于官方)git
HandlerSocket的出现,给咱们眼前一亮的感受。原来InnoDB的性能已经足够好,并能够直接提供NoSQL的功能。最大的好处就是能够共享MySQL的功能,DBA之前的经验同样能够用。可是有些小小的风险:github
也许是由于HandlerSocket的火爆的冲击,也许是受HandlerSocket的启发,MySQL开始关注NoSQL领域的应用,并在MySQL5.6.2版本增长了经过Memcached协议直接访问原生Innodb API的功能。sql
InnoDB with Memcached是在提供MySQL服务的同一进程中提供Memcached服务 ,这与HandlerSocket的架构模式几乎是同样的。虽然目前InnoDB with Memcached仍是预览版本,可是我我的更看好它,由于:mongodb
注意:目前经过memcached的更新操做不会记录到binlog中,将来的版本会支持。数据库
图二 InnoDB with Memcachedapi
显而易见,咱们会想到MySQL Cluster结合Memcached是一个更好的组合,MySQL Cluster提供了99.999%高可用性,并真正提供了去中心化的无缝高可扩展性。还有什么比这更人兴奋的呢。缓存
MySQL已经提供了这样的功能,源代码在这里。这里有一个O'Reilly MySql Conference大会的PPT演示 ,你也能够看下这个功能开发者的一篇博客。
图三 NDB with Memcached
MySQL Cluster虽然具备高可靠性和无缝扩展的优点,可是对于复杂SQL查询的效率却不能使人满意。不过对于仅仅依赖于key-value查询和写入的海量数据存储需求,MySQL Cluster with Memcached应该是个很好的选择。
Memcached协议因为其简单、协议轻量、存在大量的client,因此提供兼容Memcached协议的产品比较占据先天的优点。
MySQL提供NoSQL的功能,我的以为并非MySQL耐不住寂寞,而是的确在响应用户的需求。我前面的文章也说过,“NoSQL只是一个概念,并非一个数据库 产品,MySQL也能够是NoSQL”,如今也正应了这句话。NoSQL从架构上就约束了开发者的架构和开发方式,从而提升扩展性和性能,而NoSQL和MySQL的融合,也同时提供了复杂查询功能。
虽然MySQL提供了NoSQL功能,若是你要尝试的话,你的数据库设计必须从NoSQL出发,而后再考虑SQL查询功能。
SQL与NoSQL的融合的确会给开发者带来方便,好比最近很流行的Mongodb,它吸引开发最大的点就是支持简单的关系查询。SQL与NoSQL的融合多是将来不少数据库产品的一个趋势。可是纯NoSQL数据库的优点也是显著的,就是他的简单、高效、易扩展。
参考连接: