下次更新时间为:2020 年 1 月 15 日
课件和 Demo 地址
https://github.com/geektime-geekbang/geektime-mongodb-course
作者回复: mongodb使用LRU算法对缓存数据进行管理。热数据和索引数据,他们本身的特性就决定了会经常被访问。你只要提供足够大小的缓存空间,他们自然就会被mongo留在缓存里,因为被经常访问缘故。
应用程序不用自己维护缓存数据。
作者回复: 官方没有标准算法 - 根据workload的不同,硬件配置可以差别很大。你可以参考MongoDB Atlas上面有个机器大小可以支持的Connections,所以从应用要支持的连接数,可以做一个反推。但是并不考虑你的数据量,所以只是个概括估计。
https://docs.atlas.mongodb.com/connection-limits/index.html
作者回复: 1)可以,直接用shardCollection就可以
2)不会。
数据均衡可能会花很长时间(数天),这是正常的。
作者回复: 在某一个shard的主节点上进行合并排序。
“mongos 是无状态的“ - 合并排序操作不需要记状态。但是确实不是在mongos做的。
和mysql/mycat架构上类似,但是对应用基本是全透明,使用上几乎和未分片的复制集没有区别。对程序员的使用体验更好
作者回复: 如果你的查询条件里有userid,就不会用到多个分片。
如果你的查询条件里没有userid,就会发散到多个片
作者回复: 是的,分片不仅仅是数据量(我想你指的是行数),也和存储/IOPS有关系,还有内存/客户端连接数都有关系。 在课程内这一点我有明确说明。