出版时间:2012-10 出版社:人民邮电出版社 作者:[美] Kyle Banker 页数:244 字数:394000 译者:丁雪丰
Tag标签:无
前言
数据库是信息时代的“老黄牛”,就像希腊神话中的擎天神Atlas 一样,它们默默地支撑着我们赖以生存的数字世界。发布评论和微博,乃至查找并排序内容,这些操作从本质上来说都是和数据库打交道,而我们恰恰会对此熟视无睹。正因为这个基础的“隐蔽功能”,我总是会对数据库心存敬畏,这种敬畏和走过本来只让汽车通行的悬索大桥时所产生的敬畏没什么分别。数据库有很多种形式。图书馆里的图书目录和卡片分类都算是其中的一种,昔日Perl程序员使用的特殊结构的文本文件也是。也许现在最广为人知的数据库,就是功能丰富、让人赚得盆满钵盈的关系型数据库了,它支撑着这个世界上的很多软件。这些关系型数据库,连同它们那理想化的第三范式和富于表达力的SQL接口,仍然让那些保守派肃然起敬。但是,作为一名有几年工作经验的Web应用程序开发者,我渴望尝试一些能替代占据统治地位的关系型数据库的后起之秀,发现MongoDB之后,便对它爱不释手。MongoDB使用类似JSON的结构来表示数据,我喜欢这个设计。JSON简单、直观而且易用。MongoDB还将其查询语言构建于JSON之上,使得这个新数据库在使用上很舒适很协调。接口之外的一些引人注目的特性让它更具魅力,例如方便复制和分片。我使用MongoDB构建了一些应用程序,亲身体验了它带给开发的舒适性之后,便深深爱上了MongoDB。机缘巧合,我加入了10gen——领导开发开源数据库MongoDB的公司。两年来,我有机会改善多款客户端驱动,与众多客户一起部署他们的MongoDB。我希望在这一过程中所积累的经验都能原汁原味地体现在你正阅读的这本书中。作为一款还在不断完善的作品,MongoDB还有很长的路要走,但它已经成功地支撑了成百上千的应用程序,运行在大大小小的数据库集群之上,而且每天都在进步。MongoDB每天都能为不少开发者带来惊喜,甚至是幸福,希望你也能拥抱MongoDB,感受它的魅力。
内容概要
《MongoDB实战》由10gen公司(开发并支持开源数据库MongoDB)负责维护Ruby及C语言官方MongoDB驱动的软件工程师Kyle
Banker编写而成,是一本全面细致介绍MongoDB及其应用的权威指南。《MongoDB实战》共分三部分,首先介绍MongoDB的历史、特性和使用场景,然后细致阐述MongoDB
API,专注于应用程序开发渐近式描述电子商务应用的模式与操作,并最后从DBA的角度考量性能和运维。另外,书中还介绍了面向文档数据库模型,并深度剖析了复制、自动分片以及部署等特性。
《MongoDB实战》适合初中级应用程序开发者和DBA学习参考。
作者简介
Kyle Banker
软件工程师,曾工作于10gen公司,负责维护Ruby及C语言的官方MongoDB驱动、领导MongoDB文档项目并开发培训课程,且为客户提供咨询、商业支持和培训;现任职于Snapjoy(为用户提供默认私有的在线照片备份和自动管理服务)。
书籍目录
第一部分 入门指南
第1章 为现代Web而生的数据库
1.1 生于云端
1.2 MongoDB的主要特性
1.2.1 文档数据模型
1.2.2 即时查询
1.2.3 二级索引
1.2.4 复制
1.2.5 速度和持久性
1.2.6 数据库扩展
1.3 MongoDB的核心服务器和工具
1.3.1 核心服务器
1.3.2 JavaScript Shell
1.3.3 数据库驱动
1.3.4 命令行工具
1.4 为什么选择MongoDB
1.4.1 MongoDB与其他数据库的对比
1.4.2 使用场景和生产部署
1.5 提示与局限
1.6 小结
第2章 MongoDB JavaScript Shell
2.1 深入MongoDB Shell
2.1.1 启动Shell
2.1.2 插入与查询
2.1.3 更新文档
2.1.4 删除数据
2.2 创建索引并查询
2.2.1 创建一个大集合
2.2.2 索引与explain()
2.3 基本管理
2.3.1 获取数据库信息
2.3.2 命令工作原理
2.4 获得帮助
2.5 小结
第3章 使用MongoDB编写程序
3.1 通过Ruby使用MongoDB
3.1.1 安装与连接
3.1.2 用Ruby插入文档
3.1.3 查询与游标
3.1.4 更新与删除
3.1.5 数据库命令
3.2 驱动是如何工作的
3.2.1 对象ID生成
3.2.2 BSON
3.2.3 网络传输
3.3 构建简单的应用程序
3.3.1 配置
3.3.2 收集数据
3.3.3 查看归档
3.4 小结
第二部分 MongoDB与应用程序开发
第4章 面向文档的数据
4.1 Schema设计原则
4.2 设计电子商务数据模型
4.2.1 产品与分类
4.2.2 用户与订单
4.2.3 评论
4.3 具体细节:数据库、集合与文档
4.3.1 数据库
4.3.2 集合
4.3.3 文档与插入
4.4 小结
第5章 查询与聚合
5.1 电子商务查询
5.1.1 产品、分类与评论
5.1.2 用户与订单
5.2 MongoDB查询语言
5.2.1 查询选择器
5.2.2 查询选项
5.3 聚合指令
5.3.1 根据用户对评论进行分组
5.3.2 根据地域对订单应用MapReduce
5.4 详解聚合
5.4.1 max()与min()
5.4.2 distinct
5.4.3 group
5.4.4 map-reduce
5.5 小结
第6章 更新、原子操作与删除
6.1 文档更新入门
6.2 电子商务数据模型中的更新
6.2.1 产品与分类
6.2.2 评论
6.2.3 订单
6.3 原子文档处理
6.3.1 订单状态变迁
6.3.2 库存管理
6.4 具体细节:MongoDB的更新与删除
6.4.1 更新类型与选项
6.4.2 更新操作符
6.4.3 findAndModify命令
6.4.4 删除
6.4.5 并发性、原子性与隔离性
6.4.6 更新性能说明
6.5 小结
第三部分 精通MongoDB
第7章 索引与查询优化
7.1 索引理论
7.1.1 思想实验
7.1.2 核心索引概念
7.1.3 B树
7.2 索引实践
7.2.1 索引类型
7.2.2 索引管理
7.3 查询优化
7.3.1 识别慢查询
7.3.2 分析慢查询
7.3.3 查询模式
7.4 小结
第8章 复制
8.1 复制概述
8.1.1 为什么复制很重要
8.1.2 复制的使用场景
8.2 副本集
8.2.1 配置
8.2.2 复制的工作原理
8.2.3 管理
8.3 主从复制
8.4 驱动与复制
8.4.1 连接与故障转移
8.4.2 写关注
8.4.3 读扩展
8.4.4 标签
8.5 小结
第9章 分片
9.1 分片概述
9.1.1 何谓分片
9.1.2 分片的工作原理
9.2 示例分片集群
9.2.1 配置
9.2.2 写入分片集群
9.3 分片集群的查询与索引
9.3.1 分片查询类型
9.3.2 索引
9.4 选择分片键
9.4.1 低效的分片键
9.4.2 理想的分片键
9.5 生产环境中的分片
9.5.1 部署与配置
9.5.2 管理
9.6 小结
第10章 部署与管理
10.1 部署
10.1.1 部署环境
10.1.2 服务器配置
10.1.3 数据的导入与导出
10.1.4 安全
10.2 监控与诊断
10.2.1 日志
10.2.2 监控工具
10.2.3 外部监控应用程序
10.2.4 诊断工具(mongosniff、bsondump)
10.3 维护
10.3.1 备份与恢复
10.3.2 压紧与修复
10.3.3 升级
10.4 性能调优
10.4.1 为提升性能检查索引和查询
10.4.2 添加内存
10.4.3 提升磁盘性能
10.4.4 水平扩展
10.4.5 寻求专业帮助
10.5 小结
附录A 安装
附录B 设计模式
附录C 二进制数据与GridFS
附录D 在PHP、Java与C++中使用MongoDB
附录E 空间索引
章节摘录
版权页: 插图: 有了充足的内存,所有使用中的数据文件最终都会被加载到内存里。当那块内存发生改变时,比如执行写操作时,那些改变会被操作系统异步地刷到磁盘上,而写操作很快,是直接发生在内存里的。数据完全装入内存是最为理想的状态,因为磁盘访问的数量会降到最低程度。但如果使用中的数据集无法全部装入内存,就该出现页错误了。也就是说操作系统会频繁访问磁盘,大大减缓读写操作。最坏的情况下,数据大小远远大于可用内存,这时任何读写操作的数据都必须到磁盘上做页交换。这种情况称为颠簸(thrashing),会导致性能严重下滑。 还好这种情况相对容易避免。最起码要保证索引都能放人内存;对于为何避免创建无用索引如此重要,这就是原因之一。拥有额外的索引,就会要求更多的内存来维护那些索引。同样道理,每个索引应该只包含它需要的键:有时会用到三键复合索引,但请注意它要比简单的单键索引占用更多的空间。 理想情况下,索引和使用中的数据集都能放入内存。但评估部署时需要有多少内存并非易事。你可以通过查看stats命令的结果来了解总的索引大小。但要找到工作集(working set)大小却没这么容易,因为每个应用程序都不一样。工作集通常是查询与更新的全部数据的子集。举例来说,假设你有100万用户,只有一半是活跃用户,那么工作集就是用户集合的一半大小。如果全部都是活跃用户,那么工作集就等于整个数据集。 在第10章,我们会重温工作集的概念,了解诊断硬件相关性能问题的具体手段。就目前而言,只需知道添加新索引有潜在的成本,关注索引与工作集大小与内存的比率,这能帮你在数据增长 时维护良好的性能。 7.1.3 B树 前文提到过,MongoDB内部使用B树来表示索引。B树无处不在,至少从20世纪70年代后期开始就流行于数据库记录和索引中。①如果你使用过其他数据库系统,那么可能已经熟知使用B树的各种情况了。这很好,你可以将之前的大多数索引相关的知识有效地利用起来。如果不太了解B树,也没关系,本节将介绍与使用MongoDB最为相关的概念。 B树有两个显著特点,并因此成为了数据库索引的理想选择。第一,它们能用于多种查询,包括精确匹配、范围条件、排序、前缀匹配和仅用索引的查询。第二,在添加和删除键的时候,它们仍能保持平衡。 我们会看到一棵简单的B树,讨论一些应该牢记在心的原则。想象有一个用户的集合,在姓氏(last name)和年龄(age)字段上创建了一个复合索引。②结果B树的抽象表述可能是图7.5这样的。
媒体关注与评论
“作者是10gen的人,对所有细节都了如指掌。读这本书,就好像跟一位领域专家对话,一切都讲得那么简洁明了,浅显易懂。所有MongoDB用户都应该看一看。”“与市面上其他同类主题的书相比,这本书是最好的。”——读者评论
编辑推荐
MongoDB是为处理大数据而生的一款面向文档的数据库,由10gen公司开发和维护。Kyle Banker的《MongoDB实战》基于MongoDB 2.0+,全面系统地讲解了设计、实现、安装和维护MongoDB的各方面内容。本书也是在大量第一手资料的基础上形成的,其权威性毋庸置疑。《MongoDB实战》篇幅适中,内容深浅得当,文字通俗易懂,再配以直观形象的插图和贴近实战的代码示例,非常适合MongoDB学习者、开发人员及管理员学习参考。
名人推荐
“作者是10en的人,对所有细节都了如指掌。读本书,就好像跟一位领域专家对话,一切都讲得那么简洁明了,浅显易懂。所有MongoDB用户都应该看一看。”“与市面上其他同类主题的书相比,这本书是最好的。” ——亚马逊读者评论
图书封面
图书标签Tags
无
评论、评分、阅读与下载