编辑推荐

适读人群:适合想深入学习MongoDB的开发人员和没有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


其他推荐