微信号:infoqchina

介绍:有内容的技术社区媒体

Peter Bell谈NoSQL的发展趋势

2013-11-08 18:08 InfoQ

近日,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所构建的一个数据存储。


***********************************

本文来自InfoQ微信公众账号:infoqchina

1、回复“今日新闻”,查看今天更新的新闻;

2、回复“今日英文”,查看今天英文站的更新;

3、回复“文章 +关键词”,搜索关键词相关内容;

4、回复“QCon”,了解QCon大会相关信息;

5、回复“活动”,了解最近InfoQ组织的线下沙龙;

6、回复“架构师”,获取《架构师》下载地址;

7、回复“投稿”,了解投稿和加入编辑团队的流程。

***********************************

 
InfoQ 更多文章 Facebook如何实现PB级别数据库自动化备份 学术派Google软件工程师Matt Welsh谈移动开发趋势 Spotify为什么要使用一些“无聊”的技术? 妹纸们放假了,汉纸们做啥? 大多数重构可以避免
猜您喜欢 换个地方过夜就睡不好?因为半边大脑在守夜 |科学人 程序运行时保存到什么地方(JAVA) 能和缺爱的人在一起的,最终都是什么人? 星聚tech talk:如何在百播大战中技压群雄 逻辑回归、决策树和支持向量机(I)