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

MongoDB: mongoimport теряет соединение при импорте больших файлов

У меня есть некоторые проблемы с импортом файла JSON на локальный экземпляр MongoDB. JSON был создан с использованием mongoexport и выглядит следующим образом. Нет массивов, нет хардкорных гнезд:

{"_created":{"$date":"2015-10-20T12:46:25.000Z"},"_etag":"7fab35685eea8d8097656092961d3a9cfe46ffbc","_id":{"$oid":"562637a14e0c9836e0821a5e"},"_updated":{"$date":"2015-10-20T12:46:25.000Z"},"body":"base64 encoded string","sender":"[email protected]","type":"answer"}
{"_created":{"$date":"2015-10-20T12:46:25.000Z"},"_etag":"7fab35685eea8d8097656092961d3a9cfe46ffbc","_id":{"$oid":"562637a14e0c9836e0821a5e"},"_updated":{"$date":"2015-10-20T12:46:25.000Z"},"body":"base64 encoded string","sender":"[email protected]","type":"answer"}

Если я импортирую файл размером 9 Мбайт с ~ 300 строк, проблем нет:

[stekhn latest]$ mongoimport -d mietscraping -c mails mails-small.json 
2015-11-02T10:03:11.353+0100    connected to: localhost
2015-11-02T10:03:11.372+0100    imported 240 documents

Но если попытаться импортировать 32 МБ файл с ~ 1300 строк, импорт не будет выполнен:

[stekhn latest]$ mongoimport -d mietscraping -c mails mails.json 
2015-11-02T10:05:25.228+0100    connected to: localhost
2015-11-02T10:05:25.735+0100    error inserting documents: lost connection to server
2015-11-02T10:05:25.735+0100    Failed: lost connection to server
2015-11-02T10:05:25.735+0100    imported 0 documents

Вот журнал:

2015-11-02T11:53:04.146+0100 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:45237 #21 (6 connections now open)
2015-11-02T11:53:04.532+0100 I -        [conn21] Assertion: 10334:BSONObj size: 23592351 (0x167FD9F) is invalid. Size must be between 0 and 16793600(16MB) First element: insert: "mails"
2015-11-02T11:53:04.536+0100 I NETWORK  [conn21] AssertionException handling request, closing client connection: 10334 BSONObj size: 23592351 (0x167FD9F) is invalid. Size must be between 0 and 16793600(16MB) First element: insert: "mails"

Я слышал о префиксе 16 МБ для документов BSON раньше, но поскольку ни одна строка в моем JSON файле больше 16 МБ, это не должно быть проблемой, правильно? Когда я делаю то же самое (32 МБ), импортирую один мой локальный компьютер, все работает нормально.

Любые идеи, что может вызвать это странное поведение?

4b9b3361

Ответ 1

Я предполагаю, что проблема заключается в производительности, любым способом, который вы можете решить:

вы можете использовать опцию mongoimport -j. Попробуйте приращение, если не работает с 4. i.e, 4,8,16, зависит от количества ядра, которое у вас есть в вашем процессоре.

mongoimport --help

-j, --numInsertionWorkers = количество операций вставки для запуска                                    (по умолчанию 1)


mongoimport -d mietscraping -c mails -j 4 < mails.json


, или вы можете разделить файл и импортировать все файлы.

Надеюсь, это поможет вам.


выглядит немного больше, это ошибка в некоторой версии https://jira.mongodb.org/browse/TOOLS-939 здесь другое решение вы можете изменить batchSize, по умолчанию 10000, уменьшить значение и тест:

mongoimport -d mietscraping -c mails < mails.json --batchSize 1