亲爱的学员:
你好,在回答学员问题的过程中,我发现大家对于第二章的事务处理, 特别是隔离级别,以及第三章的分片集群有相对较多的问题。在这里我给大家推荐一些补充的学习材料可以从另外一个角度来加深一些这些概念的理解。
MongoDB 事务的原子性
https://docs.mongodb.com/manual/core/write-operations-atomicity/
MongoDB 事务的隔离级别和一致性模型
https://docs.mongodb.com/manual/core/read-isolation-consistency-recency/
如果英文不太感冒,在 MongoDB 中文网站上有不少内容,比如分片相关的:
http://www.mongoing.com/?s= 分片集群
课件和 Demo 地址
https://gitee.com/geektime-geekbang/geektime-mongodb-course
作者回复: 4.2 版本的驱动程序会自动在换主节点的时候重试读写操作。假设你有三台复制集群节点 A,B,C, A为主节点。你只需要执行以下操作,你的程序应该可以持续运行 1) 确定客户端应用使用的是最新版驱动程序 2) 停止C节点,并升级到4.2.2,然后启动服务 3) 停止B节点,并升级到4.2.2,然后启动服务 4) 停止A节点,并升级到4.2.2,然后启动服务
作者回复: 一个ip地址本来就可以对应多个域名。 多个域名指向同一个IP是很常见的。Apache的 Virtual Host就是这个道理。 在这里,因为我们用一台机器部署多个mongodb实例,我们给每个实例用了一个不同的域名,所以就看到了一个ip对应多个域名。
作者回复: 对。使用dump/restore 可以加速这个过程。如果不用dump也是可以,时间需要更多点,但是也是可以完成的。
作者回复: 其实比较简单的,假设ABC三个节点,A是当前主节点,大致可以按照以下步骤: - 停止C的mongo服务,升级C的mongodb binary文件 - 重启C服务,等待集群稳定 - 停止B的mongo服务,升级B的mongodb binary文件 - 重启B服务,等待集群稳定 - 停止A,升级A的mongodb binary文件 - 重启A,等待集群稳定 这里有个中文翻译 http://www.mongoing.com/docs/release-notes/3.0-upgrade.html
作者回复: 假设ABC三个节点,A是当前主节点,以下就是步骤: - 停止C服务,升级C的mongodb binary文件 - 重启C服务,等待集群稳定 - 停止B服务,升级B的mongodb binary文件 - 重启B服务,等待集群稳定 - 停止A服务,升级A的mongodb binary文件 - 重启A服务 很简单。
作者回复: 默认只需要配路由节点就可以。副本集切换是透明的。
作者回复: 只会重试一次, 会一直等到primary选举成功才会试。如果30秒还没选出来,这个写操作就失败了。 30秒选不出来,这个大概率集群出故障了。
作者回复: 已经录制,正在等排期发布
作者回复: 谢谢建议!
作者回复: MongoDB采用的是B+树。