我理解' Hash Sharding'可以基于传递的集合的键在数据库上的集合级别上完成。
这可确保该集合的记录分布在所有分片中。
我理解一个集合会发生什么。其他系列呢?
答案 0 :(得分:1)
除非您决定对它们进行分片,否则其他集合将驻留在单个分片(称为主分片)上。主分片设置在数据库级而不是集合中,因此特定数据库中的所有非分片集合都将具有相同的主分片。您可以在sh.status()输出中看到任何给定数据库的主数据库,如下例所示:
mongos> sh.status()
--- Sharding Status ---
sharding version: {
"_id" : 1,
"version" : 4,
"minCompatibleVersion" : 4,
"currentVersion" : 5,
"clusterId" : ObjectId("54185b2c2a2835b6e47f7984")
}
shards:
{ "_id" : "shard0000", "host" : "localhost:30000" }
databases:
{ "_id" : "admin", "partitioned" : false, "primary" : "config" }
{ "_id" : "shardTest", "partitioned" : true, "primary" : "shard0000" }
shardTest.foo
shard key: { "_id" : 1 }
chunks:
shard0000 1
{ "_id" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 } } on : shard0000 Timestamp(1, 0)
{ "_id" : "bar", "partitioned" : true, "primary" : "shard0000" }
bar.data
shard key: { "_id" : 1 }
chunks:
shard0000 1
{ "_id" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 } } on : shard0000 Timestamp(1, 0)
{ "_id" : "foo", "partitioned" : true, "primary" : "shard0000" }
foo.data
shard key: { "_id" : 1 }
chunks:
shard0000 9
在此示例中,只有一个分片(shard0000),因此它是所有数据库("primary" : "shard0000"
)的主要分区,除了config是一种特殊情况(并驻留在配置服务器上)。创建数据库时,将选择数据库的主分片。
因此,如果您只有一个分片,先创建所有数据库,然后再添加更多分片,那么在添加新分片之前创建的所有数据库都将其主要设置为第一个分片(没有其他选择) 。在您有多个分片之后创建的任何数据库最终可能会以任何分片作为主分片,实际上它是使用循环法选择的,但每个mongos
都有自己的想法,它在循环选择中的位置。