Клонирование Mongodb на VDS

PHP and Mongodb Web Development Beginner's Guide

Rubayeet Islam — «PHP and Mongodb Web Development Beginner’s Guide»

Задача. На локальной машине (Debian Wheezy) развернут проект на базе Mongodb. Нужно перенести на удаленную VDS. Изюминка: размер базы больше 5 Гб, примерно полмиллиона документов.

Сначала — чем вообще переносить. Варианта 2 — bson (mongodump/mongorestore) и json (mongoexport/mongoimport). На самом деле, есть и третий вариант — через API пообъектно, но это уж на совсем крайний случай.

Сначала — перенести 5-гигабайтный файл, bson или json, не важно (потом окажется, что важно). Пробовал по фтп, ничего хорошего не вышло. В нескольких попытках — то локальная машина еле дышит, то канал забивается, то процесс доходит до 100%, но продолжает висеть неограниченно долго (чего он висит? что ему надо? и если он не закрывается, есть ли гарантия, что передача прошла успешно?). Интересно, это фтп-серверу на относительно слабой вдс так плохо, или я что-то туплю. Казалось бы, 5 Гб — нормальный размер фильма или двд-образа.

Ладно, на этот случай есть rsync. Ставим с двух сторон, одна строка — и все там.

Теперь импорт или рестор. На локальной машине 5 Гб в оперативной памяти легко помещается, на VDS, разумеется, нет. mongorestore отлетает сразу. Похоже, ему надо весь bson в память загрузить. Хорошо, значит импорт. mongoimport работает, но на средине mongod вылетает. Странно. Несколько раз с одним результатом.

Остается написать задачу на PHP CLI, считывать json построчно через итератор и добавлять пообъектно. Мне казалось, что mongoimport именно так и должен делать — а как еще? Ну разве что без PHP.

Сейчас так и сделаю.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *