Как мне настроить мой кластер Mongodb? - PullRequest
2 голосов
/ 08 июля 2011

У меня запущенная среда mongodb - 3 сегмента mongod, 1 конфигурация mongod, 1 mongos (без репликации).

Я хочу использовать mongoimport для импорта данных CSV в базу данных. У меня 105 миллионов записей, хранящихся с шагом 500 000 в 210 CSV-файлах. Я понимаю, что mongoimport является однопоточным, и я прочитал, что мне нужно запустить несколько процессов mongoimport для повышения производительности. Однако я попробовал это и не набрал скорость:

при параллельном запуске 3 моноимпортов я получал ~ 6 тыс. Вставок / сек на процесс (т.е. 18 тыс. Операций в секунду) против выполнения 1 моноимпорта, я получал ~ 20 тыс. Вставок / сек.

Поскольку эти процессы были направлены через один и тот же конфиг mongod и mongos, мне интересно, связано ли это с конфигурацией моего кластера. У меня вопрос: если я настрою кластерную конфигурацию по-другому, я достигну лучших скоростей моноимпорта? Хочу ли я больше процессов монго? Сколько процессов моноимпорта я должен запускать одновременно?

Ответы [ 2 ]

5 голосов
/ 10 июля 2011

Итак, первое, что вам нужно сделать, это «предварительно разделить» ваши куски.

Предположим, что вы уже закрыли коллекцию, в которую импортируете. Когда вы начнете «с нуля», все данные начнут поступать на один узел. Когда этот узел заполняется, MongoDB начнет «разбивать» этот узел на куски. Как только он достигнет примерно 8 фрагментов (это примерно 8x64 МБ пространства индекса), он начнет мигрировать фрагменты.

Так что, по сути, вы эффективно записываете данные в один узел, а затем этот узел замедляется, потому что он должен читать и записывать свои данные в другие узлы.

Вот почему вы не видите никакого ускорения с 3 mongoimport. Все данные все еще отправляются на один узел, и вы максимизируете пропускную способность этого узла.

Хитрость здесь в том, чтобы «предварительно разделить» данные. В вашем случае вы, вероятно, настроите его так, чтобы на каждом компьютере вы получали данные о 70 файлах. Затем вы можете импортировать эти файлы в разные потоки и повысить пропускную способность.

Джереми Заводни из Craigslist имеет разумное описание этого здесь . На сайте MongoDB есть несколько документов здесь .

1 голос
/ 09 июля 2011

Я нашел несколько вещей, которые могут помочь с массовыми загрузками.

Отложите индексы сборки (кроме той, которая нужна для ключа шарда), пока не загрузите все.

Запускайте по одной монго и моноимпорте на осколок и загружайте параллельно.

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

...