我正在使用 Sharded Collection 和 forloop 测试 MongoDB Sharding 以插入大约 1M 的文档以查看拆分和移动的工作原理。
我很惊讶在几个文件之后 MongoDB 开始分割块(远在 64MB 之前),
在 1M(和一些)插入的末尾,我有这些统计数据:
mongos> db.users.getShardDistribution()
Shard rs0 at rs0/mongod00.local.net:2000,mongod01.local.net:2001,mongod02.local.net:2002
data : 84.76MiB docs : 1010010 chunks : 9
estimated data per chunk : 9.41MiB
estimated docs per chunk : 112223
Totals
data : 84.76MiB docs : 1010010 chunks : 9
Shard rs0 contains 100% data, 100% docs in cluster, avg obj size on shard : 88B
为什么 MongoDB 创建包含 85MB 的集合的 9 个块?
我没有更改默认块大小参数:
mongos> db.settings.findOne()
{ "_id" : "chunksize", "value" : 64 }
谢谢,
最大限度。
进程控制何时发生自动拆分(
mongos
您也可以预拆分和手动拆分 )。他们使用的启发式方法比我要描述的要复杂一些,但您可以将其用作粗略指南:因此,如果您插入了足够的数据来找到有效的拆分点,您将在 32MB 标记之前看到拆分(文档数量是拆分的有效理由,它与大小无关)。
如果您不希望发生这种情况,您可以启动
mongos
您将使用该--noAutoSplit
选项写入数据,或者您可以在配置服务器关闭的情况下运行(这意味着尝试时所有拆分都会失败,因为元数据是只读的) . 通常,不建议将其用于生产,但有时可能需要用于测试目的。