内容简介
本书根据MongoDB的版本做了相应更新,其中包含MongoDB
n的所有特性,包括版本2.2中引入的聚集框架和版本2.4中引入的哈希索引。MongoDB是行的“大数据”NoSQL数据库技术,并且正处于发展中。来自10gen的David Hows以及具有丰富MongoDB开发经验的Peter Membrey和Eelco Plugge,组成了本书的专家团队,他们在本书中分享了自己的专业知识和经验,帮助你了解成为MongoDB专家所需的所有知识。
主要内容
◆
在所有主流平台上搭建MongoDB,包括Windows、Linux、OS X和云平台(例如Rackspace、Azure和Amazon EC2)
◆
用GridFS和新的聚集框架
◆
使用非SQL命令处理数据
◆
使用PHP或Python编写应用
◆
优化MongoDB
◆
掌握MongoDB管理方面的知识,包括复制、复制标签和标签分片
目录
第Ⅰ部分
MongoDB基础
第1章
MongoDB简介 3
1.1 了解MongoDB哲学 3
1.1.1 使用正确的工具处理正确的工作 3
1.1.2 天生缺少对事务的支持 5
1.1.3
JSON和MongoDB 5
1.1.4 采用非关系的方式 7
1.1.5 选择性能还是特性 8
1.1.6 在任何地方均可运行数据库 8
1.2 将所有组合在一起 9
1.2.1 生成或创建键 9
1.2.2 使用键和值 9
1.2.3 实现集合 10
1.2.4 了解数据库 10
1.3 了解特性列表 10
1.3.1 使用面向文档存储(BSON) 11
1.3.2 支持动态查询 11
1.3.3 为文档创建索引 12
1.3.4 使用地理空间索引 13
1.3.5 分析查询 13
1.3.6 就地更新信息 13
1.3.7 存储二进制数据 14
1.3.8 复制数据 14
1.3.9 实施分片 14
1.3.10 使用映射和归约函数 15
1.3.11 全新的聚合框架 15
1.4 获取帮助 15
1.4.1 访问网站 15
1.4.2 与MongoDB开发者沟通 16
1.4.3 剪切和粘贴MongoDB代码 16
1.4.4 在Google小组中寻找解决方案 16
1.4.5 利用JIRA跟踪系统 16
1.5 小结 16
第2章 安装MongoDB 17
2.1 选择版本 17
2.2 在系统中安装MongoDB 18
2.2.1 在Linux中安装MongoDB 18
2.2.2 在Windows中安装MongoDB 19
2.3 运行MongoDB 20
2.3.1 先决条件 20
2.3.2 研究安装目录布局 20
2.3.3 使用MongoDB shell 21
2.4 添加额外的驱动 22
2.4.1 安装PHP驱动 22
2.4.2 确认PHP安装正确 25
2.4.3 安装Python驱动 26
2.4.4 确认PyMongo安装正确 28
2.5 小结 29
第3章 数据模型&nb
摘要与插图
了解MongoDB哲学如同所有的项目一样,MongoDB有一套自己的设计哲学用于帮助指导开发。本节内容将介绍一些MongoDB数据库的基本原则。
1.1.1 使用正确的工具处理正确的工作
MongoDB中要的哲学概念是:一鞋难合众人脚。在过去的许多年中,传统的关系(SQL)数据库(MongoDB是面向文档的数据库)一直被用于
存储所有类型的数据。无论该数据是否符合关系模型(被用在所有的RDBMS数据库中,例如MySQL、PostgresSQL、SQLite、
Oracle、SQL
Server等)都无所谓;无论如何,数据都将被填充到数据库中。一般来说,部分原因是因为读取和修改数据库相比操作文件系统更加简单(和安全)。如果选
择一本PHP方面的书籍,例如PHP for Absolute Beginners,by Jason Lengstorf
(Apress,2009),它将会教你使用数据库存储信息,而不是文件系统。这样做只是因为它更简单。在使用数据库存储信息的时候,开发者必须一直遵守
它的工作流程。很明显,我们并未按照数据库原有的意图使用它。任何尝试在数据库中存储复杂数据、创建5张表,然后将它们组合在一起的开发者,都会明白我们
在讲什么。
MongoDB团队决定他们不会创建另一个试图为所有人做所有事情的数据库。相反,该团队希望创建一个只用于处理文档的数据库,而
不是行,并且它的速度要快,还要具有强大的扩展性和易用性。为了实现这个目标,他们不得不忽略一些特性,这意味着MongoDB在某些特定的情况下并不是
想的选择。例如,它缺少事务支持,意味着无法使用MongoDB编写财务应用。也就是说,MongoDB可能对于之前提到的部分应用(例如存储复杂数
据)是合适的。不过这不是个问题,因为你可以在财务模块中使用传统的RDBMS,而使用MongoDB存储文档。这样的混合解决方案常见,并
且一些产品级应用(例如New York Times网站)已经在这样做了。
一旦适应MongoDB可能无法解决所有问题的理念之后,你会发
现对于某些问题,MongoDB可以地解决它们,例如分析(例如网站中使用的实时Google
Analytics)和复杂数据结构(例如博客文章和评论)。如果你仍然无法接受MongoDB是一个正式的数据库工具这个观点,那么请提前跳到1.3节
“了解特性列表”,该部分内容将展示MongoDB的一些强大特性。
注意:
缺少事务和其他传统数据库特性并不意味着MongoDB不稳定,或者不能用于管理重要数据。
MongoDB设计背后的另一个关键概念是:数据库应该一直具有多个副本。如果单个数据库实例出现问题,那么它可以轻松地通过另一个服务器恢复到正常状
态。因为MongoDB的目标是尽可能地快,所以它采取了一些捷径,导致它难以从系统崩溃中恢复。开发者认为重的系统崩溃可能就是从服务中移除一台计
算机;这意味着即使数据库恢复了,也无法正常使用。记住:MongoDB不会尝试为所有人完成所有事情。但对于许多目的(例如构建Web应
用),MongoDB是一个能够实现解决方案的工具。
现在你应该已经明白了MongoDB的起源。它不会尝试在所有方面都表现,也乐
于承认它不会适用于所有人。不过,对于选择使用它的开发者,MongoDB提供了一个功能丰富的面向文档数据库,并且对运行速度和扩展性做了优化。它也几
乎可以运行在任何目标上。MongoDB的网站上包含了可运行在Linux、Mac OS、Windows和Solaris中的安装文件。
MongoDB成功实现了这些目标,因此使用MongoDB有点像梦幻一样(至少对于我们来说)。不必担心如何将数据压缩到一张表中,只需要将数据组合在
一起,然后将数据传递给MongoDB。考虑一个真实的例子。本书的合作者Peter