2015-05-20 6 views
3

Мне интересно, как различные запросы зависят от производительности. Я понимаю, что объемная вставка выполняется последовательно, а обычные/массивные вставки также выполняются последовательно.В чем разница между объемной вставкой и вставкой массива в операциях Mongo db

BULK INSERT

var bulk = db.items.initializeUnorderedBulkOp(); 
bulk.insert({ _id: 1, item: "abc123", status: "A", soldQty: 5000 }); 
bulk.insert({ _id: 2, item: "abc456", status: "A", soldQty: 150 }); 
bulk.insert({ _id: 3, item: "abc789", status: "P", soldQty: 0 }); 
bulk.execute({ w: "majority", wtimeout: 5000 }); 

Нормальный ВСТАВИТЬ

db.items.insert({ _id: 1, item: "abc123", status: "A", soldQty: 5000 }); 
db.items.insert({ _id: 2, item: "abc456", status: "A", soldQty: 150 }); 
db.items.insert({ _id: 3, item: "abc789", status: "P", soldQty: 0 }); 

Массив ВСТАВИТЬ

var array_insert = [ 
{ _id: 1, item: "abc123", status: "A", soldQty: 5000 } , 
{ _id: 2, item: "abc456", status: "A", soldQty: 150 } , 
{ _id: 3, item: "abc789", status: "P", soldQty: 0 } 
] ; 
db.items.insert(array_insert); 

Может ли один объяснить, белый at - разность интервалов производительности или преимуществ для вышеуказанных запросов?

ответ

3

Массовая вставка быстрее, потому что вставки отправляются одновременно. Сравните его с обычным потоком, в котором вы отправляете одну вставку, дожидаетесь ответа сервера и только затем отправляете следующую вставку.

Для того, чтобы вставить все вещи, независимо от режима (объемный и обычный), требуется столько же работы на сервер. В обычном режиме время теряется на клиенте, пока он ждет ответа сервера. Не обязательно потому, что сервер медленный. Сеть также может быть медленной.

Запросы на доработку являются обычным способом ускорения приложения, независимо от используемой базы данных. См., Например, pipelining in Redis.

+0

Спасибо. Хорошо. Но как насчет, если хранить все коллекции в массив и вставлять как отдельный элемент? будет ли это равным объему операции? – logan

+2

«будет равным» - по скорости это будет похоже. Funtionality-wise - даже не близко (у вас теперь есть другая структура данных) –

+0

Я обновил свой вопрос с помощью вставки массива – logan

Смежные вопросы