编辑推荐
霍多罗夫编著的《深入学习MongoDB》分两部分,分别来自O’Reilly的《MongoDB扩展技术》与《MongoDB开发技巧50例》两书。
前一部分“MongoDB扩展技术”指导大家创建一个不断增长以满足应用程序需求的MongoDB集群,内容简明扼要,指导用户设置和使用集群存储大量数据并高效访问数据。
此外,读者还可了解如何让应用程序兼容分布式数据库系统。
第二部分“MongoDB开发技巧50例”呈现了一系列的MongoDB提示和技巧,可帮助用户解决与应用程序设计与实现、数据安全和监控有关的各种问题。
内容简介
《深入学习MongoDB》分两部分,分别对应O’Reilly公司出版的Scaling MongoDB和50 Tips and Tricks forMongoDB Developers两本书的内容。第一部分全面讲解了有关建立和使用集群的内容,不仅从应用开发人员的角度讲解了MongoDB的使用,而且从运维方面介绍了集群的管理。其中内容包括通过分片设置MongoDB集群,分片的工作原理,查询和更新数据,操作、监控和备份集群,错误处理。第二部分依次从应用设计、实现、优化、数据安全和管理方面介绍了使用MongoDB构建应用的技巧,内容包括范式化与反范式化的利弊权衡,复制组的故障恢复等。《深入学习MongoDB》适合所有MongoDB用户阅读参考。
目录
- MongoDB 扩展技术
- 第1章欢迎来到分布式计算的世界1
- 第2章理解分片5
- 2.1分割数据7
- 2.1.1分配数据8
- 2.1.2如何创建块11
- 2.2平衡14
- 2.3mongos17
- 2.4配置服务器18
- 2.5集群的构造18
- 第3章建立集群21
- 3.1选择片键23
- 3.1.1小基数片键23
- 3.1.2升序片键25
- 3.1.3随机片键26
- 3.1.4好片键27
- 3.2新老集合分片29
- 3.2.1快速起步29
- 3.2.2配置服务器29
- 3.2.3mongos30
- 3.2.4分片31
- 3.2.5数据库和集合32
- 3.3增减容量33
- 3.3.1移除分片34
- 3.3.2修改分片中的服务器35
- 第4章使用集群37
- 4.1查询39
- 4.2为什么会这样39
- 4.2.1计数39
- 4.2.2唯一索引40
- 4.2.3更新41
- 4.3MapReduce42
- 第5章管理43
- 5.1使用命令行45
- 5.1.1了解概况45
- 5.1.2配置集合46
- 5.1.3应该连接什么47
- 5.2监控47
- 5.2.1mongostat48
- 5.2.2Web管理界面48
- 5.3备份49
- 5.4关于架构的建议50
- 5.4.1创建应急站点50
- 5.4.2挖护城河50
- 5.5错误处理51
- 5.5.1分片停机51
- 5.5.2多数分片停机51
- 5.5.3配置服务器停机52
- 5.5.4mongos进程死掉52
- 5.5.5其他注意事项53
- 第6章学习资源55
- MongoDB 开发技巧50 例
- 第1章应用设计技巧65
- 1.1技巧1:速度和完整性的折中67
- 1.1.1示例:网上购物车68
- 1.1.2考虑因素69
- 1.2技巧2:适应未来的数据要范式化70
- 1.3技巧3:尽量单个查询获取数据71
- 1.3.1示例:博客71
- 1.3.2示例:相册72
- 1.4技巧4:嵌入关联数据72
- 1.5技巧5:嵌入时间点数据73
- 1.6技巧6:不要嵌入不断增加的数据73
- 1.7技巧7:预填充数据73
- 1.8技巧8:尽可能预先分配空间74
- 1.9技巧9:用数组存放要匿名访问的内嵌数据75
- 1.10技巧10:文档要自给自足77
- 1.11技巧11:优先使用$操作符79
- 1.11.1深入了解79
- 1.11.2提高性能79
- 1.12技巧12:随时聚合80
- 1.13技巧13:编写代码处理数据完整性问题80
- 第2章实现技巧83
- 2.1技巧14:使用正确的类型85
- 2.2技巧15:用简单唯一的id替换_id85
- 2.3技巧16:不要用文档做_id86
- 2.4技巧17:不要用数据库引用86
- 2.5技巧18:不要用GridFS处理小的二进制数据87
- 2.6技巧19:处理“无缝”故障切换88
- 2.7技巧20:处理复制组失效及故障恢复88
- 第3章优化技巧89
- 3.1技巧21:尽可能减少磁盘访问91
- 3.2技巧22:使用索引减少内存占用92
- 3.3技巧23:不要到处使用索引94
- 3.4技巧24:索引覆盖查询95
- 3.5技巧25:使用复合索引加快多个查询95
- 3.6技巧26:通过建立分级文档加速扫描96
- 3.7技巧27:AND型查询要点98
- 3.8技巧28:OR型查询要点98
- 第4章数据安全性和一致性101
- 4.1技巧29:单机做日志,多机则复制103
- 4.2技巧30:坚持使用复制或日志, 或两者兼用104
- 4.3技巧31:不要信任repair恢复的数据105
- 4.4技巧32:getlasterror105
- 4.5技巧33:开发过程中一定要使用安全写入106
- 4.6技巧34:使用w参数106
- 4.7技巧35:一定要给w设置超时107
- 4.8技巧36:不要每次写入都调用fsync108
- 4.9技巧37:崩溃之后正常启动108
- 4.10技巧38:持久性服务器的瞬时备份108
- 第5章管理技巧109
- 5.1技巧39:手工清理块集合111
- 5.2技巧40:用repair压缩数据库111
- 5.3技巧41:不要改变复制组成员投票的权值112
- 5.4技巧42:无活跃节点时可重置复制组113
- 5.5技巧43:不必指定--shardsvr和--configsvr参数115
- 5.6技巧44:开发时才用--notablescan115
- 5.7技巧45:学习JavaScript116
- 5.8技巧46:在shell中管理所有服务器和数据库116
- 5.9技巧47:获得帮助117
- 5.10技巧48:创建启动文件118
- 5.11技巧49:自定义函数119
- 5.12技巧50:使用单个连接读取自身写入120
这本书介绍了如何进行集群部署 MongoDB。
把分布式部署 MongoDB的三个要素,(config server, shard, mongos)介绍的很清晰。 shard 是存储单元, config server 仅保存配置。 mongos 不保存任何数据,就是一个 router ,好比控制器,或者路由器。所有的查询,写入,管理都通过 mongos 进程来处理。
对于想用 MongoDB来搭建企业级高可用性集群的用户,可以先读一下,用来入门不错。
第一次使用MongoDB是在做网络爬虫的时候,由于需要暂存从互联网上爬下来的HTML内容等待抽取,由于该结构完全是非结构化的,于是顺理成章,我们便选用了这个当时最流行的Nosql工具。再到现在公司也局部实验性地选择Mongo,所以我也算是一个半专业的MongoDB使用者了。
但是我对MongoDB的知识却仅仅限于曾经使用SQL Server经验的迁移,以及从Mongo官方文档上的Beginner部分,了解最基本的driver for python / C# / Java,说白了做网站的逻辑无外乎就是增删改差,当然这些内容对一个开发者来说已经绰绰有余了。
但是一向赞成的学习方式是,理论优于实践,所以我是无法容忍自己到现在还不知道mongo的sharding是什么原理这种行为的。另外,由于我打算把MongoDB用到我自己的站上作为mysql的一个辅助,所以这些部署,维护等工作也通通都压到了我头上,所以看这样一本写给MongoDB的管理者的书也变得非常必要了。
全书不妨分做两部分,第一部分很出彩,图文并茂地讲解了MongoDB核心功能——分片的原理,让我们知道了到底怎么样建立片键更为合适,而这个思想是我们无法从传统的关系型数据库中获得的。另外,最后的50条mongodb的军规相对也比较受用。
我喜欢这样的书,简简单单100多页,内容却极其的翔实。其实在我看来大多数的书完全可以用100——200页来写完,读者非常容易把握住重点,也免着在一些废话上浪费时间。不过这却要求作者有着比较好的语言概括和表达能力以及对书的受众有着一个比较清晰的定位。