搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
文献来源:
出版时间 :
MongoDB大数据处理权威指南
0.00    
图书来源: 浙江图书馆(由图书馆配书)
  • 配送范围:
    全国(除港澳台地区)
  • ISBN:
    9787302383666
  • 作      者:
    (美)David Hows[等]著
  • 出 版 社 :
    清华大学出版社
  • 出版日期:
    2015
收藏
编辑推荐
  精通MongoDB——流行的“大数据”NoSQL数据库技术,搭建MongoDB环境、使用GridFS和新的聚集框架、使用非SQL命令处理数据、复制、复制标签和标签分片、优化MongoDB
展开
作者简介
  David Hows,以优异的成绩毕业于澳大利亚新南威尔士州的卧龙岗大学。他一次接触计算机,是在尝试不花钱的情况下改进家庭PC的性能。这促使他加入IT行业,David曾经担任过系统管理员、性能工程师、软件开发者、解决方案架构师和数据库工程师等职务。David也曾徒劳地尝试过多年足球,并且他的咖啡杯上写着“Grumble Bum”。

  PeterMembrey,是一位特许IT研究员,他拥有15年使用Linux和开源解决方案解决现实中问题的经验。从17岁起他就是一位红帽认证工程师,并且他也有幸在Red Hat工作过,并编写了几本开源解决方案相关的书籍。他拥有利物浦大学的信息安全硕士学位,目前是香港理工大学的博士生,他的研究方向包括云计算、大数据、科学和安全。他与自己出色的妻子Sara和儿子Kaydyn一起居住在香港。尽管他的世界语一直不错,但广东话却在不断退步。

  EelcoPlugge,是一位年轻的IET/BSC专家,他对IT安全领域非常感兴趣。在21岁时他就成为一位加密专家,目前从事移动设备管理行业,偶尔也会编写一些书籍。Eelco最近拿到了利物浦大学的计算机安全硕士学位,并持有多项专业证书。他对Linux、网络安全和加密技术都抱有极大的热情。Eelco与他的年轻家庭一起居住在荷兰。他喜欢寿司,讨厌过于复杂的事情。 Tim Hawkins曾在1993年创建了世界上一个在线分类广告门户网站loot.com,之后负责管理雅虎欧盟的许多非媒体属性产品,例如搜索、本地搜索、邮件、消息和社交网络。他目前正在管理美国主要电子零售商的一个大型离岸团队,负责开发和部署下一代电子商务应用。他喜欢帽子,讨厌复杂性。
展开
内容介绍

  本书根据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和 EC2)
  ◆ 用GridFS和新的聚集框架
  ◆ 使用非SQL命令处理数据
  ◆ 使用PHP或Python编写应用
  ◆ 优化MongoDB
  ◆ 掌握MongoDB管理方面的知识,包括复制、复制标签和标签分片

展开
精彩书评
  ★感谢MongoDB团队曾经和现有的所有成员。没有他们的帮助我们就无法完成本书的编写,人们对数据存储的观点也会出现极大的不同。我要特别感谢悉尼MongoDB团队的同事们,他们为本书的编写提供了极大的帮助。
  ——David Hows

  ★编写书籍是一个团队性的工作。即使有时只有一个作者,在幕后也会有许多人帮助将所有东西整合在一起。因此我非常感谢MongoDB社区和Apress的所有人,感谢他们的辛勤工作、耐心和支持。特别要感谢Dave和Eelco,他们帮助完成了本书的第2版。
  我还想感谢Chuck Smith,一位让我迷上世界语并让我保持有很高兴趣的朋友(维基百科世界语版本的创始人)。这正好与本书第2版的编写产生了交集,我对学习世界语的极大兴趣延伸到了本书的编写上。另外还必须感谢L.L.Zamenhof博士,他创建了世界语。一个远超于时代的人,我希望能带着这个梦想前进。
  最后,感谢妻子Sarah的耐心和长久的支持。
  ——Peter Membrey

  ★感谢9gag社区,没有他们本书就无法在数月前完成。
  ——Eelco Plugge

  ★我想感谢mongodb-user和mongodb-dev邮件列表中的所有成员,感谢他们能够忍耐我提出的无休止的问题。
  ——Tim Hawkins

  ★我接触数据库的时间相对较晚,从2006年才开始使用MySQL。在学完所有计算机本科都提供的逻辑课程之后,我开始使用MySQL构建出一个完整的LAMP架构,其中用到了一些基本表。此时,我并未对SQL表管理的复杂性进行深入思考。不过,随着时间的流逝,我看到了存储越来越多异构数据的需要,并且随着时间的推移,简单的模式可以如何在它的生命周期中成长和演变。
  我一次接触MongoDB是在2011年,当时Peter Membrey建议我不要使用包含30个键行以及30个值行的上下文表,而是应该使用MongDB实例来存储数据。就像所有开发者在面对一项新技术时的感觉一样,我对之嗤之以鼻并且坚持我原来的计划。直到我使用糟糕的设计已经完成一半代码时,Peter仍然坚持我应该尝试使用MongoDB,此时我才接受意见。如同所有来自SQL阵营的开发者一样,MongoDB能够接受任何类型数据并且可以根据任何搜索条件返回这些数据的能力让我感到震惊。直到现在我也仍然大呼过瘾。
  ——David Hows

  ★本书的组织方式在本书中,Peter、Eelco Plugge、Tim Hawkins和我都希望能够完全地展示出我们在学习MongoDB时的经验:在保持设计简单和清晰的同时,教会你如何使用MongoDB。每章内容都将展示一个单独的样例数据库,因此你可以按照模块或线性的方式阅读本书;这完全取决于你自己。这意味着如果愿意,你可以略过某些特定的章节,而不会影响你对其他内容的学习。
  本书的样例命令将显示在它们的输出中。它们将以等宽的“代码”字体出现,并且会以加粗的方式显示,以便与其他结果输出加以区分。在大多数章节中,你都会遇到提示、警告和注意,它们包含有用的有时甚至极其重要的信息。
  ——David Hows
展开
精彩书摘
  了解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 Membrey最近开发了一个应用,用于存储一组eBay搜索结果。搜索结果的数量是不固定的(最多100个),因此他需要一种简单的方式在数据库中将用户和搜索结果关联起来。
  Peter曾尝试使用MySQL,他不得不设计出一张表用于存储数据,并编写相应代码存储他的结果,然后再编写代码将结果组合在一起。这是一个相当常见的场景,大多数开发者在开发中经常会遇到。通常,我们不得不这样做;不过,对于该项目,他决定使用MongoDB,因此事情就变得有点不同了。
  具体地说,他添加了下面这样两行代码:
  request['ebay_results'] = ebay_results_array
  collection.save(request)
  在本例中,request是Peter的文档,ebay_result是键,而ebay_result_array包含来自eBay的搜索结果。第二行保存了修改后的数据。将来当他访问该文档时,他将获得与之前格式完全相同的数据。他不需要任何SQL;也不需要执行任何会话;更不需要创建任何新表或编写任何特殊代码——MongoDB就可以完成工作。他最终轻松地完成了工作,并按时回家。
  ……
展开
目录
第Ⅰ部分 MongoDB基础
第1章 MongoDB简介
1.1 了解MongoDB哲学
1.1.1 使用正确的工具处理正确的工作
1.1.2 天生缺少对事务的支持
1.1.3 JSON和MongoDB
1.1.4 采用非关系的方式
1.1.5 选择性能还是特性
1.1.6 在任何地方均可运行数据库
1.2 将所有组合在一起
1.2.1 生成或创建键
1.2.2 使用键和值
1.2.3 实现集合
1.2.4 了解数据库
1.3 了解特性列表
1.3.1 使用面向文档存储(BSON)
1.3.2 支持动态查询
1.3.3 为文档创建索引
1.3.4 使用地理空间索引
1.3.5 分析查询
1.3.6 就地更新信息
1.3.7 存储二进制数据
1.3.8 复制数据
1.3.9 实施分片
1.3.10 使用映射和归约函数
1.3.11 全新的聚合框架
1.4 获取帮助
1.4.1 访问网站
1.4.2 与MongoDB开发者沟通
1.4.3 剪切和粘贴MongoDB代码
1.4.4 在Google小组中寻找解决方案
1.4.5 利用JIRA跟踪系统
1.5 小结
第2章 安装MongoDB
2.1 选择版本
2.2 在系统中安装MongoDB
2.2.1 在Linux中安装MongoDB
2.2.2 在Windows中安装MongoDB
2.3 运行MongoDB
2.3.1 先决条件
2.3.2 研究安装目录布局
2.3.3 使用MongoDB shell
2.4 添加额外的驱动
2.4.1 安装PHP驱动
2.4.2 确认PHP安装正确
2.4.3 安装Python驱动
2.4.4 确认PyMongo安装正确
2.5 小结
第3章 数据模型
3.1 设计数据库
3.1.1 集合的更多细节
3.1.2 使用文档
3.1.3 在文档中内嵌或引用信息
3.1.4 创建_id字段
3.2 构建索引
3.3 使用地理空间索引
3.4 在真实世界中使用MongoDB
3.5 小结
第4章 使用数据
4.1 浏览数据库
4.2 在集合中插入数据
4.3 查询数据
4.3.1 使用点号
4.3.2 使用函数sort、limit和skip
4.3.3 使用固定集合、自然顺序和$natural
4.3.4 获取单个文档
4.3.5 使用聚集命令
4.3.6 使用条件操作符
4.3.7 使用正则表达式
4.4 更新数据
4.4.1 使用update()更新
4.4.2 使用save()命令实现upsert
4.4.3 自动更新信息
4.4.4 指定匹配数组的位置
4.4.5 原子操作
4.4.6 以原子的方式修改和返回文档
4.5 重命名集合
4.6 删除数据
4.7 引用数据库
4.7.1 手动引用数据
4.7.2 使用DBRef引用数据
4.8 使用索引相关的函数
4.8.1 学习索引相关的命令
4.8.2 强制使用某个索引查询数据
4.8.3 限制查询匹配
4.9 小结
第5章 GridFS
5.1 背景
5.2 使用GridFS
5.3 开始使用命令行工具
5.3.1 使用_id键
5.3.2 使用文件名
5.3.3 决定文件长度
5.3.4 使用块大小
5.3.5 处理上传日期
5.3.6 生成文件的哈希值
5.4 查看MongoDB中的数据
5.4.1 使用搜索命令
5.4.2 删除
5.4.3 从MongoDB中获取文件
5.4.4 mongofiles命令小结
5.5 使用Python
5.5.1 连接数据库
5.5.2 访问单词
5.6 在MongoDB中添加文件
5.7 从GridFS中读取文件
5.8 删除文件
5.9 小结
第Ⅱ部分 在开发中使用MongoDB
第6章 PHP和MongoDB
6.1 比较MongoDB和PHP中的
文档
6.2 MongoDB类
6.3 连接和断开连接
6.4 插入数据
6.5 查询数据
6.5.1 返回单个文档
6.5.2 列出所有文档
6.5.3 使用查询操作符
6.5.4 查询特定信息
6.5.5 排序、限制和忽略数据项
6.5.6 统计匹配结果的数目
6.5.7 使用聚集框架对数组分组
6.5.8 使用hint()函数指定索引
6.5.9 使用条件操作符重新定义查询
6.5.10 正则表达式
6.6 使用PHP修改数据
6.6.1 使用update()函数更新数据
6.6.2 节省更新操作的时间
6.6.3 使用$ince增加特定键的值
6.6.4 使用$set修改键值
6.6.5 使用$unset删除字段
6.6.6 使用$rename重命名字段
6.6.7 在更新/插入期间使用$setOnInsert
修改键值
6.6.8 使用$push向指定字段中添加值
6.6.9 使用$push和$each向某个键中
添加多个值
6.6.10 使用$addToSet将数据添加到
数组中
6.6.11 使用$pop从数组中删除元素
6.6.12 使用$pull删除所有指定值
6.6.13 同时删除多个元素
6.6.14 使用save()函数更新/插入数据
6.6.15 以原子的方式修改文档
6.7 删除数据
6.8 DBRef
6.9 GridFS和PHP驱动
6.9.1 存储文件
6.9.2 在已存储的文件中添加元数据
6.9.3 获取文件
6.9.4 删除数据
6.10 小结
第7章 Python和MongoDB
7.1 在Python中使用文档
7.2 使用PyMongo模块
7.3 连接和断开
7.4 插入数据
7.5 搜索数据
7.5.1 搜索单个文档
7.5.2 搜索多个文档
7.5.3 使用点操作符
7.5.4 返回字段
7.5.5 使用sort()、limit()和skip()简化
查询
7.5.6 聚集查询
7.5.7 使用hint()指定索引
7.5.8 使用条件操作符重定义查询
7.5.9 使用正则表达式执行搜索
7.6 修改数据
7.6.1 更新数据
7.6.2 修改操作符
7.6.3 使用save()函数快速保存文档
7.6.4 以原子的方式修改文档
7.6.5 使用参数
7.7 删除数据
7.8 在两个文档之间创建链接
7.9 小结
第8章 高级查询
8.1 文本搜索
8.1.1 文本搜索的代价和限制
8.1.2 启用文本索引
8.1.3 使用文本索引
8.1.4 其他语言中的文本索引
8.1.5 文本索引的复合索引
8.2 聚集框架
8.2.1 $group
8.2.2 $sum
8.2.3 $limit
8.2.4 $match
8.2.5 $sort
8.2.6 $unwind
8.2.7 $project
8.2.8 $skip
8.3 MapReduce
8.3.1 MapReduce的工作方式
8.3.2 创建测试文档
8.3.3 使用map函数
8.3.4 高级MapReduce
8.3.5 调试MapReduce
8.4 小结
第Ⅲ部分 使用MongoDB处理大数据
第9章 数据库管理
9.1 使用管理工具
9.1.1 mongo--MongoDB控制台
9.1.2 使用第三方管理工具
9.2 备份MongoDB服务器
9.2.1 创建第一个备份
9.2.2 备份单个数据库
9.2.3 备份单个集合
9.3 深入学习备份
9.4 恢复单个数据库或集合
9.4.1 恢复单个数据库
9.4.2 恢复单个集合
9.5 自动化备份
9.5.1 使用本地数据存储
9.5.2 使用远端数据存储(基于云)
9.6 备份大数据库
9.6.1 使用隐藏的辅助服务器备份
数据
9.6.2 使用日志文件系统创建快照
9.6.3 使用卷管理器时的磁盘布局
9.7 将数据导入MongoDB
9.8 从MongoDB导出数据
9.9 通过限制对MongoDB服务器的
访问保护数据安全
9.10 使用认证保护服务器
9.10.1 添加admin用户
9.10.2 启用认证
9.10.3 在mongo控制台中执行认证
9.10.4 MongoDB用户角色
9.10.5 代理凭证
9.10.6 修改用户凭证
9.10.7 添加只读用户
9.10.8 删除用户
9.10.9 在PHP应用中认证连接
9.11 管理服务器
9.11.1 启动服务器
9.11.2 重新配置服务器
9.11.3 获得服务器版本
9.11.4 获得服务器状态
9.11.5 关闭服务器
9.12 使用MongoDB日志文件
9.13 验证和修复数据
9.13.1 修复服务器
9.13.2 验证单个集合
9.13.3 修复集合验证错误
9.14 升级MongoDB
9.15 MongoDB的滚动升级
9.16 监控MongoDB
9.17 使用MongoDB管理服务
9.18 小结
第10章 优化
10.1 优化服务器硬件
10.1.1 了解MongoDB使用内存的
方式
10.1.2 了解工作集大小
10.1.3 选择正确的数据库服务器
硬件
10.2 评估查询性能
10.2.1 MongoDB分析器
10.2.2 使用explain()分析特定的
查询
10.2.3 使用分析器和explain()优化
查询
10.3 管理索引
10.3.1 显示索引
10.3.2 创建简单的索引
10.3.3 创建复合索引
10.4 指定索引选项
10.4.1 使用{background: true}在后台
创建索引
10.4.2 使用{unique: true}创建唯一键
索引
10.4.3 使用{dropdups: true}自动去重
10.4.4 使用{sparse: true}创建稀疏
索引
10.4.5 TTL索引
10.4.6 文本索引
10.4.7 删除索引
10.4.8 重建集合索引
10.5 MongoDB选择索引的方式
10.6 使用hint()强制使用特定的
索引
10.7 优化小对象的存储
10.8 小结
第11章 复制
11.1 MongoDB复制的目标
11.1.1 改善可扩展性
11.1.2 改善持久性/可靠性
11.1.3 提供隔离性
11.2 复制基础
11.2.1 主服务器的定义
11.2.2 辅助服务器的定义
11.2.3 仲裁服务器的定义
11.3 深入学习oplog
11.4 实现复制集
11.4.1 创建复制集
11.4.2 启动服务器成员
11.4.3 向复制集中添加服务器
11.4.4 添加仲裁服务器
11.4.5 复制集链
11.4.6 管理复制集
11.4.7 为复制集成员设置选项
11.4.8 从应用连接到复制集
11.5 小结
第12章 分片
12.1 了解分片的需求
12.2 对数据进行水平和垂直分区
12.2.1 对数据进行垂直分区
12.2.2 对数据进行水平分区
12.3 分析一个简单的分片场景
12.4 使用MongoDB实现分片
12.4.1 创建分片设置
12.4.2 在集群中添加新的分片
12.4.3 从集群中移除分片服务器
12.4.4 确定连接的方式
12.4.5 列出分片服务器的状态
12.4.6 使用复制集实现分片
12.5 均衡器
12.6 哈希片键
12.7 标签分片
12.8 小结
展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

请选择您读者所在的图书馆

选择图书馆
浙江图书馆
点击获取验证码
登录
没有读者证?在线办证