serovvitaly
@serovvitaly

Как записать в коллекцию mongodb более 4 миллионов документов?

Ситуация
Имеется необходимость записать в коллекцию mongodb более 4 миллионов документов. Размер документа не велик, 20 полей, самое длинное поле не более 255 символов.
В какой то момент при записи очередного документа PHP выдал ошибку "Uncaught exception 'MongoCursorException' with message 'localhost:27017: Remote server has closed the connection'".
В логе mongodb появилось следующее "MapViewOfFileEx for ~/MongoDB-2.4.6/test.7 failed with error errno:8 ***. (file size is 536608768) in MemoryMappedFile::createPrivateMap Fatal Assertion 16167", из чего я сделал вывод, что БД превысила свой максимально допустимый размер (о чем говорило и подсчет суммарного размера файлов хранящих данную БД).

Вопрос
Ткните в нужном направлении. Может масштабирование, может какие то инструменты для обхода ограничений (вроде GridFS), может настройки конфигурации самой mongo.
  • Вопрос задан
  • 5693 просмотра
Решения вопроса 1
egor_nullptr
@egor_nullptr
Если у вас только 32-разрядная система, то можете попробовать шардирование. Но всё же рекомендую перейти на 64-разрядную.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
gaelpa
@gaelpa
Монга использует mmap и соотв. не позволяет работать с базами >2Gb на 32-битных системах.
Для нормальной работы требуется 64-битная платформа, ос и сама монга.
Если у вас есть только x32 и не-крошечная база, то монга просто не для вас.
Ответ написан
serovvitaly
@serovvitaly Автор вопроса
а есть альтернатива mondo? такая же шустрая, но без такого ограничения?
Ответ написан
Комментировать
serovvitaly
@serovvitaly Автор вопроса
а какое ограничение на максимальный размер базы у x64 версии?
Ответ написан
BigNull
@BigNull
попробуйте дописать в конфиг /etc/mongodb.conf
smallfiles = true
noprealloc = true

это минимизирует файлы до 512 МБ на диске
smallfiles => Use a smaller initial file size (16MB) and maximum size (512MB)

дальше сделайте
sudo -u mongodb mongod --repair --dbpath /var/lib/mongodb/

если монга не запустится, то
rm /var/lib/mongodb/mongod.lock
sudo service mongodb restart
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы