欢迎光临
免费的PDF电子书下载网站

MongoDB 权威指南 PDF下载

编辑推荐

本书新版已上市:

MongoDB权威指南(第2版)【MongoDB项目核心团队成员倾力打造,权威著作,无可替代】

 ; ; ; ; ; ; ;在项目中灵活运用面向文档的存储方式。
  了解MongoDB的无模式数据模型如何处理文档、集合和多个数据库之间的关系。
  执行基本的写入操作,构建各种复杂的查询,任何条件下都能查出数据。
  使用索引、聚合工具,以及其他高级查询技巧。
  了解监控、安全和认证、备份和修复等内容。
  建立主从集群和自动故障恢复复制。
  利用分片水平扩展MongoDB,了解其对应用的影响。
 ; ; ; ; ; ;Java、PHP、Python和Ruby的应用实例应有尽有。

 ;

内容简介

  MongoDB如何帮你管理通过Web应用收集的海量数据呢?通过本书的权威解读,你会了解面向文档数据库的诸多优点,会发现MongoDB如此稳定、性能优越甚至能够无限水平扩展背后的原因。
  本书的两位作者均来自开发并支持开源数据库MongoDB的公司10gen。数据库开发人员可将此书作为参考指南,系统管理员可以从本书中找到高级配置技巧,其他用户可以了解一些基本概念和用例。你会发现,将数据组织成自包含的JSON风格的文档比组织成关系型数据库中的记录要容易得多。

作者简介

暂无

MongoDB 权威指南 PDF下载

目录

中文版序一 XI
中文版序二 XIII
序 XV
前言 XVII

第1章 简介 1
1.1 丰富的数据模型 1
1.2 容易扩展 1
1.3 丰富的功能 2
1.4 不牺牲速度 3
1.5 简便的管理 3
1.6 其他内容 3

第2章 入门 5
2.1 文档 5
2.2 集合 6
2.2.1 无模式 6
2.2.2 命名 7
2.3 数据库 8
2.4 启动MongoDB 9
2.5 MongoDB shell 10
2.5.1 运行shell 10
2.5.2 MongoDB客户端 11
2.5.3 shell中的基本操作 11
2.5.4 使用shell的窍门 13
2.6 数据类型 15
2.6.1 基本数据类型 15
2.6.2 数字 17
2.6.3 日期 18
2.6.4 数组 19
2.6.5 内嵌文档 19
2.6.6 _id和ObjectId 20

第3章 创建、更新及删除文档 23
3.1 插入并保存文档 23
3.1.1 批量插入 23
3.1.2 插入:原理和作用 24
3.2 删除文档 24
3.3 更新文档 25
3.3.1 文档替换 26
3.3.2 使用修改器 27
3.3.3 upsert 36
3.3.4 更新多个文档 38
3.3.5 返回已更新的文档 38
3.4 瞬间完成 41
3.4.1 安全操作 41
3.4.2 捕获“常规”错误 42
3.5 请求和连接 43

第4章 查询 45
4.1 find简介 45
4.1.1 指定返回的键 46
4.1.2 限制 46
4.2 查询条件 47
4.2.1 查询条件 47
4.2.2 OR查询 47
4.2.3 $not 48
4.2.4 条件句的规则 49
4.3 特定于类型的查询 49
4.3.1 null 49
4.3.2 正则表达式 50
4.3.3 查询数组 51
4.3.4 查询内嵌文档 53
4.4 $where查询 55
4.5 游标 56
4.5.1 limit、skip和sort 57
4.5.2 避免使用skip略过大量结果 58
4.5.3 高级查询选项 60
4.5.4 获取一致结果 61
4.6 游标内幕 63

第5章 索引 65
5.1 索引简介 65
5.1.1 扩展索引 67
5.1.2 索引内嵌文档中的键 68
5.1.3 为排序创建索引 68
5.1.4 索引名称 69
5.2 唯一索引 69
5.2.1 消除重复 69
5.2.2 复合唯一索引 70
5.3 使用explain和hint 70
5.4 索引管理 75
5.5 地理空间索引 76
5.5.1 复合地理空间索引 78
5.5.2 地球不是二维平面 78

第6章 聚合 79
6.1 count 79
6.2 distinct 79
6.3 group 80
6.3.1 使用完成器 82
6.3.2 将函数做为键使用 84
6.4 MapReduce 84
6.4.1 例1:找出集合中的所有键 85
6.4.2 例2:网页分类 87
6.4.3 MongoDB和MapReduce 87

第7章 进阶指南 91
7.1 数据库命令 91
7.1.1 命令的工作原理 92
7.1.2 命令参考 93
7.2 固定集合 95
7.2.1 属性及用法 96
7.2.2 创建固定集合 96
7.2.3 自然排序 97
7.2.4 尾部游标 98
7.3 GridFS:存储文件 99
7.3.1 开始使用GridFS:mongofiles 99
7.3.2 通过MongoDB驱动程序操作GridFS100
7.3.3 内部原理 100
7.4 服务器端脚本 101
7.4.1 dbeval 101
7.4.2 存储JavaScript 102
7.4.3 安全性 103
7.5 数据库引用 104
7.5.1 什么是DBRef 104
7.5.2 示例模式 104
7.5.3 驱动对DBRef的支持 105
7.5.4 什么时候该使用DBRef呢 106

第8章 管理 107
8.1 启动和停止MongoDB 107
8.1.1 从命令行启动 107
8.1.2 配置文件 109
8.1.3 停止MongoDB 110
8.2 监控 110
8.2.1 使用管理接口 110
8.2.2 serverStatus 112
8.2.3 mongostat 113
8.2.4 第三方插件 113
8.3 安全和认证 114
8.3.1 认证的基础知识 114
8.3.2 认证的工作原理 115
8.3.3 其他安全考虑 116
8.4 备份和修复 116
8.4.1 数据文件备份 117
8.4.2 mongodump和mongorestore 117
8.4.3 fsync和锁 118
8.4.4 从属备份 119
8.4.5 修复 119

第9章 复制 121
9.1 主从复制 121
9.1.1 选项 122
9.1.2 添加及删除源 123
9.2 副本集 124
9.2.1 初始化副本集 125
9.2.2 副本集中的节点 127
9.2.3 故障切换和活跃节点选举 128
9.3 在从服务器上执行操作 129
9.3.1 读扩展 130
9.3.2 用从节点做数据处理 130
9.4 工作原理 130
9.4.1 oplog 131
9.4.2 同步 131
9.4.3 复制状态和本地数据库 132
9.4.4 阻塞复制 132
9.5 管理 133
9.5.1 诊断 133
9.5.2 变更oplog的大小 134
9.5.3 复制的认证问题 134

第10章 分片 135
10.1 分片简介 135
10.2 MongoDB中的自动分片 135
10.3 片键 137
10.3.1 将已有的集合分片 137
10.3.2 递增片键还是随机片键 137
10.3.3 片键对操作的影响 138
10.4 建立分片 139
10.4.1 启动服务器 139
10.4.2 切分数据 140
10.5 生产配置 140
10.5.1 健壮的配置 141
10.5.2 多个mongos 141
10.5.3 健壮的片 141
10.5.4 物理服务器 142
10.6 管理分片 142
10.6.1 配置集合 142
10.6.2 分片命令 143

第11章 应用举例 145
11.1 化学品搜索引擎:Java 145
11.1.1 安装Java驱动程序 145
11.1.2 使用Java驱动程序 145
11.1.3 模式设计 146
11.1.4 用Java实现 148
11.1.5 一些问题 149
11.2 新闻聚合器:PHP 149
11.2.1 安装PHP驱动程序 150
11.2.2 使用PHP驱动程序 151
11.2.3 设计新闻聚集器 151
11.2.4 评论树 152
11.2.5 投票 153
11.3 自定义提交表单:Ruby 154
11.3.1 安装Ruby驱动 154
11.3.2 使用Ruby驱动 155
11.3.3 自定义表单提交 155
11.3.4 Ruby的对象映射和在Rails中使用MongoDB 157
11.4 实时分析:Python 157
11.4.1 安装PyMongo 157
11.4.2 使用PyMongo 158
11.4.3 用于实时分析的MongoDB 158
11.4.4 模式 159
11.4.5 处理请求 159
11.4.6 使用分析数据 160
11.4.7 其他因素 160

附录A 安装MongoDB 163
附录B mongo:MongoDB shell 167
附录C 深入MongoDB内部 169

免费在线读

10 年前,没人能预见互联网的发展给关系型数据库带来如此多的挑战。我在这个时期亲身经历了在快速发展的大型互联网公司应用MySQL的过程。开始时只有很少的数据,一台服务器就可以了。然后就得建立备份,以便应对大量的读取和不时的宕机。用不了多长时间,就得加一个缓存层,调整所有的查询,投入更多的硬件。
  最后,你会发现自己需要将数据切分到多个集群上,并重新构建大量的应用逻辑以适应这种切分。之后不久,你又会发现被自己数月前设计的数据库结构限制住了。怎么会呢?集群中大量的数据需要更改模式,这会花费很长时间,也需要DBA投入相当多的宝贵时间。在代码中处理要简单一些。但也需要小型开发团队数月的努力。最后,你会不断地拷问自己有没有更好的方法,或者为什么没有在核心数据库服务器中内置提供更多诸如此类的功能呢?
  为了应对现在Web 应用的数据膨胀,开源社区像以往一样提供了太多的“好方法”。从内存中的键值型存储到复杂的可以使用SQL的MySQL/InnoDB 变种,无所不有。但选择多了,做出正确的选择反而更难了。我自己就研究过其中很多种。
  MongoDB 的实用性着实令人着迷。MongoDB并不去迎合所有人的全部需求。它在功能和复杂性之间取得了很好的平衡,并且将原先十分复杂的任务大大简化。也就是说,它具备支撑今天主流Web应用的关键功能:索引、复制、分片、丰富的查询语法,特别灵活的数据模型。与此同时还不牺牲速度。
秉持MongoDB 自身的风格,本书简洁明快、通俗易懂。MongoDB 新手先看第1章,马上就能入门。有经验的用户会得益于本书的广度和权威性。对于流行的客户端API和高级的管理主题,如复制、备份和分片,本书都是权威参考。
根据我最近每天使用MongoDB的经验,我相信本书会始终不离我左右的,无论安装还是进行共享或备份式集群的产品化部署,它都是我最好的助手。任何想仔细研究使用MongoDB的人都需要这本重要的参考书。
——Jeremy Zawodny,Craigslist 软件工程师

本书的组织结构
  快速起步
  第1 章将简要讲述MongoDB 的背景:项目创立原因、希望达到的目标、选用它的理由。第2章会接着介绍一些MongoDB的核心概念和术语,还有如何上手操作数据库和shell 的内容。部署MongoDB
  接下来的两章会介绍MongoDB 开发者需要的基础知识。第3章介绍了如何执行一些基本的写入操作,包括在不同安全和速度等级下的实现细节。第4章主要是介绍如何来查找文档和创建复杂的查询。这一章还包括如何迭代结果和其他一些用于结果处理的选项,如排序、数量限制和忽略。
  进阶指南
  之后的三章会深入探讨一些比存储和检索数据更复杂的用法。第5 章将介绍索引是什么和怎么在MongoDB中使用,还介绍了用于检查和修改索引的工具,还有索引管理。第6 章介绍了多种利用MongoDB聚集数据的方法,包括计数、查找唯一值、文档分组和MapReduce。第7章会对前几章没有涉及的要点做一个补充,如文件存储、服务器端JavaScript,数据库命令和数据库引用。
  管理
  接下来的三章编程的味道淡一些,侧重MongoDB 的运营。第8 章讨论了启动数据库的多种选项,监控MongoDB服务器和部署安全性。如何对存储在MongoDB 中的数据进行合理的数据备份也在这章介绍了。第9 章包括如何设立MongoDB的复制,具体包括配置标准主从集群、设置自动故障恢复。这章还会揭示复制的工作原理和调整选项。第10章探讨了如何水平扩展MongoDB,包括什么是自动切分、如何设置及其对应用程序的影响。
  用MongoDB开发应用
  第11 章会介绍几个使用MongoDB 的示例应用,这些应用是使用Java、PHP、Python 和Ruby编写的。这些例子介绍了如何将本书前面介绍的概念映射到具体的语言和问题域中去。
  附录
  附录A 介绍了MongoDB 版本控制方案,以及如何在Windows、OS X 和Linux 下安装的细节。附录B介绍了MongoDB shell 中一些有用的技巧和工具。附录C 更详细地介绍了MongoDB的内部工作原理:存储引擎、数据格式和Wire 协议
  致谢
  感谢Eliot Horowitz 和Dwight Merriman,是他们启动了MongoDB项目,才使得这一切成为可能。感谢技术审稿人Alberto Lerner、Mathias Stearn、AaronStaple、James Avery和JohnHornbeck,他们在完善本书的过程中做出了不懈努力。感谢优秀的编辑JulieSteele在本书出版的每一阶段对我们的帮助。还要感谢O’Reilly 对本书出版做出贡献的其他工作人员。最后,非常感谢MongoDB社区从始至终对这个项目和本书的支持。
  Kristina感谢以下人员
  感谢我在10gen 的所有同事,他们与我分享了MongoDB的知识和建议(还有那些关于运营、啤酒、飞机失事的见解)。还要感谢Mike,他像变魔术一样完成了本书的一半工作,他还修正了我的很多低级错误,让它们没有机会被Julie看到。最后要谢谢Andrew、Susan 和Andy,感谢他们的支持、耐心和建议。没有你们就没有这本书。
  Michael感谢以下人员谢谢我所有的朋友,他们在本书的写作期间给了我很多鼓励。谢谢我在10gen的各位同事,是他们努力才让MongoDB如此成功。感谢Kristina,和她合作很愉快。最要感谢我的家人,他们给了我无尽的支持。

第1章
简介
MongoDB是一种强大、灵活、可扩展的数据存储方式。它扩展了关系型数据库的
众多有用功能,如辅助索引、范围查询( range query)和排序。 MongoDB的功能非常丰富,比如内置的

对 MapReduce式聚合的支持,以及对地理空间索引的支持。

要是不能用的话,再牛的技术也是空谈, MongoDB致力于容易上手、便于使用。 MongoDB的数据模型对开

发者来说非常友好,配置选项对手管理员来说也很轻松,并且由驱动程序和数据库 shell提供的自然语言

式的 API。MongoDB会为你扫除障碍,让你关注编程本身而不是为存储数据烦恼。

1.1 丰富的数据模型
MongoDB是面向文档的数据库,不是关系型数据库。放弃关系模型的主要原因就是为了获得更加方便的扩

展性,当然还有其他好处。

基本的思路就是将原来“行”(row)的概念换成更加灵活的“文档”(document)模型。面向文档的方

式可以将文档或者数组内嵌进来,所以用一条记录就可以表示非常复杂的层次关系。使用面向对象语言的

开发者恰恰这么看待数据,所以感觉非常自然。

MongoDB没有模式:文档的键不会事先定义也不会固定不变。由于没有模式需要更改,通常不需要迁移大

量数据。不必将所有数据都放到一个模子里面,应用层可以处理新增或者丢失的键。这样开发者可以非常

容易地变更数据模型。

1.2 容易扩展
应用数据集的大小在飞速增加。传感器技术的发展、带宽的增加,以及可联网手持
1
设备的普及使得当下即便很小的应用也要存储大量数据,量大到很多数据库都应付不来。 T级别的数据原

来是闻所未闻的,现在已经司空见惯了。

由于开发者要存储的数据不断增长,他们面临一个非常困难的选择:该如何扩展他们的数据库?升级呢(

买台更好的机器),还是扩展呢(将数据分散到很多机器上)?升级通常是最省力气的做法,但是问题也

显而易见:大型机一般都非常昂贵,最后达到了物理极限的话花多少钱都买不到更好的机器。对于大多数

人希望构建的大型 Web应用来说,这样做既不现实也不划算。而扩展就不同了,不但经济而且还能持续添

加:想要增加存储空间或者提升性能,只需要买台一般的服务器加入集群就好了。

MongoDB从最初设计的时候就考虑到了扩展的问题。它所采用的面向文档的数据模型使其可以自动在多台

服务器之间分割数据。它还可以平衡集群的数据和负载,自动重排文档。这样开发者就可以专注于编写应

用,而不是考虑如何扩展。要是需要更大的容量,只需在集群中添加新机器,然后让数据库来处理剩下的

事。

1.3 丰富的功能
很难界定什么才算作一个功能:上面提及的算是功能吗?关系型数据库做不到的算吗?都可以说

Memcached做不到的呢?其他面向文档的数据库做不到的又如何呢?但无论界定的标准是什么,都可以说
MongoDB拥有一些真正独特的、好用的工具,其他方案不具备或不完全具备这些工具。

.
索引
MongoDB支持通用辅助索引,能进行多种快速查询,也提供唯一的、复合的和地理空间索引能力。
.存储
JavaScript
开发人员不必使用存储过程了,可以直接在服务端存取 JavaScript的函数和值。
.
聚合
MongoDB支持 MapReduce和其他聚合工具。
.固定集合
集合的大小是有上限的,这对某些类型的数据(比如日志)特别有用。
.
文件存储
MongoDB支持用一种容易使用的协议存储大型文件和文件的元数据。有些关系型数据库的常见功能
MongoDB并不具备,比如联接( join)和复杂的多

2|第 1章

行事务。这个架构上的考虑是为了提高扩展性,因为这两个功能实在很难在一个分布式系统上实现。

1.4 不牺牲速度
卓越的性能是 MongoDB的主要目标,也极大地影响了设计上的很多决定。 MongoDB使用MongoDB传输协议

作为与服务器交互的主要方式(与之对应的协
议需要更多的开销,如 HTTP/REST)。它对文档进行动态填充,预分配数据文件,用空间换取性能的稳定

。默认的存储引擎中使用了内存映射文件,将内存管理工作交给操作系统去处理。动态查询优化器会“记

住”执行查询最高效的方式。总之, MongoDB在各个方面都充分考虑了性能。

虽然 MongoDB功能强大,尽量保持关系型数据库的众多特性,但是它并不是要具备所有的关系型数据库的

功能。它尽可能地将服务器端处理逻辑交给客户端(由驱动程序或者用户的应用程序处理)。这样精简的

设计使得 MongoDB获得了非常好的性能。

1.5 简便的管理
MongoDB尽量让服务器自治来简化数据库的管理。除了启动数据库服务器之外,几乎没有什么必要的管理

操作。如果主服务器挂掉了, MongoDB会自动切换到备份服务器上,并且将备份服务器提升为活跃服务器

。在分布式环境下,集群只需要知道有新增加的节点,就会自动集成和配置新节点。 MongoDB的管理理念

就是尽可能地让服务器自动配置,让用户能在需要的时候调
整设置(但不强制)。

1.6 其他内容
在本书中,我们还会花些时间追溯一下在开发 MongoDB的过程中一些决定的原因和动机,希望通过这种方

式来阐释 MongoDB的理念。毕竟, MongoDB的愿景是对自身最好的诠释——建立一种灵活、高效、易于扩

展、功能完备的数据库。

MongoDB 权威指南 pdf下载声明

本pdf资料下载仅供个人学习和研究使用,不能用于商业用途,请在下载后24小时内删除。如果喜欢,请购买正版

pdf下载地址

版权归出版社和作者所有,下载链接已删除。如果喜欢,请购买正版!

链接地址:MongoDB 权威指南