MongoDB分片密钥为(ObjectId、ObjectId、RandomKey)。不平衡集合
我正试图用大约600万份文档来分割一个集合。以下是有关分片集群的一些详细信息MongoDB分片密钥为(ObjectId、ObjectId、RandomKey)。不平衡集合,mongodb,sharding,Mongodb,Sharding,我正试图用大约600万份文档来分割一个集合。以下是有关分片集群的一些详细信息 Mongod版本2.6.7,两个碎片,40%写入,60%读取 我的数据库收集了大约600万个文档。正常文档如下所示: { } 每个部门有多个(1,2,…100)子部门,每个子部门有多个事件。有10000个此类部门、30000个分部门和600万个活动。这个数字一直在增长 正常的读取查询包括扇区id、子扇区id。每个写入操作包括扇区id、子扇区id、uid(随机生成的唯一键)和其余数据 我尝试/考虑了以下切分键,结果如下所
我将其视为一种预期行为Astro,SectorID和SubSectorID是ObjectId类型,它包含时间戳作为前4个字节,这在本质上是单调的,并且总是指向相同的块(因此也是相同的碎片),因为它无法提供随机性,这也是您在点(b)中指出的 选择切分密钥的最佳方法是具有业务意义的密钥(与某些ObjectId字段不同),并且应该与一些哈希作为后缀混合,以确保在该密钥上进行良好的随机混合,从而实现均匀分布。如果你有一个部门名称和子部门名称,那么请尝试一下,让我们知道,如果它的工作使用 你可以考虑这个链接来选择正确的碎片键。
-$示例文档中已经显示了为切分键考虑的唯一字段。不幸的是,没有像sectorName和/或subsectorName这样的字段可以作为查询或shard keyhmmm的一部分……有时,倒过来的ObjectId字段会给它带来随机性,并避免我上面提到的问题。你为什么不试试呢。听起来不错,但这意味着我们必须在每次get调用中进行更改,以反向传递sectorid和subsectorid。
_id : ObjectId,
sector_id : ObjectId,
subsector_id: ObjectId,
.
.
.
Many event specific fields go here
.
.
created_at: Date,
updated_at: Date,
uid : 16DigitRandomKey