基本信息
- 原书名:MongoDB:the definitive guide, second edition
- 原出版社: O'Reilly Media
编辑推荐
上一版广受好评,新版本在此基础上大幅扩充,内容更加全面、深入
MongoDB项目组成员倾力打造
MongoDB基础知识、进阶内容、高级管理任务一应俱全
内容简介
计算机书籍
与传统的关系型数据库不同,MongoDB 是一种面向文档的数据库。《MongoDB权威指南(第2版)》这一版共分为六部分,涵盖开发、管理以及部署的各个方面。第一部分展示MongoDB 基础知识、核心概念。第二部分介绍使用MongoDB 进行开发,包括索引的概念以及各种特殊索引和集合的用法等。第三部分讲述复制,包括副本集的相关概念、创建方法,与应用程序的交互等。第四部讨论分片,包括分片的配置,片键的选择,集群的管理。第五部分阐述创建索引、移动和压缩数据等管理任务,以及MongoDB 的持久数据存储。最后一部分集中说明服务器管理。
《MongoDB权威指南(第2版)》适合数据库开发和管理人员阅读。
作译者
邓强,软件工程师,常年关注互联网行业,对互联网产品和技术兴趣浓厚,Apple粉、Google粉、Amazon粉。职业生涯的前几年一直从事金融行业软件系统开发,后来不顾一切投身互联网。目前在一个新成立的互联网创业小团队任职。Email:dengqiang@outlook.com。
王明辉,同济大学计算机系学生,经常使用MongoDB。知乎网常用id为纳米黑客。
目录
序 XV
前言 XVII
第一部分 MongoDB 介绍
第1章 MongoDB 简介 3
1.1 易于使用 3
1.2 易于扩展 4
1.3 丰富的功能 4
1.4 卓越的性能 5
1.5 小结 5
第2章 MongoDB 基础知识 7
2.1 文档 7
2.2 集合 8
2.2.1 动态模式 8
2.2.2 命名 9
2.3 数据库 10
2.4 启动MongoDB 11
2.5 MongoDB shell 简介 12
2.5.1 运行shell 12
2.5.2 MongoDB 客户端 13
前言
本书分为六个部分,涵盖了开发、管理以及部署的方方面面。
熟悉MongoDB
第1 章将简要讲述MongoDB 的背景:项目创立原因,希望达到的目标,选用它的理由。第2 章接着介绍一些MongoDB 的核心概念和术语,还有如何上手操作数据库和shell 的相关内容。接下来两章介绍MongoDB 开发者需要掌握的基础知识。第3 章展示如何执行基本的写入操作,包括在不同安全和速度等级下的实现细节。第4 章主要介绍如何查找文档和创建复杂的查询。这一章还包括如何迭代结果集和其他一些用于处理结果集的方法,比如限制结果集的数量,略过一些结果,以及对结果集排序。
使用MongoDB进行开发
第5 章将介绍什么是索引以及如何为MongoDB 的集合建立索引。第6 章说明如何使用各种特殊类型的索引和集合。第7 章展示一些利用MongoDB 聚集数据的方法,包括计数、查找唯一值、文档分组、聚合框架和MapReduce。这一部分的最后一章会介绍如何设计应用程序:第8 章讲述如何更好地在应用程序中使用MongoDB。
复制
第9 章开始介绍复制,着重讲述如何快速在本地建立一个副本集,还会介绍一些可用选项。第10 章涵盖了与副本集相关的一些概念。第11 章展示了副本集与应用程序的交互。第12 章从管理的角度介绍副本集的运行。
分片
第13 章开始介绍分片,并通过一个例子展示如何快速地在本地进行分片。第14 章介绍集群的组成以及设置。第15 章介绍如何为不同的应用程序选择合适的片键。最后,第16 章介绍分片集群的管理。
应用程序管理
接下来两章从应用程序的角度介绍MongoDB 管理的很多方面。第17 章讲述如何查看MongoDB 正在进行的操作。第18 章介绍一些管理任务,比如创建索引、移动和压缩数据。第19 章介绍MongoDB 的持久数据存储。
服务器管理
最后一部分集中介绍服务器管理。第20 章将给出启动和终止MongoDB 时的一些通用选项。第21 章讨论在监控数据库运行时如何查看监控信息。第22 章介绍在不同类型的部署中如何备份和恢复数据库。最后,第23 章将介绍部署MongoDB 时需要牢记于心的一些系统设置。
附录
附录A 介绍了MongoDB 的版本控制方案,以及在Windows、OS X 和Linux 上的安装细节。附录B 详细说明了MongoDB 的内部工作原理:存储引擎、数据格式和传输协议。
本书排版规范
本书使用的排版规范如下所示。
· 楷体
用于表示新的术语。
序言
10 年前,没人能预见互联网的发展会给关系型数据库带来如此多的挑战。在此期间,我亲身经历了在快速发展的大型互联网公司应用MySQL 的过程。开始时只有很少的数据,一台服务器就可以了。然后就得建立备份,以便应对大量的读取和不时的宕机。用不了多长时间,就得加一个缓存层,调整所有的查询,投入更多的硬件。
最后,你会发现自己需要将数据切分到多个集群上,并重新构建大量的应用逻辑以适应这种切分。之后不久,你又会发现被自己数月前设计的数据库结构限制住了。
怎么会呢?这是因为现在集群中的数据太多,需要更改模式,会花费很长时间,也需要DBA 投入相当多的宝贵时间。在代码中处理要简单一些,但也需要小型开发团队数月的努力。最后,你会不断地拷问自己有没有更好的方法,或者为什么没有在核心数据库服务器中内置更多此类功能。
为了应对现在Web 应用的数据膨胀,开源社区像以往一样提供了太多的“好方法”。从内存中的键值型存储到可以使用SQL 的MySQL/InnoDB 变种等复杂方法,无所不有。但选择多了,做出正确的选择反而更难了。我自己就研究过其中很多种。
MongoDB 的实用性着实令人着迷。MongoDB 并不去迎合所有人的全部需求。它在功能和复杂性之间取得了很好的平衡,并且大大简化了原先十分复杂的任务。也就是说,它具备支撑今天主流Web 应用的关键功能:索引、复制、分片、丰富的查询语法,特别灵活的数据模型。与此同时还不牺牲速度。
秉持MongoDB 自身的风格,本书简洁明快、通俗易懂。MongoDB 新用户通过阅读第1 章,马上就能入门,而有经验的用户则可以体验到本书的广度和权威性。对于流行的客户端API 和高级的管理主题,如复制、备份和分片,本书都是权威参考。
根据我最近每天使用MongoDB 的经验,我相信本书会始终不离我左右,从最初安装到进行分片或备份式集群的产品化部署,它都是我最好的助手。任何想仔细研究使用MongoDB 的人都需要这本重要的参考书。
——Craigslist 软件工程师,Jeremy Zawodny
2010 年8 月
媒体评论
——亚马逊读者评论
“如同MongoDB本身一样,本书简明扼要、通俗易懂。所有想一探MongoDB究竟的人都需要这本不可或缺的参考手册。”
——《高性能MySQL》作者Jeremy Zawodny
书摘
MongoDB简介
MongoDB 是一款强大、灵活,且易于扩展的通用型数据库。它能扩展出非常多的功能, 如二级索引(secondary index)、范围查询(range query)、排序、聚合(aggregation),以及地理空间索引(geospatial index)。本章涵盖了MongoDB 的主要设计特点。
1.1 易于使用
MongoDB 是一个面向文档(document-oriented)的数据库,而不是关系型数据库。不采用关系模型主要是为了获得更好的扩展性。当然, 还有其他一些好处。
与关系型数据库相比,面向文档的数据库不再有“行”(row)的概念,取而代之的是更为灵活的“文档”(document)模型。通过在文档中嵌入文档和数组,面向文档的方法能够仅使用一条记录来表现复杂的层次关系,这与使用现代面向对象语言的开发者对数据的看法一致。
另外,不再有预定义模式(predefined schema):文档的键(key)和值(value)不再是固定的类型和大小。由于没有固定的模式,根据需要添加或删除字段变得更容易了。通常,由于开发者能够进行快速迭代,所以开发进程得以加快。而且,实验更容易进行。开发者能尝试大量的数据模型,从中选择一个最好的。
1.2 易于扩展
应用程序数据集的大小正在以不可思议的速度增长。随着可用带宽的增长和存储器价格的下降,即使是一个小规模的应用程序,需要存储的数据量也可能大得惊人,甚至超出了很多数据库的处理能力。过去非常罕见的T 级别数据,现在已是司空见惯了。
由于需要存储的数据量不断增长,开发者面临一个困难:应该如何扩展数据库?实质上,这是纵向扩展(scale up)和横向扩展(scale out)之间的选择。纵向扩展就是使用计算能力更强的机器,而横向扩展就是通过分区将数据分散到更多机器上。通常,纵向扩展是最省力的做法,其缺点是大型机一般都非常昂贵。而且,当数据量达到机器的物理极限时,无论花多少钱也买不到更强的机器了。另一个选择是横向扩展:要增加存储空间或提高性能,只需购买一台普通的服务器并把它添加到集群中就可以了。横向扩展既便宜又易于扩展;不过,管理1000 台机器比管理一台机器显然要困难得多。
MongoDB 的设计采用横向扩展。面向文档的数据模型使它能很容易地在多台服务器之间进行数据分割。MongoDB 能自动处理跨集群的数据和负载,自动重新分配文档,以及将用户请求路由到正确的机器上。这样,开发者能够集中精力编写应用程序,而不需要考虑如何扩展的问题。如果一个集群需要更大的容量,只需要向集群添加新服务器,MongoDB 就会自动将现有数据向新服务器传送。
1.3 丰富的功能
MongoDB 作为一款通用型数据库,除了能够创建、读取、更新和删除数据之外, 还提供一系列不断扩展的独特功能。
索引(indexing)
MongoDB 支持通用二级索引,允许多种快速查询,且提供唯一索引、复合索引、地理空间索引,以及全文索引。
聚合(aggregation)
MongoDB 支持“聚合管道”(aggregation pipeline)。用户能通过简单的片段创建复杂的聚合并通过数据库自动优化。
特殊的集合类型
MongoDB 支持存在时间有限的集合,适用于那些将在某个时刻过期的数据,如会话(session)。类似地,MongoDB 也支持固定大小的集合,用于保存近期数据,如日志。
文件存储(file storage)