2014-09-17 2 views
0

Я понимаю, что «Hash Sharding» можно выполнить на уровне коллекции в базе данных на основе ключа передаваемой коллекции.Окладываясь на MongoDB, как насчет других коллекций?

Это гарантирует, что записи для этой коллекции распределены по всем осколкам.

Я понимаю, что происходит с одной коллекцией. Как насчет других коллекций?

  • Все ли данные всех других таблиц хранятся только в одном осколке?
  • Получается, что он реплицируется по всем осколкам?
  • Он также получает раскол и распространяется по всем осколкам?
+0

Этот вопрос принадлежит [dba.stackexchange.com] (http://dba.stackexchange.com). StackOverflow предназначен только для программирования связанных тем, например, для решения «кодовых» проблем. Другие вопросы могут быть отправлены на другие сетевые сайты stackexchange. –

ответ

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 будет свое представление о том, где он находится в этом раунде.

Смежные вопросы