MySQL与NoSQL——SQL与NoSQL的融合
写这一篇内容的原因是MySQL5.6.2突然推出了memcached的功能。NoSQL to InnoDB with Memcached的出现,可以看出NoSQL对关系数据库的确产生了巨大的影响,个人觉得这是一个非常大的进步,可以让开发人员更加方便的使用NoSQL和关系数据库。NoSQL一般被认为性能高于关系数据库,那么直接在InnoDB之上提供NoSQL功能并和MySQL共存是否是一个更好的选择呢?
MySQL with HandlerSocket
去年在twitter上看到HandlerSocket的出现,并宣称性能是Memcached的两倍时,非常令人吃惊,居然可以达到750000qps。接着HandlerSocket成为NoSQL领域谈论的焦点之一, 大量的人开始想要尝试,并做过一些自己的性能测试。 下图是HandlerSocket的结构图:
图1 HandlerSocket结构图(来源于官方)
HandlerSocket的出现,给我们眼前一亮的感觉。原来InnoDB的性能已经足够好,并可以直接提供NoSQL的功能。最大的好处就是可以共享MySQL的功能,DBA以前的经验一样可以用。但是有些小小的风险:
- HandlerSocket没有与MySQL一起发布版本,因此对于使用MyISAM引擎的用户是无缘的。不过现在Percona-Server已经集成了HandlerSocket,可以非常方便的使用。
- 目前大规模的成功案例并不多,国内也只有少部分公司在尝试,我知道的有飞信开放平台,据说还不错。
- 官方给出的测试数据在应用场景上其实并不充分,至少测试的场景跟我们实际使用的场景相差很大。但是毫无疑问, HandlerSocket的性能比直接使用MySQL肯定要高效得多。
InnoDB with Memcached
也许是因为HandlerSocket的火爆的冲击,也许是受HandlerSocket的启发,MySQL开始关注NoSQL领域的应用,并在MySQL5.6.2版本增加了通过Memcached协议直接访问原生Innodb API的功能。
InnoDB with Memcached是在提供MySQL服务的同一进程中提供Memcached服务 ,这与HandlerSocket的架构模式几乎是一样的。虽然目前InnoDB with Memcached还是预览版本,但是我个人更看好它,因为:
- 它使用Memcached协议,并同时支持文本和二进制协议,在client的选择和成熟度上就要胜出许多;
- 其支持的三种cache模式,不但可以省去开发中使用Memcached来缓存数据的麻烦,并且具有更好的可靠性和数据一致性;
- 在应用程序中,可以使用高效的memcached协议来操作数据,同时也可以使用sql进行复杂的查询操作;
注意:目前通过memcached的更新操作不会记录到binlog中,未来的版本会支持。
图二 InnoDB with Memcached
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数据库的优势也是显著的,就是他的简单、高效、易扩展。
参考链接:
- Mongodb的SQL支持
- Tokyocabinet的table支持
- Schema-Free vs NoSQL
- MySQL Cluster - NoSQL access with some SQL
- 我的新浪微博@sunli1223NoSQL微群
关于作者
孙立,目前为去哪儿网(qunar.com)高级系统架构师。曾就职于凤凰网、ku6和搜狐。多年互联网从业经验和程序开发,对分布式搜索引擎的开发,高并发,大数据量网站系统架构优化,高可用性,可伸缩性,分布式系统缓存,数据库分表分库(sharding)等有丰富的经验,并且对运维监控和自动化运维控制有经验。是开源项目phplock,phpbuffer的作者。近期开发了一个NOSQL数据库存储INetDB,是NoSQL数据库爱好者。
本文已经首发于InfoQ中文站,版权所有,原文为《MySQL与NoSQL——SQL与NoSQL的融合》,如需转载,请务必附带本声明,谢谢。
InfoQ中文站是一个面向中高端技术人员的在线独立社区,为Java、.NET、Ruby、SOA、敏捷、架构等领域提供及时而有深度的资讯、高端技术大会如QCon 、线下技术交流活动QClub、免费迷你书下载如《架构师》等。
相关推荐
NoSQL,全称为“Not Only SQL”,是一种非关系型数据库技术,主要针对现代互联网应用的高并发、大数据量和分布式存储需求。随着Web2.0的崛起,传统的SQL关系数据库开始面临性能瓶颈,无法有效应对大规模数据处理和...
在传统的企业级应用、金融系统和数据分析中,SQL数据库如Oracle、MySQL、SQL Server等是主流选择。SQL的优势在于其规范性和标准化,能够提供ACID(原子性、一致性、隔离性和持久性)事务支持,保证数据的准确性和...
**一、MySQL与NoSQL的融合** 随着大数据时代的到来,传统的关系型数据库管理系统(RDBMS)面临着前所未有的挑战,尤其是在处理大规模数据集、提供高可用性和支持分布式计算方面。MySQL作为全球领先的开源数据库之一...
面对Tokyo Tyrant的稳定性风险和功能限制,开发团队决定自主研发NoSQL存储解决方案——INetDB。INetDB不仅兼容Memcached协议,支持主从复制和ttserver复制协议,还具备更高的性能和可靠性,在大数据量下表现尤为出色...
在MySQL的学习中,你需要理解SQL语言的基本操作(如SELECT、INSERT、UPDATE、DELETE),掌握数据库设计(如ER图、范式理论),熟悉存储引擎(InnoDB与MyISAM的区别),以及事务处理、索引优化、视图、触发器等高级...
总的来说,NOSQL与MySQL的融合为大数据环境下的数据存储提供了更高效、灵活的解决方案,克服了传统关系型数据库在处理大数据时的不足,同时也保留了SQL查询的便利性。这种融合模型是未来大数据存储技术发展的一个...
本文将深入探讨NoSQL数据库及其与MySQL的对比。 **NoSQL的起源与概念** NoSQL,全称为"Not Only SQL",它并非拒绝SQL,而是强调非关系型的数据存储方式。NoSQL主要针对大规模数据分布式、高并发、低延迟等场景设计...
【SQL和NoSQL数据库概述】 SQL(Structured Query Language)数据库是一种关系型数据库,它遵循ACID(原子性、一致性、隔离性和持久性)原则,确保数据的可靠性和一致性。SQL数据库通常使用表格形式来存储数据,...
理解SQL与NoSQL的区别对于选择适合特定应用场景的数据库至关重要。在需要高度一致性和事务处理的环境中,SQL数据库可能是更好的选择;而在处理大量非结构化数据、需要快速扩展或高可用性的场景下,NoSQL数据库将更具...
实验中,对于MySQL,除了使用SQL命令行工具进行操作,还展示了如何通过Java客户端编程接口(JDBC)进行数据库交互,例如使用`PreparedStatement`执行SQL语句,插入、查询和更新数据。 对于NoSQL数据库HBase、Redis...
Java面试题合集涵盖了多个关键的技术领域,包括JavaEE、Spring框架、SpringMVC、SpringBoot、MyBatis、MySQL数据库以及NoSQL存储,特别是Redis。这些知识点在现代企业级应用开发中占据着核心地位,因此对它们的理解...
【标签】:“MySQL”虽然在本主题中可能不是直接的焦点,但作为关系型数据库的代表,MySQL常常与NoSQL数据库进行对比,因此在这里可能是为了提供一个对比的视角。 【文件名称列表】:“常见的NoSQL数据库.mmap”和...
从关系型数据库转移至NoSQL数据库——比如从MySQL转移到Couchbase,你需要对你的数据进行再思考。至于为什么是Couchbase而不是MongoDB什么的,因为博文的作者MCBrown是现任Couchbase副总裁,所以你懂得;同时这篇...
《SQL与NoSQL,数据桥梁Sqoop》 SQL与NoSQL是两种主要的数据存储和管理方式,它们在处理数据上有着各自的特点和优势。SQL,全称Structured Query Language,是用于管理和处理关系型数据库的标准语言,它以二维表格...
随着Web2.0和云计算的兴起,和一些反SQL的倡导,越来越多的大公司加入到NoSQL阵营。Digg、Twitter、Google、微软等等公司已经开始研究NoSQL,并在一些项目中进行实施。许多人甚至抛弃了MySQL开源数据库这个长期以来...
15.1 MySQL用作NoSQL 241 15.2 静态数据存储 244 15.2.1 存储多元化在Facebook中的应用 245 15.2.2 数据仓库和商业智能 246 15.3 Web框架和NoSQL 247 15.3.1 Rails和NoSQL 247 15.3.2 Django和NoSQL 248 ...
本篇文章将深入探讨Golang在配合SQL和NoSQL数据库时的关键知识点,特别是关于MySQL的优化策略。 首先,让我们关注Golang与SQL的结合。Golang中的`database/sql`包提供了与SQL数据库交互的通用接口。开发者可以使用...
本文讲述了如何通过Hibernate OGM框架来实现对SQL和NoSQL数据库统一访问模型的设计与实现。随着互联网技术的迅猛发展,数据格式变得越来越多样化,导致了对不同类型数据库的需求。传统的关系型数据库如MySQL等由于其...
这里提到的"Oracle/Mysql/Mongo/Sqlserver数据库驱动集合"是一个包含这四种数据库的驱动程序的压缩包,主要用于Java开发环境中与这些数据库进行连接。 首先,Oracle数据库是甲骨文公司提供的企业级关系型数据库,...