前言
如果说数据是新的石油,那么数据库就是油田、炼油厂、钻井和油泵。数据存放在数据库中,如果你有兴趣利用它,那么掌握相应的现代化的工具就是好的开始。
数据库是工具,它们是到达终点的手段。每种数据库都有自己保存数据和看待世界的方式。你对它们的理解越多,就越能随心所欲,在日益增长的大数据上,就能更好地利用它们潜在的能力。
为什么是7种数据库
早在2010年3月,我们就想写本关于NoSQL的书。NoSQL这个术语已经聚集了人气,虽然许多人都在谈论,但关于它似乎也存在相当多的困惑。NoSQL到底意味着什么?包含哪些类型的系统?对于开发优秀的软件,它将产生怎样的影响?这些就是我们想要回答的问题,既是为我们自己,也是为别人。
在读了Bruce Tate的典范性的著作《七周七语言》后,我们知道他做得很对。他循序渐进地介绍语言的方式引起了我们的共鸣。我们觉得用同样的方式讲授数据库,将会提供一个很好的环境,回答这些棘手的NoSQL问题。
本书内容
本书针对的是有经验的开发者,他们希望全面地理解现代数据库的整体情况。本书不要求读者以前在数据库方面有经验,但有数据库经验会有助于学习本书。
在简单的介绍之后,本书分章介绍了7个数据库。这些数据库分属5种不同的数据库类型或风格,这在第1章中有介绍。它们依次是PostgreSQL、Riak、Apache HBase、MongoDB、Apache CouchDB、Neo4j和Redis。
每章都设计成一个长周末的学习量,分为三天。每天结束时都有一些练习,扩展刚刚介绍的主题和概念。每章最后都有一段总结性的讨论,总结了这种数据库的优点和缺点。你既可以学得快一点,也可以学得慢一点,但重要的是先掌握每天的概念,再继续后面的学习。我们试着设计了一些例子来探索每种数据库的独特之处。要真正理解这些数据库提供的能力,必须花些时间来使用它们,这意味着要动手实践。
虽然你可能想跳过某些章,但我们设想你是按章节顺序阅读这本书的。某些概念,如映射-归约(mapreduce),在前面的章节中深入地进行了介绍,所以在后面的章节中就略过了。本书旨在实现对现代数据库的一致理解,所以建议你完整地阅读本书。
不包含的内容
在阅读本书之前,你应该知道它不包含哪些内容。
本书不是安装指南
安装本书中提到的数据库有时候容易,有时候有些挑战,有时候非常棘手。对于某些数据库,可以使用提供的安装包;而对于另一些数据库,需要编译源代码。我们会不时提供一些有用的提示,但主要还是靠你自己。省略安装步骤让我们能安排更多有用的例子和概念讨论,这才是你真正想要的,对吗?
本书也不是管理手册
出于对安装同样的考虑,本书也不会介绍管理手册里的所有内容。每种数据库都有大量的选项、设置、开关和配置细节,绝大部分都能在 Web 上找到详尽的文档。我们更关心介绍有用的概念,完全深入进去,而不是仅关注日常操作。虽然数据库的一些特点会根据操作设置而改变(我们可能会讨论这些特点),但由于篇幅有限,我们不可能介绍所有可能配置的全部具体细节。
对Windows用户的说明
本书本身就讨论选择,主要是针对nix平台上的开源软件。微软的环境作为集成环境有点困难,它限制了许多选择,只留下一个较小的、预定义的子集。因此,我们介绍的数据库是开源的,由nix系统的用户开发(也主要为他们服务)。这不是我们的偏见,只是当前真实情况的反映。所以,我们假定教程式的例子运行在*nix的shell下。如果你运行Windows并希望给它一个尝试的机会,我们推荐安装Cygwin1,这样更容易成功。你也可以考虑运行一个Linux虚拟机。
代码示例和惯例
本书包含各种语言的代码。部分原因是因为我们介绍的这些数据库本身使用语言不同。我们曾试着将语言局限在Ruby/JRuby和JavaScript。我们更喜欢命令行工具,而不是脚本语言,但我们会引入其他一些语言来完成工作,如PL/pgSQL(Postgres)和Gremlin/Groovy (Neo4j)。我们也会尝试使用Node.js,编写一些服务器端的JavaScript应用。
除非特别注明,代码清单都是完整的,通常可以直接执行。根据所涉及的语言规则,突出了示例和代码片段中的语法。shell命令以$开始。
在线资源
本书的Pragmatic Bookshelf页面1是很好的资源。从上面可以下载本书中的所有源代码。你也会找到一些反馈工具,如社区论坛和勘误提交,你可以通过它们对本书未来的版本提出改进建议。
注释1 http://pragprog.com/book/rwdata/seven-databases-in-seven-weeks
感谢你陪伴我们完成现代数据库的观光之旅。
Eric Redmond和 Jim R. Wilson