MySQL与NoSQL - SQL与NoSQL的融合

admin 11年前
     <div class="contents_main">     <div id="ArticleCnt" class="content_words">      <p> 写这一篇内容的原因是MySQL5.6.2突然推出了memcached的功能。NoSQL to InnoDB with Memcached的出现,可以看出NoSQL对关系数据库的确产生了巨大的影响,个人觉得这是一个非常大的进步,可以让开发人员更加方便的使用NoSQL和关系数据库。NoSQL一般被认为性能高于关系数据库,那么直接在InnoDB之上提供NoSQL功能并和MySQL共存是否是一个更好的选择呢?</p>      <h2> MySQL with HandlerSocket</h2>      <p> 去年在推ter上看到HandlerSocket的出现,并宣称性能是Memcached的两倍时,非常令人吃惊,居然可以达到750000qps。接着HandlerSocket成为NoSQL领域谈论的焦点之一, 大量的人开始想要尝试,并做过一些自己的性能测试。 下图是HandlerSocket的结构图:</p>      <p><img title="MySQL与NoSQL——SQL与NoSQL的融合" border="0" alt="MySQL与NoSQL——SQL与NoSQL的融合" src="https://simg.open-open.com/show/4884efafc6042a2e0489ad544a7f0eab.jpg" width="600" height="359" /></p>      <p style="text-align:center;"><strong>图1 HandlerSocket结构图(来源于官方)</strong></p>      <p> HandlerSocket的出现,给我们眼前一亮的感觉。原来InnoDB的性能已经足够好,并可以直接提供NoSQL的功能。最大的好处就是可以共享MySQL的功能,DBA以前的经验一样可以用。但是有些小小的风险:</p>      <ul>       <li>HandlerSocket没有与MySQL一起发布版本,因此对于使用MyISAM引擎的用户是无缘的。不过现在Percona-Server已经集成了HandlerSocket,可以非常方便的使用。</li>       <li>目前大规模的成功案例并不多,国内也只有少部分公司在尝试,我知道的有飞信开放平台,据说还不错。</li>       <li>官方给出的测试数据在应用场景上其实并不充分,至少测试的场景跟我们实际使用的场景相差很大。但是毫无疑问, HandlerSocket的性能比直接使用MySQL肯定要高效得多。</li>      </ul>      <h2> InnoDB with Memcached</h2>      <p> 也许是因为HandlerSocket的火爆的冲击,也许是受HandlerSocket的启发,MySQL开始关注NoSQL领域的应用,并在MySQL5.6.2版本增加了通过Memcached协议直接访问原生Innodb API的功能。</p>      <p> InnoDB with Memcached是在提供MySQL服务的同一进程中提供Memcached服务 ,这与HandlerSocket的架构模式几乎是一样的。虽然目前InnoDB with Memcached还是预览版本,但是我个人更看好它,因为:</p>      <ul>       <li>它使用Memcached协议,并同时支持文本和二进制协议,在client的选择和成熟度上就要胜出许多;</li>       <li>其支持的三种cache模式,不但可以省去开发中使用Memcached来缓存数据的麻烦,并且具有更好的可靠性和数据一致性;</li>       <li>在应用程序中,可以使用高效的memcached协议来操作数据,同时也可以使用sql进行复杂的查询操作;</li>      </ul>      <p> 注意:目前通过memcached的更新操作不会记录到binlog中,未来的版本会支持。</p>      <p align="center"><img title="MySQL与NoSQL - SQL与NoSQL的融合" border="0" alt="MySQL与NoSQL - SQL与NoSQL的融合" src="https://simg.open-open.com/show/45f5cbe674e167deabed18c70199f63a.jpg" width="600" height="552" /></p>      <p style="text-align:center;"><strong>图二 InnoDB with Memcached</strong></p>      <h2 style="text-align:center;">Memcached and MySQL Cluster</h2>      <p> 显而易见,我们会想到MySQL Cluster结合Memcached是一个更好的组合,MySQL Cluster提供了99.999%高可用性,并真正提供了去中心化的无缝高可扩展性。还有什么比这更人兴奋的呢。</p>      <p> MySQL已经提供了这样的功能,源代码在<a href="/misc/goto?guid=4958189067509692711">这里</a>。这里有一个O'Reilly MySql Conference大会的<a href="/misc/goto?guid=4958189068253465422">PPT演示</a>,你也可以看下这个功能开发者的<a href="/misc/goto?guid=4958189068990326156">一篇博客</a>。</p>      <p class="image-wide" align="center"><img title="MySQL与NoSQL - SQL与NoSQL的融合" border="0" alt="MySQL与NoSQL - SQL与NoSQL的融合" src="https://simg.open-open.com/show/87d4178a90f336328990006a63cfeddc.jpg" width="398" height="544" /></p>      <p style="text-align:center;"><strong>图三 NDB with Memcached</strong></p>      <p> MySQL Cluster虽然具有高可靠性和无缝扩展的优势,但是对于复杂SQL查询的效率却不能令人满意。不过对于仅仅依赖于key-value查询和写入的海量数据存储需求,MySQL Cluster with Memcached应该是个很好的选择。</p>      <h2> 总结</h2>      <p> Memcached协议由于其简单、协议轻量、存在大量的client,所以提供兼容Memcached协议的产品比较占据先天的优势。</p>      <p> MySQL提供NoSQL的功能,个人觉得并不是MySQL耐不住寂寞,而是的确在响应用户的需求。我前面的文章也说过,NoSQL只是一个概念,并不是一个数据库 产品,MySQL也可以是NoSQL,现在也正应了这句话。NoSQL从架构上就约束了开发者的架构和开发方式,从而提高扩展性和性能,而NoSQL和MySQL的融合,也同时提供了复杂查询功能。</p>      <p> 虽然MySQL提供了NoSQL功能,如果你要尝试的话,你的数据库设计必须从NoSQL从发,然后再考虑SQL查询功能。</p>      <p> SQL与NoSQL的融合的确会给开发者带来方便,比如最近很流行的Mongodb,它吸引开发最大的点就是支持简单的关系查询。SQL与NoSQL的融合可能是未来很多数据库产品的一个趋势。但是纯NoSQL数据库的优势也是显著的,就是他的简单、高效、易扩展。<br /> <br /> 原文链接:<a href="/misc/goto?guid=4958189069723931077">http://www.cnblogs.com/sunli/archive/2011/05/11/mysql-nosql.html</a><br /> </p>     </div>    </div>