MongoDB, bulk(batch) insert
23 января, 2012
Задача: Добавить в коллекцию страниц (pages), документ только в том случае, если ещё нет документов со значением ‘url’ равным вставляемому значению. Избежать дублирования страниц.
Условие: максимально быстро.
Решение:
1. Создаём уникальный индекс на коллекцию. поле ‘url’ с удалением дублирующихся.
2. Делаем bulk insert:
$pages — массив документов, для помещения в колекцию.
‘safe’=>false — игнорировать ошибки операции (в нашем случае, дублирование ‘url’ с документами в коллекции)
//Формируем массив из кучи документов $pages[]=array ( 'url'=>$url, 'site_id'=>$site->_id, 'need_load'=>true ); ... $mongo->pages->batchInsert($pages, array('safe'=>false)); |
По моим тестам, массив из 10-20 тысяч документов вставляется за пару секунд(думаю вся коллекция находится в памяти, данных не много)