深入学习MongoDB pdf

2018年12月29日23:02:22 发表评论 201

《深入学习MongoDB》分两部分,分别来自O'Reilly的《MongoDB扩展技术》与《MongoDB开发技巧50例》两部分。

前一部分“MongoDB扩展技术”指导大家创建一个不断增长以满足应用程序需求的MongoDB集群,内容简明扼要,指导用户设置和使用集群存储大量数据并高效访问数据。此外,读者还可了解如何让应用程序兼容分布式数据库系统。

具体的主题有:

通过分片设置MongoDB集群;

在集群中查询和更新数据;

操作、监控和备份集群;

从程序设计角度,考虑如何应对分片、配置服务器或者mongos进程停止运行的情况。

遵照其中建议,你很快就可通过MongoDB构建和运行一个高效的、可预测的分布式系统。

对于用户而言,MongoDB上手很容易,但是构建使用MongoDB的应用程序时,一些棘手的问题便会接踵而来。怎样权衡范式化与反范式化?怎样处理复制组失效的情况并进行故障恢复?

第二部分“MongoDB开发技巧50例”呈现了一系列的MongoDB提示和技巧,可帮助用户解决与应用程序设计与实现、数据安全和监控有关的各种问题。

内容涵盖10gen公司工程师的实际指导,并通过以下5个话题展开了论述。

应用设计技巧:模式设计阶段应注意的问题

实现技巧:基于MongoDB编写应用程序

优化技巧:为应用提速

数据安全技巧:在不牺牲太多性能的情况下,利用复制和日志保证数据安全

管理技巧:配置MongoDB并确保其平滑运行

深入学习MongoDB 内容简介

《图灵程序设计丛书:深入学习MongoDB》分两部分,分别对应O'Reilly公司出版的Scaling MongoDB和50 Tips and Tricks for MongoDB Developers两本书的内容。第一部分全面讲解了有关建立和使用集群的内容,不仅从应用开发人员的角度讲解了MongoDB的使用,而且从运维方面介绍了集群的管理。其中内容包括通过分片设置MongoDB集群,分片的工作原理,查询和更新数据,操作、监控和备份集群,错误处理。第二部分依次从应用设计、实现、优化、数据安全和管理方面介绍了使用MongoDB构建应用的技巧,内容包括范式化与反范式化的利弊权衡,复制组的故障恢复等。《图灵程序设计丛书:深入学习MongoDB》适合所有MongoDB用户阅读参考。

深入学习MongoDB 目录

版权信息

O’Reilly Media, Inc.介绍

MongoDB扩展技术

前言

第1章 欢迎来到分布式计算的世界

什么是分片

第2章 理解分片

2.1 分割数据

2.2 平衡

2.3 mongos

2.4 配置服务器

2.5 集群的构造

第3章 建立集群

3.1 选择片键

3.2 新老集合分片

3.3 增减容量

第4章 使用集群

4.1 查询

4.2 为什么会这样

4.3 MapReduce

第5章 管理

5.1 使用命令行

5.2 监控

5.3 备份

5.4 关于架构的建议

5.5 错误处理

第6章 学习资源

MongoDB开发技巧50例

前言

第1章 应用设计技巧

1.1 技巧1:速度和完整性的折中

1.2 技巧2:适应未来的数据要范式化

1.3 技巧3:尽量单个查询获取数据

1.4 技巧4:嵌入关联数据

1.5 技巧5:嵌入时间点数据

1.6 技巧6:不要嵌入不断增加的数据

1.7 技巧7:预填充数据

1.8 技巧8:尽可能预先分配空间

1.9 技巧9:用数组存放要匿名访问的内嵌数据

1.10 技巧10:文档要自给自足

1.11 技巧11:优先使用$操作符

1.12 技巧12:随时聚合

1.13 技巧13:编写代码处理数据完整性问题

第2章 实现技巧

2.1 技巧14:使用正确的类型

2.2 技巧15:用简单唯一的id替换_id

2.3 技巧16:不要用文档做_id

2.4 技巧17:不要用数据库引用

2.5 技巧18:不要用GridFS处理小的二进制数据

2.6 技巧19:处理“无缝”故障切换

2.7 技巧20:处理复制组失效及故障恢复

第3章 优化技巧

3.1 技巧21:尽可能减少磁盘访问

3.2 技巧22:使用索引减少内存占用

3.3 技巧23:不要到处使用索引

3.4 技巧24:索引覆盖查询

3.5 技巧25:使用复合索引加快多个查询

3.6 技巧26:通过建立分级文档加速扫描

3.7 技巧27:AND型查询要点

3.8 技巧28:OR型查询要点

第4章 数据安全性和一致性

4.1 技巧29:单机做日志,多机则复制

4.2 技巧30:坚持使用复制或日志,或两者兼用

4.3 技巧31:不要信任repair恢复的数据

4.4 技巧32:getlasterror

4.5 技巧33:开发过程中一定要使用安全写入

4.6 技巧34:使用w参数

4.7 技巧35:一定要给w设置超时

4.8 技巧36:不要每次写入都调用fsync

4.9 技巧37:崩溃之后正常启动

4.10 技巧38:持久性服务器的瞬时备份

第5章 管理技巧

5.1 技巧39:手工清理块集合

5.2 技巧40:用repair压缩数据库

5.3 技巧41:不要改变复制组成员投票的权值

5.4 技巧42:无活跃节点时可重置复制组

5.5 技巧43:不必指定——shardsvr和——configsvr参数

5.6 技巧44:开发时才用——notablescan

5.7 技巧45:学习JavaScript

5.8 技巧46:在shell中管理所有服务器和数据库

5.9 技巧47:获得帮助

5.10 技巧48:创建启动文件

5.11 技巧49:自定义函数

5.12 技巧50:使用单个连接读取自身写入

深入学习MongoDB 精彩文摘

在《终结者》系列影片中,一个称作“天网”的人工智能生命向人类发动战争,年复一年地制造机器人和杀戮人类。这是大部分运维人员的梦想,当然不是指毁灭人类,而是指构建一个可以长时间运行而无需人工干预的分布式系统。遗憾的是,时至今日“天网”依旧是个幻想,因为设计好并维护其稳定持续运行,对一个分布式系统来说仍然是一件非常困难的事情。

单台数据库服务器的状态通常很简单:非启即停。但是如果再添一台服务器并把数据分开来,则这两台服务器之间会产生某种依赖。假设其中一台停机,对另一台会造成什么影响?你的应用程序能应付其中一台(或两台一起)停机的情况吗?如果两台都在运行但无法通信呢?又或是可以通信,但是速度非常非常慢呢?

随着更多节点被添加到集群里,这类问题会变得越来越多和复杂。如果集群中的一整部分无法与其他部分通信会发生什么?如果一部分机器崩溃了又会如何?如果整个数据中心都出问题了呢?突然之间,即使是创建一个备份也将变得异常困难。怎样为分布在集群中几十台机器上的TB级数据建立一致性快照,但又不会冻结正在使用这些数据的应用程序?

如果一台服务器可以满足需求,那就能避免很多问题。但是如果想要存储大量数据或者想以高于单服务器处理能力的频率来访问这些数据,则建立一个集群是不可避免的。MongoDB的优势之一正是试图帮助你解决上面列出的许多问题。不过这并不像设置单个mongod实例(这又是什么?)那么简单。本书将向你展示如何一步步建立起一个健壮的集群,以及在这个过程中将遇到的各种挑战。

分片(sharding)是MongoDB用来将大型集合分割到不同服务器(或者说一个集群)上所采用的方法。尽管分片起源于关系型数据库分区,但它(像MongoDB的大部分方面一样)完全是另一回事。

和你可能使用过的任何分区方案相比,MongoDB的最大区别在于它几乎能自动完成所有事情。只要告诉MongoDB要分配数据,它就能自动维护数据在不同服务器之间的均衡。当然,你得告诉MongoDB把服务器添加到集群中,不过只要这么做了,MongoDB同样会确保新加入的服务器分得均等的数据。

分片主要是为了实现3个简单的目标。

应用程序只要知道跟它打交道的是一个普通的mongod实例就够了。

为了实现这一目标,MongoDB自带了一个叫做mongos的专有路由进程。mongos坐镇集群大前方,对连上它的任何应用而言就像是一个普通的mongod服务器。mongos会把请求正确无误地转发到集群中的一个或一组服务器上,接着再把获得的响应拼装起来发回给客户端。这样一来,客户端无需知道与其通信的是一台服务器还是一个集群。

不过由于集群本身的特性使然,也存在一些违背该抽象的特殊情况,这些特殊情况会在第4章中提到。

任何集群都无法保证永远可用(比如出现大范围停电之类的情况),但是在合理的条件下,永远都不应该出现用户无法读写数据的情况。在功能发生明显降级前,集群应当允许尽可能多的节点失效。

图书网:深入学习MongoDB pdf

此资源下载价格为5图书币,请先
会员充值优惠:充50图书币送30图书币。(本优惠每人仅限一次)
  • 我的微信
  • 扫一扫加好友
  • weinxin
  • 微信公众号
  • 扫一扫关注
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: