2014-09-30 5 views
0
var docs = []; 

server.on('add', function(item){ 
    docs.push(item); 
}); 

setInterval(function(){ 
    save(docs); 
}, 3000); 

var save = function(array) { 
    var items = array.slice(0); // copy array 
    array.length = 0; // clear array 

    mongodb.insert(items, function(){ 
     // ... 
    }); 
}; 

Я хотел бы сохранить документы в ОЗУ, а затем сохранить в mongodb. Безопасен ли этот код?node.js безопасность асинхронного массива

Сервер Mongodb находится в ЕС, сервер приложений находится в США. В базу добавляется 2-3 тыс. Единиц в секунду. Я хотел бы уменьшить количество соединений. Мой вопрос: возможно, что во время сохранения базы будет изменяться переменная (в 'add')

+0

Безопасно, в каком отношении? Кстати, почему бы вам просто не вставить их напрямую? – Bergi

ответ

-1

Это зависит от погоды mongodb.insert(docs); выполняет операцию для всех элементов за один раз. Если он вызывает обратный вызов после каждого вставленного элемента, ваш код небезопасен (поскольку ваш массив будет очищен после первого вставленного элемента).

Если, однако, операция является синхронной для всех элементов, тогда ваш код должен быть безопасным.

+0

Я изменил свой код. Это хорошо? – Sannin

+0

№. Массив никогда не был * очищен *, он был заменен пустым массивом. – Bergi

+0

@ Саннин, да, ваша последняя версия кода должна быть в порядке – mihai

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