经过了至少 4 年的激烈争论,现在是对 NoSQL 的现状做一个阶段性结论的时候了。围绕着 NoSQL 发生了如此之多的事情,以至于很难对其作出一个简单概括,也很难判断它达到了什么目标以及在什么方面没有达到预期。
在很多领域,NoSQL 不仅在行业内也在学术领域中取得了成功。大学开始认识到 NoSQL 必须要加入到课程中。只是反复讲解标准数据库已经不够了。当然,这不意味着深入学习关系型数据库是错误的。相反,NoSQL 是很好的很重要的补充。
发生了什么?
NoSQL 领域在短短的 4 到 5 年的时间里,爆炸性地产生了 50 到 150 个新的数据库。 nosql-database.org 列出了 150 个这样的数据库,包括一些像对象数据库这样很古老但很强大的。当然,一些有意思的合并正在发生,如 CouchDB 和 Membase 交易产生的 CouchBase。但是我们稍后会在本文中讨论每一个主要的系统。
很多人都曾经假设在 NoSQL 领域会有一个巨大地整合。但是这并没有发生。NoSQL 过去是爆炸性地增长,现在依旧如此。就像计算机科学中的所有领域一样——如编程语言——现在有越来越多的空白领域需要大量的数据库。这是与互联网、大数据、传感器以及将来很多技术的爆炸性增长同步的,这导致了更多的数据以及对它们进行处理的不同需求。在过去的四年中,我们只看到了一个重要的系统离开了舞台:德国的 Graph 数据库 Sones。为数众多的 NoSQL 依然快乐地生存着,要么在开源社区,不用考虑任何的金钱回报,要么在商业领域。
可见性与金钱?
另外一个重要的方面就是可见性与行业采用的情况。在这个方面,我们可以看到在传统的行业中——要保护投资——与新兴的行业(主要是初创公司)之间有很大的差别。几乎所有热门的基于 Web 的创业公司如 Pinterest 和 Instagram 都在使用混合式(SQL + NoSQL)的架构,而传统的行业依然纠结于是否采用 NoSQL。但是观察显示,越来越多这样的公司正在试图将它们的一部分数据流用 NoSQL 方案进行处理并在以后进行分析,这样的方案包括 Hadoop、MongoDB 以及 Cassandra 等。
这同时导致了对具备 NoSQL 知识的架构师和开发人员的需求持续增长。最近的调查显示行业中最需要的开发人员技能如下:
- HTML5
- MongoDB
- iOS
- Android
- Mobile Apps
- Puppet
- Hadoop
- jQuery
- PaaS
- Social Media
在前十名的技术需求中,有两个 NoSQL 数据库。有一个甚至排在了 iOS 前面。如果这不是对它的赞扬,那是什么呢?!
但是,跟最初预计相比,对 NoSQL 的采用变得越来越快,越来越深入。在 2011 年夏天,Oracle 曾经发布过一个著名白皮书,它提到 NoSQL 数据库感觉就像是冰淇淋的风味,但是你不应该过于依附它,因为它不会持续太长时间。但是仅仅在几个月之后,Oracle 就展现了它们将 Hadoop 集成到大数据设备的方案。甚至,他们建立了自己的 NoSQL 数据库,那是对 BerkeleyDB 的修改。从此之后,所有的厂商在集成 Hadoop 方面展开了竞赛。Microsoft、Sybase、IBM、Greenplum、Pervasive 以及很多的公司都已经对它有了紧密的集成。有一个模式随处可见:不能击败它,就拥抱它。
但是,关于 NoSQL 被广泛采用的另一个很重要但不被大家关注的重要信号就是 NoSQL 成为了一个 PaaS 标准。借助于众多 NoSQL 数据库的易安装和管理,像 Redis 和 MongoDB 这样的数据库可以在很多的 PaaS 服务中看到,如 Cloud Foundry、OPENSHIFT、dotCloud、Jelastic 等。随着所有的事情都在往云上迁移,NoSQL 会对传统的关系型数据库产生很大的压力。例如当面临选择 MySQL/PostGres 或 MongoDB/Redis 时,将会强制人们再三考虑他们的模型、需求以及随之而来的其他重要问题。
另外一个很有意思的技术指示器就是 ThoughtWorks 的技术雷达,即便你可能不完全同意它所包含的所有事情,但它总会包含一些有意思的事情。让我们看一下他们 2012 年 10 月份的技术雷达,如图 1:
图 1:ThoughtWorks 技术雷达,2012 年 10 月——平台
在他们的平台象限中,列出了 5 个数据库:
- Neo4j (采用)
- MongoDB(试用阶段但是采用)
- Riak(试用)
- CouchBase(试用)
- Datomic(评估)
你会发现它们中至少有四个获得了很多的风险投资。如果你将 NoSQL 领域的所有风险投资加起来,结果肯定是在一亿和十亿美元之间!Neo4j 就是一个例子,它在一系列的 B 类资助中得到了一千一百万美元。其他得到一千万到三千万之间资助的公司是 Aerospike、Cloudera、DataStax、MongoDB 以及 CouchBase 等。但是,让我们再看一下这个列表:Neo4j、MongoDB、Riak 以及 CouchBase 已经在这个领域超过四年了并且在不断地证明它们是特定需求的市场领导者。第五名的数据库——Datomic——是一个令人惊讶的全新数据库,它是由一个小团队按照全新的范式编写的。这一定是很热门的东西,在后面简要讨论所有数据库的时候,我们更更深入地了解它们。
标准
已经有很多人要求 NoSQL 标准了,但他们没有看到 NoSQL 涵盖了一个范围如此之大的模型和需求。所以,适用于所有主要领域的统一语言如 Wide Column、Key/Value、Document 和 Graph 数据库肯定不会持续很长时间,因为它不可能涵盖所有的领域。有一些方式,如 Spring Data,试图建立一个统一层,但这取决于读者来测试这一层在构建多持久化环境时是不是一个飞跃。
大多数的 Graph 和 Document 数据库在它们的领域中已经提出了标准。在 Graph 数据库世界,因为它的 tinkerpop blueprints、Gremlin、Sparql 以及 Cypher 使得它更为成功一些。在 Document 数据库领域,UnQL 和 jaql 填补了一些位置,尽管前者缺少现实世界 NoSQL 数据库的支持。但是借助 Hadoop 的力量,很多项目正在将著名的 ETL 语言如 Pig 和 Hive 使用到其他 NoSQL 数据库中。所以标准世界是高度分裂的,但这只是因为 NoSQL 是一个范围很广的领域。
格局
作为最好的数据库格局图之一,是由 451 Group 的 Matt Aslett 在一个报告中给出的。最近,他更新了该图片从而能够让我们可以更好得深入理解他所提到的分类。你可以在下面的图片中看到,这个格局是高度碎片化和重叠的:
(点击图片放大)
图 2:Matt Aslett(451 Group)给出的数据库格局
你可以看到在这个图片中有多个维度。关系型的以及非关系型的、分析型的以及操作型的、NoSQL 类型的以及 NewSQL 类型的。最后的两个分类中,对于 NoSQL 有著名的子分类 Key-Value、Document、Graph 以及 Big Tables,而对于 NewSQL 有子分类 Storage-Engine、Clustering-Sharding、New Database、Cloud Service Solution。这个图有趣的地方在于,将一个数据放在一个精确的位置变得越来越难。每一个都在拼命地集成其他范围数据库中的特性。NewSQL 系统实现 NoSQL 的核心特性,而 NoSQL 越来越多地试图实现“传统”数据库的特性如支持 SQL 或 ACID,至少是可配置的持久化机制。
这一切都始于众多的数据库都提供与 Hadoop 进行集成。但是,也有很多其他的例子,如 MarkLogic 开始参与 JSON 浪潮,所以也很难对其进行定位。另外,更多的多模型数据库开始出现,如 ArangoDB、OrientDB 和 AlechemyDB(现在它是很有前途的 Aerospike DB 的一部分)。它们允许在起始的时候只有一个数据库模型(如 document/JSON 模型)并在新需求出现的时候添加新的模型(Graph 或 key-value)。
图书
另外一个证明它开始变得成熟的标志就是图书市场。在 2010 年和 2011 年两本德语书出版之后,我们看到 Wiley 出版了 Shashank Tiwari 的书。它的结构很棒并且饱含了深刻伟大的见解。在 2012 年,这个竞赛围绕着两本书展开。“七周七数据库”(Seven Databases in Seven Weeks)当然是一本杰作。它的特点在于新颖的编写以及实用的基于亲身体验的见解:它选取了 6 种著名的 NoSQL 数据库以及 PostGreSQL。这些都使得它成为一本高度推荐的图书。另一方面,P.J. Sandalage 以及 Martin Fowler 采取了一种更为全面的方法,涵盖了所有的特征并帮助你评估采用 NoSQL 的路径和决策。
但是,会有更多的书出现。Manning 的书出现在市场上只是个时间问题:Dan McCreary 和 Ann Kelly 正在编写一本名为“ Making Sense of NoSQL ”的书,首期的 MEAP(指的是 Manning Early Access Program——译者注)章节已经可以看到了。
在介绍完理念和模式后,他们的第三章看起来保证很有吸引力:
- 构建 NoSQL 大数据解决方案
- 构建 NoSQL 搜索解决方案
- 构建 NoSQL 高可用性解决方案
- 使用 NoSQL 来提高敏捷性
只是一个全新的方式,绝对值得一读。
领导者的现状
让我们快速了解一下各个 NoSQL 的领导者。作为市场上很明显的领导者之一,Hadoop 是一个很奇怪的动物(作者使用这个词,可能是因为 Hadoop 的标识是一只大象——译者注)。一方面,它拥有巨大的发展势头。正如前面所说,每个传统的数据库提供商都急切地声明支持 Hadoop。像 Cloudera 和 MapR 这样的公司会持续增长并且新的 Hadoop 扩展和继承者每周都在出现。
即便是 Hive 和 Pig 也在更好地得到接受。不过,有一个美中不足之处:公司们依然在抱怨非结构化的混乱(读取和解析文件本应该更快一些),MapReduce 在批处理上做的还不够(甚至 Google 已经舍弃了它),管理依旧很困难,稳定性问题以及在本地很难找到培训 / 咨询。即便你可以解决一些上面的问题,如果 Hadoop 继续像现在这样发展或发生重大变化的话,它依然会是热点问题。
第二位领导者,MongoDB,同样面临激烈的争论。处于领导地位的数据库会获得更多的批评,这可能是很自然的事情。不过,MongoDB 经历了快速的增长,它受到的批评主要如下:
a) 就老版本而言或者
b) 缺少怎样正确使用它的知识。尽管 MongoDB 在下载区域清楚地表明 32 位版本不能处理 2GB 的数据并建议使用 64 位版本,但这依然受到了很多近乎荒谬的抱怨。
不管怎样,MongoDB 合作者和资助者推动了雄心勃勃的发展路线,包含了很多热门的东西:
- 行业需要的一些安全性 /LDAP 特性,目前正在开发
- 全文本搜索很快会推出
- 针对 MapReduce 的 V8 将会推出
- 将会出现比集合级别更好的锁级别
- Hash 分片键正在开发中
尤其是最后一点吸引了很多架构师的兴趣。MongoDB 经常被抱怨(同时也被竞争对手)没有实现简洁一致的哈希,因为 key 很容易定义所以不能保证完全正确。但在将来,将会有一个对 hash 分片键的配置。这意味着用户可以决定使用 hash key 来分片,还是需要使用自己选择分片 key 所带来的优势(可能很少)。
Cassandra 是这个领域中的另一个产品,它做的很好并且添加了更多更好的特性,如更好的查询。但是不断有传言说运行 Cassandra 集群并不容易,需要一些很艰难的工作。但这里最吸引人的肯定是 DataStax。Cassandra 的新公司——获得了两千五百万美元的 C 类资助——很可能要处理分析和一些操作方面的问题。尤其是分析能力使得很多人感到惊讶,因为早期的 Cassandra 并没有被视为强大的查询机器。但是这种现状在最近的几个版本中发生了变化,查询功能对一些现代分析来讲已经足够了。
Redis 的开发进度也值得关注。尽管 Salvatore 声明如果没有社区和 Pieter Noordhuis 的帮助,他做不成任何的事情,但是它依旧是相当棒的一个产品。对故障恢复的良好支持以及使用 Lua 的服务器端脚本语言是其最近的成就。使用 Lua 的决策对社区带来了一些震动,因为每个人都在集成 JavaScript 作为服务器端的语言。但是,Lua 是一个整洁的语言并为 Redis 开启新的潘多拉盒子带来了可能性。
CouchBase 在可扩展性和其他潜在因素方面看起来也是一个很好的选择,尽管 Facebook 以及 Zynga 面临着巨大的风波。它确实不是很热门的查询机器,但如果他们能够在将来提高查询能力,那它的功能就会相当完整了。与 CouchDB 创立者的合并毫无疑问是很重要的一个步骤,CouchDB 在 CouchBase 里面的影响值得关注。在每个关于数据库的会议上,听到这样的讨论也是很有意思的,那就是在 Damien、Chris 和 Jan 离开后,CouchDB 会变得更好呢还是更坏呢?大家在这里只能听到极端的观点。但是,只要数据库做得好谁关心这个呢。现在看起来,它确实做的很好。
最后一个需要提及的 NoSQL 数据库当然是 Riak,在功能性和监控方面它也有了巨大的提升。在稳定性方面,它继续得到巨大的声誉:“像巨石一般稳定可靠且不显眼,并对你的睡眠有好处”。Riak CS fork 在这种技术的模块化方面看起来也很有趣。
有意思的新加入者
除了市场领导者,评估新的加入者通常是很有意思的。让我们深入了解它们中的一部分。
毫无疑问,Elastic Search 是最热门的新 NoSQL 产品,在一系列的 A 轮资助中它刚刚获得了一千万美元,这是它热门的一个明证。作为构建在 Lucene 之上的高扩展性搜索引擎,它有很多的优势:a)它有一个公司提供服务并且 b)利用了 Lucene 在过去的多年中已被充分证明的成就。它肯定会比以往更加深入得渗透到整个行业中,并在半结构化信息领域给重要的参与者带来冲击。
Google 在这个领域也推出了小巧但是迅速的 LevelDB。在很多特殊的需求下,如压缩集成方面,它作为基础得到了很多的应用。即使是 Riak 都集成了 LevelDB。考虑到 Google 的新数据库如 Dremel 和 Spanner 都有了对应的开源项目(如 Apache Drill 或 Cloudera Impala),它依然被视为会继续存在的。
另外一个技术变化当然就是在 2012 年初的 DynamoDB。自从部署在 Amazon 中,他们将其视为增长最快的服务。它的可扩展性很强。新特性开发地比较慢但它关注于 SSD,其潜力是很令人振奋的。
多模块数据库也是值得关注的一个领域。最著名的代表者是 OrientDB,它现在并不是新的加入者但它在很迅速地提高功能。可能它变化得太快了,很多使用者也许会很开心地看到 OrientDB 已经到达了 1.0 版本,希望它能更稳定一些。对 Graph、Document、Key-Value 的支持以及对事务和 SQL 的支持,使得我们有理由给它第二次表现的机会。尤其是对 SQL 的良好支持使得它对诸如 Penthao 这样的分析解决方案方面很有吸引力。这个领域另一个新的加入者是 ArangoDB,它的进展很快,并不畏惧将自己与已确定地位的参与者进行比较。
但是,如果有新的需求必须要实现并且具有不同类型的新数据模型要进行持久化的话,对原生 JSON 和 Graph 的支持会省去很多的努力。
到目前位置,2012 年的最大惊喜来自于 Datomic。它由一些摇滚明星采用 Clojure 语言以难以令人置信的速度开发的,它发布了一些新的范式。另外,它还进入了 ThoughtWorks 的技术雷达,占据了推荐关注的位置。尽管它“只是”已有数据库中一个参与者,但是它有很多的优势,如:
- 事务
- 时间机器
- 新颖且强大的查询方式
- 新的模式方式
- 缓存以及可扩展性的特性
目前,支持将 DynamoDB、Riak、CouchBase、Infinispan 以及 SQL 作为底层的存储引擎。它甚至允许你同时混合和查询不同的数据库。很多有经验的人都很惊讶于这种颠覆性的范式转变是如何可能实现的。但幸运的是它就是这样。
总结
作为总结,我们做出三点结论:
-
关于 CAP 理论,Eric Brewer 的一些新文章应该几年前就发表。在这篇文章中(这篇佳文的中文版地址——译者注),他指出“三选二”具有误导性,并指出了它的原因,世界为何远比简单的CP/AP 更为复杂,如在ACID/BASE 之间做出选择。虽然如此,近些年来有成千上万的对话和文章继续赞扬CAP 理论而没有任何批评性的反思。Michael Stonebraker 是NoSQL 最强有力的审查者之一(NoSQL 领域也对他颇多感激),他在多年前就指出了这些问题!遗憾的是,没有多少人在听。但是,既然Eric Brewer 更新了他的理论,简单的CAP 叙述时代肯定要结束了。在指出CAP 理论的真实和多样性的观点上,请站在时代的前列。
-
正如我们所了解的那样,传统关系型数据库的不足导致了 NoSQL 领域的产生。但这也是传统帝国发起回击的时刻。在“NewSQL”这个术语之下,我们可以看到许多新的引擎(如 database.com、VoltDB、GenieDB 等,见图 2),它们提高了传统的解决方案、分片以及云计算方案的能力。这要感谢 NoSQL 运动。
但是随着众多的数据库尝试实现所有的特性,明确的边界消失了
确定使用哪种数据库比以前更为复杂了。
你必须要知道 50 个用例、50 个数据库并要回答至少 50 个问题。关于后者,笔者在过去两年多的 NoSQL 咨询中进行了收集,可以在以下地址找到:选择正确的数据库,在NoSQL 和NewSQL 间进行选择。 - 一个通用的真理就是,每一项技术的变化——从客户端 - 服务端技术开始甚至更早——需要十倍的成本才能进行转移。例如,从大型机到客户端 - 服务端、客户端 - 服务端到 SOA、SOA 到 WEB、RDBMS 到混合型持久化之间的转换都是如此。所以可以推断出,在将 NoSQL 加入到他们的产品决策上,很多的公司在迟疑和纠结。但是,大家也都知道,最先采用的公司会从这个两个领域获益并且能够快速集成 NoSQL,所以在将来会占据更有利的位置。就这一点而言,NoSQL 解决方案会一直存在并且评估起来会是有利可图的领域。
关于作者
Prof. Dr. Stefan Edlich是德国柏林 Beuth HS 技术(University of App. Sc.)的高级讲师。他为诸多出版社如 Apress、OReilly、Spektrum/Elsevier 等编写了超过 10 本 IT 图书。他维护着 NoSQL Archive 网站, 从事 NoSQL 咨询并组织 NoSQL 技术会议,编写了世界上最早的两本 NoSQL 图书,现在他热衷于 Clojure 编程语言。
查看英文原文: The State of NoSQL
评论