近日,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 所构建的一个数据存储。
公众号推荐:
跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。
评论