Каковы лучшие практики для импорта больших наборов данных в MongoDB? - PullRequest
4 голосов
/ 25 мая 2010

Мы просто проводим тестовый запуск MongoDB и настроили приложение Rails 3 с Mongoid. Каковы лучшие практики для вставки больших наборов данных в MongoDB? Чтобы конкретизировать сценарий: скажем, у меня есть модель книги и я хочу импортировать несколько миллионов записей из файла CSV.

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

Отредактировано, чтобы добавить: я предполагаю, что это имеет огромное значение, включает ли импортируемые данные ассоциации или предполагается, что они входят только в одну модель. Любые комментарии по любому сценарию приветствуются.

Ответы [ 2 ]

2 голосов
/ 25 мая 2010

MongoDB поставляется с инструментами импорта / экспорта, которые анализируют данные в формате JSON.

Если у вас есть база данных в SQL, самый простой способ перенести эти данные - вывести данные SQL в виде строк JSON, а затем использовать инструмент импорта для каждой коллекции.

Это включает денормализациюи вложение / встраивание - поэтому не переносите реляционную модель в MongoDB, вам также следует рассмотреть возможность рефакторинга вашей модели данных для использования возможностей MongoDB.

Например, общая задача - объединить статьи и теги в статьи.коллекция с тегами, встроенными в массив.Сделайте это в своем скрипте экспорта, чтобы все, что видит MongoDB, это хороший чистый JSON, поступающий через импорт: -)

Вы все еще можете импортировать все свои таблицы как коллекции, но вы упускаете некоторые из истинныхсильные стороны MongoDB, делая это.

1 голос
/ 25 мая 2010

Если вы хотите добавить этот набор данных только один раз. Вы можете использовать файл db/seed.rb. Вы можете прочитать свой CSV и сгенерировать весь документ.

Если вы хотите сделать это много раз, вы можете сделать бегуна или задачу.

Для задачи вам нужно определить lib/task/file.rake и сгенерировать задачу с вашим файлом, а затем снова проанализировать ее и сгенерировать все документы.

Вы можете сделать runner тоже.

Это то же самое, что и ActiveRecord.

...