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 МБ), импортирую один мой локальный компьютер, все работает нормально.
Любые идеи, что может вызвать это странное поведение?
Ответы
Ответ 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