Массовая загрузка MongoDB из файла JSON с несколькими объектами - PullRequest
11 голосов
/ 01 июля 2011

Я хочу выполнить массовую загрузку в MongoDB.У меня есть около 200 ГБ файлов, содержащих объекты JSON, которые я хочу загрузить, проблема в том, что я не могу использовать инструмент mongoimport, поскольку объекты содержат объекты (т.е. мне нужно использовать --jsonArray aaram), размер которого ограничен 4 МБ.

В CouchDB есть API Bulk Load API, где я могу просто написать скрипт и использовать cURL для отправки запроса POST для вставки документов, без ограничений по размеру ...

Есть ли что-то подобноеэто в MongoDB?Я знаю, что есть Sleepy, но мне интересно, справится ли это со вставкой массива JSON ..?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 04 июля 2011

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

Когда ваши данные не соответствуют 1: 1 тому, что ожидают утилиты импорта, почти всегда проще всего написать одноразовый скрипт импорта на языке, подобном Ruby или Python. Пакетные вставки значительно ускорят импорт, но не делайте слишком больших пакетов, иначе вы получите ошибки (максимальный размер вставки в 1.8+ составляет 16 МБ). В драйвере Ruby пакетную вставку можно выполнить, просто передав массив хэшей методу insert вместо одного хеша.

Если вы добавите пример ваших данных в вопрос, я смогу вам помочь.

2 голосов
/ 04 июля 2011

Хорошо, в основном кажется, что нет действительно хорошего ответа, если я не напишу свой собственный инструмент в чем-то вроде Java или Ruby для передачи объектов (ме, усилия) ... Но это настоящая боль, поэтому вместо этого я решил просто разделитьфайлы размером до 4 МБ ... Просто написал простой сценарий оболочки с использованием split (обратите внимание, что мне пришлось разбивать файлы несколько раз из-за ограничений).Я использовал команду split с -l (номера строк), чтобы в каждом файле было по x строк.В моем случае каждый объект Json был около 4 КБ, поэтому я только угадал размеры строк.

Для всех, кто хочет это сделать, помните, что разделение может создавать только 676 файлов (26 * 26), поэтому вам нужно убедиться, что в каждом файле достаточно строк, чтобы не пропустить половину файлов.В любом случае поместите все это в старый добрый bash-скрипт, используйте импорт монго и дайте ему поработать в одночасье.Самое простое решение IMO и нет необходимости вырезать и смешивать файлы и анализировать JSON в Ruby / Java или чем-то еще.

Скрипты немного нестандартны, но если кто-то захочет, просто оставьте комментарий и плохой пост.

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