2014-09-19 2 views
0

У меня проблема с MongoDB sharding. Моя тестовая установка приведена ниже:Не удалось обмануть данные

1. Сервер приложений (1 сервер) -Может работать приложение.

2.MongoS & Router (1 сервер)

3.Two Осколки-Первичный осколок содержит полную БД & Вторичный осколок просто пустым.

Существует коллекция называется «DEMO», который имеет следующие данные, предоставленные

цен ниже
"_id" : ObjectId("541c2df0e4b06af824c2c046"), 
    "country" : "INDIA", 

    "deviceType" : "manu-laptop", 
    "osVersion" : "patanahi", 

    "logtime" : { 
      "logtime" : ISODate("2014-09-19T13:21:52.596Z"), 
      "logtimeStr" : "19-09-2014 06:51:52", 
      "day" : 19, 
      "month" : 9, 
      "year" : 2014, 
      "hour" : 18, 
      "min" : 51, 
      "second" : 52 
    }, 

    "countryId" : "511d0f28c3c4e5cc447c8dac" 

Есть две страны -INDIA & КИТАЯ. Я оштрафовал ключ от страны. Команда, которую я использовал, чтобы шард ключ является

db.runCommand({shardcollection:"demo.db",key:{"country" : 1}}); 

Но когда я запускаю нагрузку на Mongos он сохраняет данные только по первичному осколок и не направляет ее на второй осколок.

Вариант использования следующий: Я хочу сохранить данные ИНДИИ по 1 осколку и данные CHINA на другом осколке. Пожалуйста, помогите.

Установка завершена и работает отлично.

 --- Sharding Status --- 
    sharding version: { 
     "_id" : 1, 
     "version" : 3, 
     "minCompatibleVersion" : 3, 
     "currentVersion" : 4, 
     "clusterId" : ObjectId("541bf31a8c554f2e2d4e1ad4") 
} 
    shards: 
     { "_id" : "shard0000", "host" : "xx.xx.xx.xx:27017", "tags" : [  "INDIA" ] } 
     { "_id" : "shard0001", "host" : "xx.xx.xx.xx:27017", "tags" : [ "USA" ] } 
    databases: 
     { "_id" : "admin", "partitioned" : false, "primary" : "config" } 
     { "_id" : "demo", "partitioned" : true, "primary" : "shard0000" } 
       demo.device 
         shard key: { "country" : 1 } 
         chunks: 
           shard0001  1 
           shard0000  1 
         { "country" : { "$minKey" : 1 } } -->> { "country" : "INDIA" } on : shard0001 Timestamp(2, 0) 
         { "country" : "INDIA" } -->> { "country" : { "$maxKey" : 1 } } on : shard0000 Timestamp(2, 1) 
       demo.incoming_request_log 
         shard key: { "regionId" : 1 } 
         chunks: 
           shard0001  2 
           shard0000  3 
         { "regionId" : { "$minKey" : 1 } } -->> { "regionId" : 0 } on : shard0001 Timestamp(2, 0) 
         { "regionId" : 0 } -->> { "regionId" : 2 } on : shard0000 Timestamp(3, 1) 
         { "regionId" : 2 } -->> { "regionId" : "0" } on : shard0000 Timestamp(2, 2) 
         { "regionId" : "0" } -->> { "regionId" : "2" } on : shard0000 Timestamp(2, 4) 
         { "regionId" : "2" } -->> { "regionId" : { "$maxKey" : 1 } } on : shard0001 Timestamp(3, 0) 
         tag: INDIA { "regionId" : "0" } -->> { "regionId" : "1" } 
         tag: USA { "regionId" : "2" } -->> { "regionId" : "3" } 
     { "_id" : "demo;", "partitioned" : false, "primary" : "shard0001" } 
+0

Yo должен смотреть на тэг, основанный на sharding: http://docs.mongodb.org/manual/core/tag-aware-sharding/ –

+0

please post sh.status() - Я подозреваю, что у вас есть только один кусок, и это еще не расколото. Также следует отметить, что использование поля с двумя значениями является плохим выбором для ключа осколка, у вас может быть только 2 куска (что, если вам нужно 4 осколка для обработки трафика?), И, вероятно, в конечном итоге превысит максимальный размер куска, который имеет свои собственные последствия.Если вы просто хотите разделить запросы/записи на два разных набора данных на разных серверах, почему бы просто не использовать 2 базы данных? –

+0

Adam Comerford - это только для целей тестирования. Внедрение продукта будет отличаться. Для тестирования мне просто нужно маршрутизировать трафик по стране в назначенные осколки. – Rahul

ответ

0

1) Сколько данных у вас есть на осколке 1? Может быть, максимальный размер куска еще не достигнут, тогда нет необходимости осколки до 2 осколков. Размер блока по умолчанию - 64 МБ. 2) Вы можете указать, что вы хотите сохранить документы с определенными ключами шарда на определенном осколок, см: addShardTag (дайте осколок имя) addTagRange (назначить диапазон клавиш осколка в шард)

1

Это то, что я сделал для решения проблемно

1.I удалены все теги, используя следующие command- (Это было только тестовую среду, поэтому я не возражаю удаление)

sh.removeShardTag("shard0000", "INDIA") 

2.Removed тег из сборка тегов config db '.

3.Added свежий диапазон теги с помощью следующей command-

sh.addShardTag("shard0001", "INDIA") 

4.Added тег пастбищ

sh.addTagRange("demo.incoming_request_log", { regionId: 5 }, { regionId: 9 }, "INDIA") 

Note-я хотел, чтобы направить весь запросу shard1 где RegionId был отмеченным ключом осколка. Теперь все запросы от Mongos к демо-базе данных и incoming_request_log, в которых regionId находится между 5 и 9, отправляются в shard1, а другие - в shard0.

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