七周七数据库
如今,我们要面对和使用的数据正在变得越来越庞大和复杂。如果说数据是新的石油。那么数据库就是油田、炼油厂、钻井和油泵。作为一名现代的软件开发者,我们需要了解数据管理的新领域,既包括RDBMS,也包括NoSQL。
本书遵循《七周七语言》的写作风格和体例,带领你学习和了解当令最热门的开源数据库。在简单的介绍之后,本书分章介绍了7种数据库。这些数据库分别属于5种不同的数据库风格,但每种数据库都有自己保存数据和看待世界的方式。它们依次是PostgreSQL、Riak、Apache HBase、MongoDB、Apache CouchDB、Neo4J和Redis。本书将深入每一种数据库,介绍它们的优势和不足,以及如何选取一种最符合你的应用需求的数据库。
本书适合数据库架构师、数据库管理员,以及想要了解和学习各种 NoSQL 数据库技术的程序员阅读。本书将帮助读者了解、选择和应用这些数据库,从而更好地发挥日益增长的大数据的能力。
如果说数据是新的石油,那么数据库就是油田、炼油厂、钻井和油泵。数据存放在数据库中,如果你有兴趣利用它,那么掌握相应的现代化的工具就是好的开始。
数据库是工具,它们是到达终点的手段。每种数据库都有自己保存数据和看待世界的方式。你对它们的理解越多,就越能随心所欲,在日益增长的大数据上,就能更好地利用它们潜在的能力。
为什么是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虚拟机。
注释1 http://www.cygwin.com/
代码示例和惯例
本书包含各种语言的代码。部分原因是因为我们介绍的这些数据库本身使用语言不同。我们曾试着将语言局限在Ruby/JRuby和JavaScript。我们更喜欢命令行工具,而不是脚本语言,但我们会引入其他一些语言来完成工作,如PL/pgSQL(Postgres)和Gremlin/Groovy (Neo4j)。我们也会尝试使用Node.js,编写一些服务器端的JavaScript应用。
除非特别注明,代码清单都是完整的,通常可以直接执行。根据所涉及的语言规则,突出了示例和代码片段中的语法。shell命令以$开始。