对于按 _id 分片的普通用户数据库,sh.status() 将给出如下结果:performance63m.users shard key: { \'_id\' : 1 } ...
对于按 _id 分片的普通用户数据库,sh.status() 将给出如下结果:
performance63m.users
shard key: { "_id" : 1 }
unique: false
balancing: true
chunks:
mongodb-shards-3301 1
mongodb-shards-9901 1
shard-462j3x 2
shard-tlvu1m 1
{ "_id" : { "$minKey" : 1 } } -->> { "_id" : ObjectId("668ccef5df83652ac424d9e7") } on : mongodb-shards-9901 Timestamp(2, 0)
{ "_id" : ObjectId("668ccef5df83652ac424d9e7") } -->> { "_id" : ObjectId("668ccef5df83652ac427dcea") } on : shard-tlvu1m Timestamp(3, 0)
{ "_id" : ObjectId("668ccef5df83652ac427dcea") } -->> { "_id" : ObjectId("668ccef6df83652ac42adfed") } on : mongodb-shards-3301 Timestamp(4, 0)
{ "_id" : ObjectId("668ccef6df83652ac42adfed") } -->> { "_id" : ObjectId("668ccef6df83652ac42de2f0") } on : shard-462j3x Timestamp(4, 1)
{ "_id" : ObjectId("668ccef6df83652ac42de2f0") } -->> { "_id" : { "$maxKey" : 1 } } on : shard-462j3x Timestamp(1, 4)
另一个示例是按字符串字段 country 对集合进行分片,如下所示:
flowers.users
shard key: { "country" : 1 }
unique: false
balancing: true
chunks:
shard-462j3x 1
shard-tlvu1m 4
{ "country" : { "$minKey" : 1 } } -->> { "country" : "France" } on : shard-462j3x Timestamp(2, 0)
{ "country" : "France" } -->> { "country" : "Germany" } on : shard-tlvu1m Timestamp(2, 1)
{ "country" : "Germany" } -->> { "country" : "South Korea" } on : shard-tlvu1m Timestamp(1, 2)
{ "country" : "South Korea" } -->> { "country" : "United States" } on : shard-tlvu1m Timestamp(1, 3)
{ "country" : "United States" } -->> { "country" : { "$maxKey" : 1 } } on : shard-tlvu1m Timestamp(1, 4)
但是有一个 'config.system.sessions'
集合的块信息看起来很特别,它包含一个嵌套的 _id 结构:
{ "_id" : { "id" : UUID("f1400000-0000-0000-0000-000000000000") } } -->> { "_id" : { "id" : UUID("f1800000-0000-0000-0000-000000000000") } } on : mongodb-shards-3301 Timestamp(1, 966)
{ "_id" : { "id" : UUID("f1800000-0000-0000-0000-000000000000") } } -->> { "_id" : { "id" : UUID("f1c00000-0000-0000-0000-000000000000") } } on : mongodb-shards-3301 Timestamp(1, 967)
和 min
的可变性 max
使得解析它们变得很困难,有人能解释一下为什么 的分片键 config.system.sessions
看起来如此奇怪吗?有没有什么方法可以干净利落地解析它们?
{
min: {
_id: ObjectId('668ccef6df83652ac42de2f0')
},
max: {
_id: MaxKey()
},
'on shard': 'shard-462j3x',
'last modified': Timestamp({ t: 1, i: 4 })
}
动机 :我正在编写一个脚本来自动删除分片。为此,我需要解析 min
和 max
值。这些值用于确定要移动哪些巨型块(moveChunk)。只有在移动完所有巨型块后,才能删除包含它们的分片。