Массовая загрузка MongoDB из файла JSON с несколькими объектами

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

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

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

Спасибо!

Ответ 1

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

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

Сценарии немного обычны, но если кто-то хочет, чтобы они просто оставляли комментарий и плохое сообщение.

Ответ 2

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

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

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