HandlerSocket ---MySQL与NoSQL ---SQL与NoSQL的融合(转)

项目地址:https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQLphp

写这一篇内容的缘由是MySQL5.6.2忽然推出了memcached的功能。NoSQL to InnoDB with Memcached的出现,能够看出NoSQL对关系数据库的确产生了巨大的影响,我的以为这是一个很是大的进步,可让开发人员更加方便的使用NoSQL和关系数据库。NoSQL通常被认为性能高于关系数据库,那么直接在InnoDB之上提供NoSQL功能并和MySQL共存是不是一个更好的选择呢?html

MySQL with HandlerSocket

去年在twitter上看到HandlerSocket的出现,并宣称性能是Memcached的两倍时,很是使人吃惊,竟然能够达到750000qps。接着HandlerSocket成为NoSQL领域谈论的焦点之一, 大量的人开始想要尝试,并作过一些本身的性能测试。 下图是HandlerSocket的结构图:mysql

图1 HandlerSocket结构图(来源于官方)git

HandlerSocket的出现,给咱们眼前一亮的感受。原来InnoDB的性能已经足够好,并能够直接提供NoSQL的功能。最大的好处就是能够共享MySQL的功能,DBA之前的经验同样能够用。可是有些小小的风险:github

  • HandlerSocket没有与MySQL一块儿发布版本,所以对于使用MyISAM引擎的用户是无缘的。不过如今Percona-Server已经集成了HandlerSocket,能够很是方便的使用。
  • 目前大规模的成功案例并很少,国内也只有少部分公司在尝试,我知道的有飞信开放平台,听说还不错。
  • 官方给出的测试数据在应用场景上其实并不充分,至少测试的场景跟咱们实际使用的场景相差很大。可是毫无疑问, HandlerSocket的性能比直接使用MySQL确定要高效得多。

InnoDB with Memcached

也许是由于HandlerSocket的火爆的冲击,也许是受HandlerSocket的启发,MySQL开始关注NoSQL领域的应用,并在MySQL5.6.2版本增长了经过Memcached协议直接访问原生Innodb API的功能。sql

InnoDB with Memcached是在提供MySQL服务的同一进程中提供Memcached服务 ,这与HandlerSocket的架构模式几乎是同样的。虽然目前InnoDB with Memcached仍是预览版本,可是我我的更看好它,由于:mongodb

  • 它使用Memcached协议,并同时支持文本和二进制协议,在client的选择和成熟度上就要胜出许多;
  • 其支持的三种cache模式,不但能够省去开发中使用Memcached来缓存数据的麻烦,而且具备更好的可靠性和数据一致性;
  • 在应用程序中,可使用高效的memcached协议来操做数据,同时也可使用sql进行复杂的查询操做;

注意:目前经过memcached的更新操做不会记录到binlog中,将来的版本会支持。数据库

图二 InnoDB with Memcachedapi

Memcached and MySQL Cluster

显而易见,咱们会想到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数据库的优点也是显著的,就是他的简单、高效、易扩展。

参考连接:

相关文章
相关标签/搜索