在MongoDB上对其他集合进行分片?

时间:2014-09-17 11:51:15

标签: mongodb sharding

我理解' Hash Sharding'可以基于传递的集合的键在数据库上的集合级别上完成。

这可确保该集合的记录分布在所有分片中。

我理解一个集合会发生什么。其他系列呢?

  • 是否所有其他表的所有数据都只存储在一个分片中?
  • 它是否会在所有分片中复制?
  • 它是否也会分裂并分散在所有分片中?

1 个答案:

答案 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都有自己的想法,它在循环选择中的位置。