шардинг монго: определите, к какому шарду / хосту будет разрешен ключ - PullRequest
2 голосов
/ 17 января 2012

Есть ли способ получить доступ к алгоритму разрешения осколка в монго?Я знаю о db.printShardingStatus(), но это требует от меня написания собственной логики для хранения ключа.Я надеюсь на что-то вроде:

db.collection.runCommand( { getShardsvr : "my-key" } );
> {"ok" : 1 , "shardsvr" : "hostname"}

Я предполагаю, что это то, что монг делает, когда он маршрутизирует.

Для контекста я передаю очень большое количество данных в монго.Существуют сборщики данных, использующие EmMachine для потоковой передачи данных на препроцессорные машины, которые выполняют некоторую очистку данных, а затем вставляют в локальный mongod.Что я хотел бы сделать, так это для каждого фрагмента данных сборщик будет следовать стратегии разделения и передавать ее на соответствующий процессор препроцессора.Триггеры могли бы выполнить то же самое, но у монго их нет AFAIK.

Ответы [ 3 ]

3 голосов
/ 20 января 2012

Нашел самый простой способ. Информация шардинга хранится в конфиге БД (на удивление, не нашел много документации по этому вопросу). Чтобы получить информацию о чанках, используйте:

mongos> use config
switched to db config
mongos> db.chunks.find()

Примечание

Я понял это, напечатав функцию printShardStatus:

> print( db.printShardingStatus )
function (verbose) {
    printShardingStatus(this.getSiblingDB("config"), verbose);
}
2 голосов
/ 17 января 2012

Таким образом, короткий ответ да, это возможно , однако я не знаю, что вы найдете команду, которую ищете.

Sharding MongoDB довольно прост. Базы данных config содержат диапазоны ключей, и эти диапазоны указывают на правильный хост. Конфигурационные базы данных на самом деле являются обычными БД, и вы можете подключиться к ним напрямую из оболочки или драйвера. ( они обычно работают на другом порте по умолчанию, чтобы избежать случайного подключения ).

Таким образом, вы можете легко найти хост, просто взглянув на доступные диапазоны. Логика не сложнее, чем цикл for, пока ваш ключ не окажется в диапазоне.

Подробнее о ручном контроле шардинга смотрите здесь . Это даст некоторое представление о том, что происходит.

Обратите внимание, что все вышеперечисленные рекомендации являются «аннулированием гарантии». Вся концепция mongos (маршрутизатор) и конфигурационных БД состоит в том, чтобы абстрагировать эту сложность. Делая то, что вы делаете, вам придется «заглянуть под капот».

0 голосов
/ 17 января 2012

Хороший способ выяснить, для какого фрагмента данных является фрагмент данных, это использовать: объяснение () помощник оболочки.

Он покажет, на каком шарде находится ваш ключ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...