书海网短评:
适读人群:适合想深入学习MongoDB的开发人员和没有MongoDB或者NoSQL经验的开发者 本书为没有MongoDB或者NoSQL经验的开发者编写 本书分三部分通过大量
《MongoDB实战(第二版)》为没有MongoDB或者NoSQL经验的开发者编写
《MongoDB实战(第二版)》分三部分通过大量的实例代码介绍了MongoDB数据库底层的实现以及大型互联网Web项目数据库设计原则。第一部分对MongoDB进行了整体介绍,并介绍了实际的开发例子,另外还介绍了JavaScriptshell和Ruby驱动。第二部分通过逐步实现一个电商数据模型和实现必要的CRUD操作来详细介绍了MongoDB的文档数据模型、查询语言和CRUD(新增、读取、更新和删除)操作。《MongoDB实战(第二版)》的最后部分从数据库专家的角度来看待MongoDB,介绍了数据库的性能、部署、容错和伸缩性等所有的知识。
《MongoDB实战(第二版)》适合想深入学习MongoDB的开发人员,主要关注MongoDB数据库。
KyleBanker在MongoDB开发团队之后,就职于一家创业公司。
PeterBakkum就职于MongoDB企业版开发团队。
ShaunVerch就职于MongoDB核心服务器团队。
DougGarrett是MongoDB大数据分析创新大奖的获得者;软件架构师。
TimHawkins是Yahoo欧洲搜索工程部门的领导。
学习、实践和开发MongoDB的完美手册
—JeetMarwahAcerInc.
MongoDB数据库开发和数据建模学习的必读书籍
—HernanGarciaBetterezInc.
提供了MongoDB学习必备的详细知识。
—GregorZurowski独立软件开发顾问
太棒了,MongoDB的精华知识
—HardyFerentschikRed
目录
第一部分入门1
第1章全新Web数据库3
1.1为互联网而生5
1.2MongoDB键特性5
1.2.1文档数据模型5
1.2.2adhoc查询9
1.2.3索引9
1.2.4复制10
1.2.5加速与持久化11
1.2.6伸缩13
1.3核心服务和工具14
1.3.1核心服务器14
1.3.2JavaScriptshell15
1.3.3数据库驱动15
1.3.4命令行工具16
1.4为什么是MongoDB?17
1.4.1MongoDB与其他数据库对比17
1.4.2使用场景和部署20
1.5提示和限制22
1.6MongoDB历史23
1.7其他资源25
1.8总结25
第2章通过JavaScriptshell操作MongoDB27
2.1Divingintothe深入MongoDBshell28
2.1.1启动shell28
2.1.2数据库、集合和文档28
2.1.3插入和查询29
2.1.4更新文档31
2.1.5删除数据35
2.1.6shell的其他特性35
2.2使用索引创建和查询36
2.2.1创建大集合36
2.2.2索引和explain()38
2.3基本管理42
2.3.1获取数据库信息43
2.3.2命令如何执行44
2.4获取帮助45
2.5总结47
第3章编写代码操作MongoDB48
3.1通过Rubylens连接MongoDB49
3.1.1安装与连接49
3.1.2Ruby里插入文档数据50
3.1.3查询与光标51
3.1.4更新和删除52
3.1.5数据库命令53
3.2驱动工作原理54
3.3构建简单的应用56
3.3.1设置56
3.3.2搜集数据57
3.3.3查看存档60
3.4总结63
第二部分MongoDB应用系统开发65
第4章面向文档的数据67
4.1schema设计原则67
4.2设计电商网站数据模型69
4.2.1schema基础知识69
4.2.2用户和订单73
4.2.3评价75
4.3核心概念:数据库、集合、文档76
4.3.1数据库76
4.3.2集合79
4.3.3文档和插入83
4.4总结87
第5章构建查询88
5.1电子商务查询88
5.1.1产品、类别和评论88
5.1.2用户和订单91
5.2MongoDB的查询语言92
5.2.1查询条件和选择器92
5.2.2查询选择104
5.3总结106
第6章聚合107
6.1聚合框架概览108
6.2电商聚合例子109
6.2.1商品、类别和评价111
6.2.2用户和订单117
6.3聚合管道操作符120
6.3.1$project120
6.3.2$group121
6.3.3$match、$sort、$skip、$limit123
6.3.4$unwind123
6.3.5$out124
6.4重塑文档124
6.4.1字符串函数125
6.4.2算术运算函数126
6.4.3日期函数126
6.4.4逻辑函数127
6.4.5集合操作符128
6.4.6其他函数129
6.5理解聚合管道性能129
6.5.1聚合管道选项130
6.5.2聚合框架的explain()函数130
6.5.3allowDiskUse选项134
6.5.4聚合光标选项134
6.6其他聚合功能135
6.6.1.count()和.distinct()135
6.6.2map-reduce136
6.7总结138
第7章更新、原子操作和删除140
7.1文档更新概要141
7.1.1通过替换修改141
7.1.2通过操作符修改142
7.1.3比较两个方法142
7.1.4决定:替换与操作符143
7.2电商数据模型更新144
7.2.1商品和目录144
7.2.2评价148
7.2.3订单150
7.3原子文档处理152
7.3.1订单状态转换153
7.3.2库存管理155
7.4核心要点:MongoDB更新与删除160
7.4.1更新类型与参数选项160
7.4.2更新操作符161
7.4.3findAndModify命令169
7.4.4删除169
7.4.5并发、原子性和隔离170
7.4.6更新性能注意事项171
7.5复习更新操作符172
7.6总结173
第三部分精通MongoDB175
第8章索引与查询优化177
8.1索引理论177
8.1.1精心策划的实验178
8.1.2核心索引概念181
8.1.3B-树185
8.2索引实战186
8.2.1索引类型186
8.2.2索引管理189
8.3查询优化194
8.3.1找出慢速查询195
8.3.2检查慢速查询199
8.3.3查询模式217
8.4总结219
第9章文本搜索220
9.1文本搜索—不仅仅是模式匹配221
9.1.1文本搜索与模式匹配222
9.1.2文本搜索与网页搜索223
9.1.3MongoDB文本搜索与专业搜索引擎225
9.2下载曼宁图书类别数据228
9.3定义文本搜索索引229
9.3.1文本索引的大小230
9.3.2分配索引名字并为集合里的所有字段建立索引231
9.4基本的文本搜索232
9.4.1更复杂的搜索233
9.4.2文本搜索分数235
9.4.3根据文本搜索分数排序结果236
9.5聚合框架文本搜索237
9.6文本搜索语言240
9.6.1在索引里指定语言241
9.6.2在文档里指定语言242
9.6.3在搜索中指定语言243
9.6.4可用的语言245
9.7总结245
第10章WiredTiger与可拔插存储246
10.1可拔插存储引擎API246
10.2WiredTiger248
10.2.1切换到WiredTiger248
10.2.2迁移数据到WiredTiger249
10.3与MMAPv1对比250
10.3.1配置文件251
10.3.2插入脚本与基准测试脚本252
10.3.3插入测试结果255
10.3.4读性能测试脚本256
10.3.5读性能结果257
10.3.6测试结论259
10.4其他可拔插存储引擎的例子260
10.5高级主题261
10.5.1可拔插引擎如何工作?261
10.5.2数据结构263
10.5.3锁265
10.6总结265
第11章复制267
11.1复制概览267
11.1.1为什么复制很重要268
11.1.2复制的使用场景和限制269
11.2可复制集270
11.2.1安装270
11.2.2可复制集群工作原理277
11.2.3管理283
11.3驱动与复制291
11.3.1连接与故障转移291
11.3.2写关注点293
11.3.3读伸缩294
11.3.4标签296
11.4总结298
第12章使用分片集群扩展系统299
12.1分片集群概述300
12.1.1什么是分片集群300
12.1.2什么时候分片?301
12.2理解分片集群的组件302
12.2.1分片:存储应用程序数据303
12.2.2mongos路由:路由操作303
12.2.3配置服务器:存储元数据303
12.3在分片集群中分散数据304
12.3.1分片集群中的数据分散方式305
12.3.2分布式数据库分片306
12.3.3集合分片306
12.4构建一个例子分片集群307
12.4.1启动mongod和mongos服务器308
12.4.2配置集群310
12.4.3分片集合311
12.4.4写入数据到分片集群312
12.5分片集群查询和建立索引318
12.5.1查询路由318
12.5.2分片集群中建立索引319
12.5.3分片集群中的explain()工具320
12.5.4分片集群中聚合322
12.6选择分片键322
12.6.1非平衡写入(热点)323
12.6.2不可分割的数据块(粗粒度)324
12.6.3糟糕的定位(分片键不在查询中)325
12.6.4理想的分片键325
12.6.5设计折中(email应用)326
12.7生产环境下分片集群328
12.7.1配置328
12.7.2部署330
12.7.3维护332
12.8总结336
第13章部署与管理337
13.1硬件与配置337
13.1.1集群拓扑337
13.1.2部署环境339
13.1.3配置344
13.2监控与诊断346
13.2.1日志346
13.2.2诊断命令347
13.2.3诊断工具347
13.2.4监控服务349
13.2.5外部监控应用349
13.3备份350
13.3.1mongodump和mongorestore350
13.3.2基于数据文件的备份351
13.3.3MMS备份352
13.4安全352
13.4.1安全环境353
13.4.2网络安全353
13.4.3验证356
13.4.4可复制集验证359
13.4.5分片集群验证360
13.4.6企业安全特性360
13.5管理任务360
13.5.1数据导入和导出360
13.5.2压缩和修复361
13.5.3升级363
13.6性能故障排除363
13.6.1工作集363
13.6.2性能悬崖364
13.6.3查询交互365
13.6.4寻求专业帮助366
13.7部署检查列表366
13.8总结367
附录A安装368
A.1安装368
A.1.1生产部署368
A.1.232位和64位369
A.2Linux下安装MongoDB369
A.2.1使用预编译二进制文件安装369
A.2.2使用包管理器370
A.3MacOSX下安装MongoDB370
A.3.1预编译二进制版本370
A.3.2使用包管理器371
A.4Windows下安装MongoDB372
A.5从源码编译MongoDB373
A.6故障排除373
A.6.1错误的架构373
A.6.2不存在的数据目录374
A.6.3缺少权限374
A.6.4未绑定端口374
A.7基本配置选项374
A.8安装Ruby376
A.8.1Linux和MacOSX376
A.8.2Windows376
附录B设计模式377
B.1嵌入与引用377
B.2一对多377
B.3多对多378
B.4树379
B.5工作队列382
B.6动态特性383
B.7事务384
B.8定位与预计算385
B.9反模式386
B.9.1粗心索引386
B.9.2交错类型386
B.9.3单一集合386
B.9.4大型、深嵌文档386
B.9.5一个用户一个集合387
B.9.6不可分片集合387
附录C二进制数据和网格文件系统388
C.1简单二进制存储388
C.1.1存储缩略图389
C.1.2存储MD5389
C.2网格文件390
C.2.1Ruby中的GridFS391
C.2.2使用mongofiles操作GridFS393
数据库是信息时代的基石。与Atlas(微软1998年发明的Ajax技术)很像,它们默默无闻地支持着我们使用的数字世界。一定要记住,我们的数字交互从评论到推特(美国的微博)搜索和排序,本质上都是与数据库交互。
这种基本的但是隐藏的功能,让我通常对数据库保留一份敬意,与我们穿过悬索桥的感觉不同,通常我们会对汽车保留一份敬畏。
数据库有许多种形式。书籍的索引以及目录卡片都是数据库排序的一种形式,正如为过去Perl程序员设计的特别结构化文本文件。可能现在最著名的就是复杂的关系型数据库,它们构成了当今世界软件的基础。这些关系型数据库,以及它们的第三范式和SQL接口,仍然稳定地运行着。
在从事Web开发工作几年后,我就迫切想寻找关系型数据库的替代品。当我们看到MongoDB以后,真是欣喜若狂。我喜欢用类JSON的数据结构来表示数据的想法。JSON非常简单、直观,而且易于阅读。MongoDB也使用了JSON语言来构建查询,利于新数据库的使用和推广。高级特性如易于复制和分片使得MongoDB更加强大。到目前为止,我已经基于MongoDB构建了一些应用,体验到它的简便性,我已经彻底“路转粉”爱上它了。
好事多磨。经历许多坎坷,我加入了10gen,一家专门领导开源数据库开发的公司。这两年间,我参与了许多客户端驱动的开发和改进工作,与许多客户公司合作。这些经历让我收获颇多,我也希望把一些宝贵的经验在《MongoDB实战(第二版)》中与大家分享。
作为持续不断开发的软件产品,MongoDB仍然不够完美,还在持续完善。但是,MongoDB集群已经成功支持了成千上万的大大小小应用,而且日益成熟。许多开发者已经听说过它的强大之处,不仅可以创造奇迹,而且能够带来快乐。希望它也可以改变你的工作。
这是《MongoDB实战》的第二版,我希望你能享受阅读与学习《MongoDB实战(第二版)》的过程。
KyleBanker









