MongoDB:有一段时间我得到的文档比我使用哈希分片键插入的文档多。使用复合分片键不会发生这种情况
MongoDB: for a while I get more documents than I inserted using hashed shard keys. This don't happen using compounds shard keys
我在 Ubuntu 服务器 14.04 64 位操作系统上使用 MongoDB 3.2.15 和 python 以及 pymongo 驱动程序。
我使用批量方法插入的文档类似于以下内容:
{
"_id" : ObjectId("59d7d59bf1566a1f541d42d5"),
"monitor" : 5,
"tiempo" : 1,
"senial1" : {
"0" : 0.164844,
"1" : 0.325524
}
"senial2" : {
"0" : 0.569832,
"1" : 0.128563
}
}
每个批量插入 100 个此类文档。当一个批量的执行结束时,另一个批量开始。执行 43200 个批处理,所以我总共插入了 4320000 个文档。
由于我使用的是分片集群作为测试,同样的过程执行两次。
我第一次为字段 id_ 使用散列分片键。
我第二次使用复合分片键,用于 monitor 和 tiempo 字段。
我的问题:
马上执行完43200个批量我用count()方法看是否所有的文件都插入正确了。当我使用复合分片键时,我得到了正确的结果:4320000 个文档。但是当我使用分片键散列时,结果是 4328872 个文档。几分钟后,我又开始使用 count() 方法,这次文档的数量是正确的。
为什么 'count' 方法计算的文档比我插入的文档多?为什么我对一种类型的密钥有此行为,而对另一种类型的密钥却没有?
非常感谢。
注意:我的集群有 2 个分片副本集。
与复合键相比,散列键分布更均匀,尤其是基数较低的键。
Balancer 在某个时候开始迁移块,因此在迁移期间您在两个分片上都有相同的文档。
https://docs.mongodb.com/manual/sharding/#sharding-strategy 和相关文档对幕后发生的事情有很好的解释。
我在 Ubuntu 服务器 14.04 64 位操作系统上使用 MongoDB 3.2.15 和 python 以及 pymongo 驱动程序。 我使用批量方法插入的文档类似于以下内容:
{
"_id" : ObjectId("59d7d59bf1566a1f541d42d5"),
"monitor" : 5,
"tiempo" : 1,
"senial1" : {
"0" : 0.164844,
"1" : 0.325524
}
"senial2" : {
"0" : 0.569832,
"1" : 0.128563
}
}
每个批量插入 100 个此类文档。当一个批量的执行结束时,另一个批量开始。执行 43200 个批处理,所以我总共插入了 4320000 个文档。
由于我使用的是分片集群作为测试,同样的过程执行两次。 我第一次为字段 id_ 使用散列分片键。 我第二次使用复合分片键,用于 monitor 和 tiempo 字段。
我的问题: 马上执行完43200个批量我用count()方法看是否所有的文件都插入正确了。当我使用复合分片键时,我得到了正确的结果:4320000 个文档。但是当我使用分片键散列时,结果是 4328872 个文档。几分钟后,我又开始使用 count() 方法,这次文档的数量是正确的。 为什么 'count' 方法计算的文档比我插入的文档多?为什么我对一种类型的密钥有此行为,而对另一种类型的密钥却没有?
非常感谢。
注意:我的集群有 2 个分片副本集。
与复合键相比,散列键分布更均匀,尤其是基数较低的键。
Balancer 在某个时候开始迁移块,因此在迁移期间您在两个分片上都有相同的文档。
https://docs.mongodb.com/manual/sharding/#sharding-strategy 和相关文档对幕后发生的事情有很好的解释。