本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2013/11/nosql-trends
近日,Peter Bell与InfoQ分享了他对于Nosql最近发展趋势的一些看法,Nosql是一类发展迅速的数据库存储,涵盖了多种解决方案。Peter是Pragmatic Learning公司的讲师,这家公司就是由他创建的,同时他还是GitHub培训团队的一名签约成员,也是Speak Geek的创建者,这家公司的主要目标是为商业人士提供培训,帮助他们雇佣和管理开发者。他经常针对各种Nosql数据存储提供培训和演讲,包括MongoDB、Neo4j及Redis,是一位MongoDB专家。
InfoQ:过去的几年间,Nosql得到了长足的发展,从一开始的前沿技术发展成为现在很多应用技术栈的标准组成部分。你认为促进这种快速发展的因素有哪些呢?
Nosql得到如此广泛的普及主要有3个驱动力。首先是需求。在过去的几年间,互联网与移动的流量呈现出了爆发性的增长,现在很多大公司所处理的数据规模是几年前我们几乎不曾想到的。传统的关系型数据库在设计时从未考虑过能够比较容易地实现跨节点可伸缩这一特性,因此Nosql在那些需要能够实现快速、轻松且低成本可伸缩的公司中开始流行起来。
第2个驱动力是可用性。在过去几年间,开源软件真的开始成熟起来了,现在已经出现了很多成熟的开源Nosql存储,这样公司就可以轻松找到满足其需求的数据存储方案了。
最后,Nosql很时髦!我相信现在一定存在使用Nosql构建,但关系型数据库却更加适合的应用。然而,随着Nosql逐渐从新生事物变成主流,甚至过时后,我希望技术人员在选择适合其应用场景的解决方案时能够更加理性一些。
InfoQ:最近,我们看到有一些新的厂商进入到了一个被称为Newsql的领域(不过这个名字还没有普及)。能否谈谈何谓Newsql?你觉得对于需要事务性数据库保证的企业来说,这会增加非关系型数据库在这些企业中的普及度么?
Newsql指的是像NuoDB这样的现代数据库,他们将跨节点的可伸缩性与对SQL查询的支持结合起来了。比如说,如果负载已经超出了单台服务器的承受能力,然而你又不想让开发团队针对没有实现sql的数据库重写编写代码,那么Newsql数据库就值得好好研究一下了。我认为我们现在尚处在Newsql革命的黎明阶段,但显然,对于有的场景来说,Nosql存储提供了比关系型代数更好的抽象能力;而对另一些场景来说,拥有开发者所熟知的编程模型的可伸缩数据库则是更好的解决方案。
InfoQ:图型数据库(如Neo4j)是基于图论来对节点间的关系进行建模的。这看起来很复杂,不过能否谈谈它提供了哪些好处么?你觉得这类Nosql数据库有机会成为主流么?
这个世界就是个图。无论是要管理用户(他隶属于多个组,而每个组拥有不同的规则)的文件权限,还是想知道哪个朋友能够向我推荐德里的饭店,抑或是要计算出从上海浦东国际机场到伦敦希思罗机场的最佳包裹托运路径,图都是对领域进行建模的非常自然的方式。从电子商务到内容管理,从生物信息学到推荐,我们都可以通过图从已有的数据中获取更多的价值。想象一下对于任意一位演员使用SQL查询来计算“六度理论(six degrees of Kevin Bacon)”该有多么复杂。在Cypher(由Neo4j提供的一种声明式、类似于sql的图查询语言)中,这却是小菜一碟。
Facebook发布了其图搜索。Google使用知识图谱改进搜索结果。我认为图型数据库将会成为未来几年中最有趣的创新源泉之一,无论是对于初创公司还是对于大公司来说都是如此。在刚开始使用图型数据库时,我觉得他们只会在社交应用(Glassdoor使用了Neo4j)和为人们以及包裹寻找最便宜或是最快的路径等生态圈中会发挥作用。随着越来越熟悉Neo4j,我认识到有很多很多领域都会从基于图的模型中获益。当然了,我觉得图不会成为存储解决方案的主要建模范式,不过他们肯定会在很广泛的领域中发挥作用的。
InfoQ:Redis称自己是个“高级的键——值”存储,不过我听到你说它不仅仅是个键——值存储,能否说说你的想法么?
虽然Redis是个键值存储(与文档、图型或是列式数据存储不同),但它不仅仅只是键与值。Redis提供了列表、集合、有序集合与pub:sub功能,你可以通过他们非常高效地解决很多问题。它还是个内存解决方案(高性能),可以实现快照或是记录到磁盘。Redis并不是个通用的“一般意义上的”数据存储,不过如果你在进行持久化解决方案的决策,那么Redis值得你好好学学,因为它的处理能力非常棒。
InfoQ:还有哪些你认为值得谈谈的趋势?
Nosql及Newsql之后的大趋势是不变的数据存储。在过去几年中,围绕着使用函数式编程跨多台服务器进行高效的可伸缩性处理,人们讨论了很多。通过最小化共享的可变状态,函数式编程模型避免了OO编程在大量计算机之间进行可伸缩性处理时所带来的死锁问题。
不过如果我们认为共享的可变状态是进行可伸缩性处理时的问题,那么我们为何不将数据库设计为可变的呢?如果考虑到了这一点,那么你会发现数据库只不过是个大型的共享的可变存储(有点像所有服务器共享的一个全局变量集合)。很多公司(包括Twitter)现在都在探寻不变数据存储的属性——数据库可以接收新的数据,不过现有数据通常不会被修改或删除。了解这个趋势的一个很好的起始点是Datomic——这是由Clojure作者Rich Hickey所构建的一个数据存储。