作者访谈

Q:你们怎么选择这七种数据库的?

Eric:我们确实有一些选择标准,但没有明确列出来。这些数据库必须是开源的,因为我们不想介绍让读者绑定某公司的数据库。对于5种数据库类型(关系型、键-值对型、列型、文档型、图型),每种至少需要一个实现。然后我们选择一些数据库,它们能够用实例展示我们想介绍的一些一般概念,如CAP原理或MapReduce。最后,我们选择一些彼此是很好的竞争对手的数据库。所以我们选择了MongoDB和CouchDB(二者实现文档数据库的不同方式)。我们选择 Riak 是因为它是 Dynamo(亚马逊的数据库)的一种实现,可以与HBase进行比较,而后者是BigTable(谷歌的数据库)的一种实现。

Jim:我们这本书的主要目标是向读者介绍现有的选择。我们的选择基本上服务于这个目标。即便如此,这也是一个相当长的迭代过程。我们知道,不论我们选了哪些数据库,都会有人问,为什么我们选择或没选择他们喜欢的产品。这首先取决于我们想讨论的数据库类型,然后选择的数据库既要代表某个类型,又要相对比较受欢迎。

例如,我们选择了PostgreSQL,因为它几乎严格地遵守SQL标准,同时又不如MySQL这样的开源竞争产品那样知名。类似地,虽然HBase和Cassandra都是面向列的数据库,但我们选择了 HBase,因为 Cassandra 是混合类型,它同时包含了来自 BigTable 论文和Dynamo论文的思想。

Q:数据库正在快速变化。现在你们希望当初选了哪些?

Eric:有几百种数据库可以选择,但我们很高兴地看到,一年之后,我们的选择仍然在变得更强。但是,如果再来一次,我会加入 Triplestore(如 Mulgara),因为语义网正让这种数据存储方法逐渐变得热门。我也会在Neo4j的Cypher语言上花更多的时间,或更详细地介绍Hadoop,因为分析是数据存储的一大部分工作。

Jim:是的,数据库在快速地变化,这体现在两个方面。首先,可用数据存储技术的领域在近年来有了爆炸式增长。越来越多的不同数据库正在涌现,填补不同的小众需求。在另一方面,各种数据库本身也在快速发展。即使在小版本之间,现代的 NoSQL 数据库也在加入越来越多的特征,目的是占领更多的市场,保持竞争力。因此,也产生了一些趋同效应,这使得选择更为困难,因为更多的产品可以满足你的需求。

我还是认为,我们选择的5种类型和7种数据库满足了我们设定的条件。但我还想写其他的数据库。包括一些长期受欢迎的数据库,如SQLite,以及一些你可能想不到的数据库,如OpenLDAP或SOLR(一个倒排索引/查找引擎)。

Q:为什么你们决定要写这本书?

Eric:Jim和我很早就在讨论写这样一本书了。大约一年半以前,他发了一封只有标题的电子邮件:“七周七数据库?”这个标题打动了我。我们都喜欢Bruce的《七周七语言》,这似乎是探讨这个新兴领域的完美方式。

Jim:早在2010年3月,Eric和我就对写本NoSQL的书进行了探讨。那时候,关于这个术语有许多讨论,但也有许多迷惑。我们认为我们可以为讨论带来某种结构,并将所有最新进展告诉不那么了解最新情况的人。

在读了Bruce A. Tate的《七周七语言》之后,我想,“七种数据库怎么样?”Eric提交了一份建议,几周后我们就开始动手写了。

Q:你对目前和将来的数据库怎么看?

Eric:我是 Neo4j 的粉丝。我们在本书中介绍了它,但老实说,我们选它是因为想探讨一个开源的图数据库。但在过去的一年里,它确实非常成功。我相信,今年会有更多的人采用图数据库。

在我们没有介绍的数据库中,我认为ElasticSearch很清楚获得了支持。OrientDB也很有趣,因为它可以作为关系型、键值对型、文档型或图数据库。我认为将来你会看到更多这样的多类型表现。就像我们前面提到的,Triplestores也得到一些支持,虽然他们的问题集与一般的图型数据库有很大的交集。

Jim:当然,有很多数据库,但至少有两种是我个人希望仔细研究的:ElasticSearch和doozer。

ElasticSearch是分布式的、对等的、支持REST/JSON的文档搜索引擎。ElasticSearch采用分布式的Lucene索引作为核心,允许REST客户端根据模糊的条件查找文档。每个人都需要一个搜索引擎,ElasticSearch让这一点变得容易了。

Doozer是一个快速的、无头一致(headless consensus)的引擎。它是Heroku的一群聪明人用Go语言写的。Dozzer对于存放小块的重要信息是很好的,这些信息绝对需要一致(如集群的配置元数据),但没有单点失效。