Подтвердить что ты не робот

MongoDB: Биллионы документов в коллекции

Мне нужно загрузить 6,6 миллиарда биграмм в коллекцию, но я не могу найти никакой информации о том, как это сделать.

Загрузка многих документов в один индекс первичного ключа займет вечность, но насколько я знаю, mongo не поддерживает эквивалент разбиения на разделы?

Помог бы помощь? Должен ли я попытаться разбить набор данных по многим коллекциям и построить эту логику в моем приложении?

4b9b3361

Ответ 1

Трудно сказать, какая оптимальная объемная вставка - это отчасти зависит от размера объектов, которые вы вставляете, и других неизмеримых факторов. Вы можете попробовать несколько диапазонов и посмотреть, что дает вам лучшую производительность. В качестве альтернативы, некоторым людям нравится использовать mongoimport, что довольно быстро, но ваши данные импорта должны быть json или csv. Очевидно, что mongodrestore, если данные находятся в формате BSON.

Mongo может легко обрабатывать миллиарды документов и может иметь миллиарды документов в одной коллекции, но помните, что максимальный размер документа составляет 16 МБ. В MongoDB много людей с миллиардами документов, и там много дискуссий о нем MongoDB Google User Group. Здесь document по использованию большого количества коллекций, которые вы, возможно, захотите прочитать, если вы передумаете и хотите иметь несколько коллекций. Чем больше у вас коллекций, тем больше у вас будет индексов, что, вероятно, не так, как вы хотите.

Здесь presentation от Craigslist при вставке миллиардов документов в MongoDB и парня Блогпост.

Это похоже на то, что sharding будет хорошим решением для вас, но типичное очертание используется для масштабирования нескольких серверов, и многие люди делают это, потому что они хотят масштабировать свои записи или они не могут сохранить свой рабочий набор (данные и индексы) в ОЗУ. Совершенно разумно начинать с одного сервера, а затем переходить на осколок или набор реплик по мере роста ваших данных, или вам нужно дополнительное избыточность и устойчивость.

Однако есть и другие пользователи, которые используют несколько mongods, чтобы обойти ограничения блокировки одного mongod с большим количеством записей. Это очевидно, но все же стоит сказать, но настройка нескольких mongod более сложна для управления, чем для одного сервера. Если ваш IO или процессор не превышен, ваш рабочий набор меньше, чем RAM, и ваши данные легко сбалансировать (довольно случайным образом распределены), вы должны увидеть улучшение (с окантовкой на одном сервере). Как FYI, есть потенциал для памяти и конкуренции IO. С 2.2 с улучшенным concurrency с блокировка db, я подозревают, что для такого развертывания будет гораздо меньше причин.

Вам нужно правильно спланировать свой ход, чтобы правильно оформить, т.е. тщательно подумайте о выборе ключа осколка. Если вы идете по этому пути, лучше всего предварительно расколоть и выключить балансировщик. Контрпродуктивно будет перемещать данные, чтобы сбалансировать вещи, что означает, что вам нужно будет решить, как разбить его. Кроме того, иногда важно разработать свои документы с идеей о том, что какое-то поле будет полезно для оштукатуривания или в качестве первичного ключа.

Вот некоторые хорошие ссылки -

Ответ 2

Вы можете абсолютно данные shard в MongoDB (который разбивает по N серверам на осколочный ключ). На самом деле, это одна из основных преимуществ. Нет необходимости делать это в своем приложении.

В большинстве случаев я настоятельно рекомендую сделать это для 6,6 миллиардов документов. По моему опыту, MongoDB работает лучше с несколькими серверами среднего уровня, а не с одним большим.