本书为没有MongoDB 或者NoSQL经验的开发者编写
本书分三部分通过大量的实例代码介绍了MongoDB数据库底层的实现以及大型互联网Web项目数据库设计原则。第一部分对MongoDB进行了整体介绍,并介绍了实际的开发例子,另外还介绍了JavaScript shell和Ruby驱动。第二部分通过逐步实现一个电商数据模型和实现必要的CRUD操作来详细介绍了MongoDB的文档数据模型、查询语言和CRUD(新增、读取、更新和删除)操作。本书的最后部分从数据库专家的角度来看待MongoDB,介绍了数据库的性能、部署、容错和伸缩性等所有的知识。
本书适合想深入学习MongoDB的开发人员,主要关注MongoDB数据库。
Kyle Banker在MongoDB开发团队之后,就职于一家创业公司。
Peter Bakkum就职于MongoDB企业版开发团队。
Shaun Verch 就职于MongoDB核心服务器团队。
Doug Garrett是MongoDB大数据分析创新大奖的获得者;软件架构师。
Tim Hawkins是Yahoo欧洲搜索工程部门的领导。
学习、实践和开发MongoDB的完美手册
—Jeet Marwah Acer Inc.
MongoDB数据库开发和数据建模学习的必读书籍
—Hernan Garcia Betterez Inc.
提供了MongoDB学习必备的详细知识。
—Gregor Zurowski 独立软件开发顾问
太棒了,MongoDB的精华知识
—Hardy Ferentschik Red
目录
第一部分 入门 1
第1章 全新Web数据库 3
1.1 为互联网而生 5
1.2 MongoDB键特性 5
1.2.1 文档数据模型 5
1.2.2 ad hoc查询 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.2 JavaScript shell 15
1.3.3 数据库驱动 15
1.3.4 命令行工具 16
1.4 为什么是MongoDB? 17
1.4.1 MongoDB与其他数据库对比 17
1.4.2 使用场景和部署 20
1.5 提示和限制 22
1.6 MongoDB历史 23
1.7 其他资源 25
1.8 总结 25
第2章 通过JavaScript shell操作MongoDB 27
2.1 Diving into the深入MongoDB shell 28
2.1.1 启动shell 28
2.1.2 数据库、集合和文档 28
2.1.3 插入和查询 29
2.1.4 更新文档 31
2.1.5 删除数据 35
2.1.6 shell的其他特性 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章 编写代码操作MongoDB 48
3.1 通过Ruby lens连接MongoDB 49
3.1.1 安装与连接 49
3.1.2 Ruby里插入文档数据 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.1 schema设计原则 67
4.2 设计电商网站数据模型 69
4.2.1 schema基础知识 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.2 MongoDB的查询语言 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 $project 120
6.3.2 $group 121
6.3.3 $match、$sort、$skip、$limit 123
6.3.4 $unwind 123
6.3.5 $out 124
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.3 allowDiskUse 选项 134
6.5.4 聚合光标选项 134
6.6 其他聚合功能 135
6.6.1 .count( )和.distinct( ) 135
6.6.2 map-reduce 136
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.3 findAndModify命令 169
7.4.4 删除 169
7.4.5 并发、原子性和隔离 170
7.4.6 更新性能注意事项 171
7.5 复习更新操作符 172
7.6 总结 173
第三部分 精通MongoDB 175
第8章 索引与查询优化 177
8.1 索引理论 177
8.1.1 精心策划的实验 178
8.1.2 核心索引概念 181
8.1.3 B-树 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.3 MongoDB文本搜索与专业搜索引擎 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 可拔插存储引擎API 246
10.2 WiredTiger 248
10.2.1 切换到WiredTiger 248
10.2.2 迁移数据到WiredTiger 249
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.2 mongos路由:路由操作 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.1 mongodump和mongorestore 350
13.3.2 基于数据文件的备份 351
13.3.3 MMS备份 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.2 32位和64位 369
A.2 Linux下安装MongoDB 369
A.2.1 使用预编译二进制文件安装 369
A.2.2 使用包管理器 370
A.3 Mac OS X下安装MongoDB 370
A.3.1 预编译二进制版本 370
A.3.2 使用包管理器 371
A.4 Windows下安装MongoDB 372
A.5 从源码编译MongoDB 373
A.6 故障排除 373
A.6.1 错误的架构 373
A.6.2 不存在的数据目录 374
A.6.3 缺少权限 374
A.6.4 未绑定端口 374
A.7 基本配置选项 374
A.8 安装Ruby 376
A.8.1 Linux和Mac OS X 376
A.8.2 Windows 376
附录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 存储MD5 389
C.2 网格文件 390
C.2.1 Ruby中的GridFS 391
C.2.2 使用mongofiles操作GridFS 393
数据库是信息时代的基石。与Atlas(微软1998年发明的Ajax技术)很像,它们默默无闻地支持着我们使用的数字世界。一定要记住,我们的数字交互从评论到推特(美国的微博)搜索和排序,本质上都是与数据库交互。
这种基本的但是隐藏的功能,让我通常对数据库保留一份敬意,与我们穿过悬索桥的感觉不同,通常我们会对汽车保留一份敬畏。
数据库有许多种形式。书籍的索引以及目录卡片都是数据库排序的一种形式,正如为过去Perl程序员设计的特别结构化文本文件。可能现在最著名的就是复杂的关系型数据库,它们构成了当今世界软件的基础。这些关系型数据库,以及它们的第三范式和SQL接口,仍然稳定地运行着。
在从事Web开发工作几年后,我就迫切想寻找关系型数据库的替代品。当我们看到MongoDB以后,真是欣喜若狂。我喜欢用类JSON的数据结构来表示数据的想法。JSON非常简单、直观,而且易于阅读。MongoDB也使用了JSON语言来构建查询,利于新数据库的使用和推广。高级特性如易于复制和分片使得MongoDB更加强大。到目前为止,我已经基于MongoDB构建了一些应用,体验到它的简便性,我已经彻底“路转粉”爱上它了。
好事多磨。经历许多坎坷,我加入了10gen,一家专门领导开源数据库开发的公司。这两年间,我参与了许多客户端驱动的开发和改进工作,与许多客户公司合作。这些经历让我收获颇多,我也希望把一些宝贵的经验在本书中与大家分享。
作为持续不断开发的软件产品,MongoDB仍然不够完美,还在持续完善。但是,MongoDB集群已经成功支持了成千上万的大大小小应用,而且日益成熟。许多开发者已经听说过它的强大之处,不仅可以创造奇迹,而且能够带来快乐。希望它也可以改变你的工作。
这是《MongoDB实战》的第二版,我希望你能享受阅读与学习本书的过程。
Kyle Banker
读完《MongoDB实战(第二版)》,我感觉自己对 MongoDB 的掌握程度简直是脱胎换骨!这本书最大的优点在于它的循序渐进和内容全面。从最开始的安装配置、基本 CRUD 操作,到后面更复杂的特性,比如全文搜索、地理空间索引、以及 GridFS 等,几乎涵盖了 MongoDB 的所有重要功能。而且,作者在讲解每个功能时,都会提供大量的代码示例,并且这些示例都非常贴合实际开发需求,我可以直接复制粘贴到自己的项目中进行测试和学习。让我印象深刻的是,书中关于安全性方面的讲解,包括用户认证、权限管理、以及数据加密等,这些都是构建安全可靠的数据库应用不可或缺的部分,之前我在这方面总是感觉有些模棱两可,看完这本书后,心里就有了底。另外,它还涉及到了 MongoDB 的一些高级主题,例如事务和变更数据捕获(CDC),这让我对 MongoDB 的能力有了更全面的认知。总而言之,这本书对于任何想要熟练掌握 MongoDB 的开发者来说,都是一本不可多得的宝藏。
评分这本书绝对是我最近读过的最令人兴奋的技术书籍之一!《MongoDB实战(第二版)》的作者在技术深度和讲解清晰度上都达到了一个非常高的水平。我特别欣赏书中对 MongoDB 驱动程序使用的细致阐述,它不仅介绍了不同语言的驱动程序 API,还给出了很多使用技巧和最佳实践,这对于我在应用程序中集成 MongoDB 提供了极大的便利。比如,书中关于连接池管理和批量操作的讲解,对于提升应用程序的性能非常有帮助。另外,它对 MongoDB 的监控和故障排除也进行了深入的探讨,介绍了常用的监控工具和排查思路,这对于确保数据库的稳定运行至关重要。我印象特别深刻的是,书中关于升级和迁移策略的部分,详细讲解了如何安全平滑地升级 MongoDB 版本,以及如何进行数据迁移,这对于我们实际运维工作非常有指导意义。总而言之,这本书的实用性和前瞻性都非常强,让我对 MongoDB 的理解更加立体和深入,绝对是一本值得反复研读的经典之作。
评分作为一名有几年开发经验的老兵,我一直在寻找一本能够帮助我深入理解 MongoDB 内部机制的书籍。《MongoDB实战(第二版)》在这方面做得相当出色。它并没有停留在表面 API 的介绍,而是花了相当大的篇幅去讲解 MongoDB 的架构设计、存储引擎(特别是 WiredTiger)的工作原理、以及索引的内部实现机制。这一点对于我来说尤为重要,因为理解了这些底层原理,我才能在遇到性能问题时,有针对性地进行调优,而不是盲目地尝试各种方法。书中对于复制集和分片集群的讲解也非常透彻,不仅介绍了它们的配置和管理,还深入剖析了它们的工作流程和高可用性保障机制。我特别欣赏作者在讲解过程中,常常会将理论知识与实际运维场景相结合,比如如何应对节点故障、如何进行扩容缩容等,这些都是在实际工作中经常会遇到的问题,能够直接帮助我们规避风险。这本书的深度和广度都达到了一个新的高度,让我对 MongoDB 的理解上升到了一个全新的层次,绝对是数据库工程师的案头必备。
评分我是一名长期使用关系型数据库的开发者,在转向 NoSQL 领域时,MongoDB 成为了我的首选。最初接触《MongoDB实战(第二版)》时,我有些担心它的内容会过于理论化,或者与我原有的关系型数据库思维方式格格不入。然而,这本书的讲解方式完全打消了我的顾虑。作者非常善于用通俗易懂的语言,解释 MongoDB 的核心概念,并且经常会将 MongoDB 的特性与关系型数据库进行对比,这对于我这样的“老派”开发者来说,非常有帮助。比如,在讲解文档模型时,作者会分析文档嵌套的优势和劣势,以及与表连接的区别,让我能够更好地理解 MongoDB 的数据存储逻辑。书中对于查询优化和索引选择的建议也十分实用,让我能够写出更高效的查询语句,避免了常见的性能陷阱。而且,这本书还涉及到了 MongoDB 在不同场景下的应用,例如大数据分析、实时推荐系统等,这拓宽了我的视野,让我看到了 MongoDB 更广阔的应用前景。
评分这本书真的是一次令人惊喜的发现!我之前一直对 MongoDB 感觉有点陌生,虽然知道它很强大,但在实际应用中总有些磕磕绊绊。拿到《MongoDB实战(第二版)》后,我立刻被它深入浅出的讲解方式吸引了。作者并没有直接抛出复杂的概念,而是从最基础的安装部署开始,一步步引导读者熟悉 MongoDB 的核心功能。我尤其喜欢其中关于数据建模的部分,它通过大量实际案例,将抽象的概念具象化,让我对如何设计高效的 MongoDB 数据结构有了全新的认识。比如,在处理一对多关系时,书中详细对比了嵌入式文档和引用数组的优缺点,并给出了具体的场景建议,这对于避免日后出现性能瓶颈至关重要。而且,书中对聚合管道的讲解也让我受益匪浅,它提供了很多实用的聚合操作示例,让我能够更灵活地对数据进行查询和分析,不再局限于简单的 CRUD 操作。整体感觉就是,这本书不仅仅是理论的堆砌,更是实战经验的结晶,能够帮助我快速掌握 MongoDB 的核心技能,解决实际开发中遇到的难题。
评分mongodb 3.0的,还不错。
评分翻译很差,好多地方一看就是翻译软件翻的。
评分此书翻译的太渣了,买之前忘记看评论了。
评分书中自有颜如玉,书中自有黄金屋
评分太坏了吧,还说什么是活动,买完就降价
评分图书券,福利慢慢,不错!希望可以学到很多
评分书中自有颜如玉,书中自有黄金屋
评分正版慢慢看
评分哈哈哈哈哈哈哈/哈哈哈哈哈哈哈哈哈哈哈
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.teaonline.club All Rights Reserved. 图书大百科 版权所有