导读:MoreSQL(之前的NewSQL)旨在将SQL和NoSQL的优势结合起来。通过技术整合,MoreSQL完全可以在SQL(Structured Query Language)的基础上吸收NoSQL的灵活性、可扩展性等优点,迎来关系型数据库的黄金时代。
NoSQL运动的兴起
长期以来,业界一直认为关系数据库查询中的JOIN命令会对性能造成不良影响。
虽然MySQL中的ISAM存储引擎不支持事务处理和容错,是一个不可信存储引擎,但是由于ISAM存储引擎访问速度极快,加之MySQL的价格优势,因此备受青睐。然而,CAP定理证明了大家心中的疑虑,关系型数据库缺乏扩展性。
关于MapReduce、分布式数据存储以及扩展性问题,Google发布了一系列论文。随后,Amazon也加入了讨论。不久之后,大家都参与进来,一时间沸沸扬扬。
NoSQL运动的正是源于以Google、Amazon为代表的互联网公司。
Tenzing SQL:Google在MapReduce框架上的SQL实现
Tenzing是一个构建在MapReduce框架之上的查询引擎,被Google用于特定的数据分析。Tenzing通过扩展支持近乎完整的SQL实现,并整合了一系列关键特性,如高性能、可扩展性、可靠性、低延迟、分列存储、结构化数据支持等等。
Google在自己的分布式数据存储上运行SQL,并使用特殊的方式处理棘手的问题(如JOIN)。现在Google内部有1000名以上的员工在使用Tenzing,每天在超过1.5PB的压缩数据之上处理10000多次查询请求。
为何选择MoreSQL
Google引领了网络分布式计算发展潮流。主流开发者关注Tenzing SQL,并涉足基于Hadoop之上的SQL层面,只是时间问题。
与此同时,PostgreSQL仍在高速发展,大家往往忽略了它的Key-value存储设计。
Google的一个独立开发团队,也许就是Chrome开发团队,将一个名为LevelDB的Key-value存储实现开放了源代码。LevelDB是一种高效的Key-value存储实现,并提供有序的字符串键值映射关系。可以想象,一个全新的开源分布式SQL数据存储将会使用LevelDB存储引擎。
最令人振奋的是Fractal Tree数据库。大家都在数据库中使用B和B+树,甚至在文件系统中也有它们的身影。学术界中有一些人在Fractal Tree技术的基础上开发了商业化的TokuDB,据说其性能可提高20到80倍。
根据我个人的性能评测,开启任意一种可靠性设置之后,每个数据存储区的插入速度大致在每秒5K左右。如果在同样的情况下,可以将插入速度提高到20K甚至更快,那真是太令人振奋了!
关于性能问题,我们再来谈谈ORM(对象关系映射)。从情感上讲,我并不信任ORM。据我所知,PostgreSQL的异步驱动可以在处理复杂查询的同时,对其进行重新排序和合并,但我依然怀疑其编译器是否足够智能。
通过实验,我发现即使增加更多负荷,使用自己的代码缓存数据库交互,并进行重排序和合并操作的效率也是各种方式中最高的。ORM做不到这些。为了获得更好的性能,我们可能会去除不必要的抽象层,自己编写查询语句,因为只有我们知道数据库端的架构。也只有我们自己,才是最智能的编译器。
虽然NOSQL具备更好的灵活性和可扩展性,但它也有自己的局限性。不使用SQL,NoSQL缺少了与数学紧密结合的高度机构化查询能力,而且,NoSQL也不支持ACID(原子性,一致性,隔离性,持久性)。
MoreSQL(之前的NewSQL)旨在将SQL和NoSQL的优势结合起来。通过技术整合,MoreSQL完全可以在SQL(Structured Query Language)的基础上吸收NoSQL的灵活性、可扩展性等优点,迎来关系型数据库的黄金时代。
未来十年:MoreSQL的黄金时代
我认为,下一个十年当然是网络的十年,但也是我们在扩展性问题上重新认识JOIN的十年。未来十年,我们会重新加入到SQL的复兴(MoreSQL运动)中来!
当然,Google在这期间肯定会发布新的论文,那时也许会为我们指引不同的方向。这是风险,但也值得期待!(张志平/编译)
原文链接:http://williamedwardscoder.tumblr.com/post/16399069781/google-moresql-is-real
Tenzing SQL:http://research.google.com/pubs/pub37200.html
(责任编辑:吕光)