亲爱的学员:
你好,在回答学员问题的过程中,我发现大家对于第二章的事务处理, 特别是隔离级别,以及第三章的分片集群有相对较多的问题。在这里我给大家推荐一些补充的学习材料可以从另外一个角度来加深一些这些概念的理解。
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
作者回复: 如果3个字段分别有可能单独查询,并且频率都差不多,那你需要3个索引: ABC:1 B: 1 C: 1
作者回复: 课程中看上去是多棵树,那个只是帮助逻辑上理解。物理上,多键索引只用一颗B树。通过把多个字段的值拼接(类似于字符串拼接),形成一个单值,然后放到B树里。
作者回复: 这个很容易实现。比如说你是这样的文档: { _id: ObjectId(), customer_id: 101, customer_name: "Nina", emergency_contacts: [ { contact_name: 'Nina mom', contact_phone: 12345}, { contact_name: 'Nina dad', contact_phone:12346} ] } 你可以建一个这样的唯一索引: { customer_id: 1, "emergency_contacts.contact_name":1, "emergency_contacts.contact_phone":1}
作者回复: 企业版都不支持。目前只在Atlas(MongoDB云托管版本)里面有这个功能。
作者回复: 你试试 mongod -vvvvv 参数 k额能会打印更多的日志
作者回复: 有压缩机制。一个是落盘压缩,一个是index prefix 压缩
作者回复: 你需要这样的索引 {state:1, ts:1},这就是个典型的ER。 这个索引不会需要扫描千万级。只会扫描满足你条件的文档。
作者回复: 这个是正常的。删除需要删除数据和索引,是一个成本不低的操作。
作者回复: 对。每个节点都会记住自己的同步信息和offset。