Я читал, что предварительное выделение записи может улучшить производительность, что должно быть полезно, особенно при обработке многих записей набора временных рядов.предварительное распределение записей с использованием счета
updateRefLog = function(_ref,year,month,day){
var id = _ref,"|"+year+"|"+month;
db.collection('ref_history').count({"_id":id},function(err,count){
// pre-allocate if needed
if(count < 1){
db.collection('ref_history').insert({
"_id":id
,"dates":[{"count":0},{"count":0},{"count":0},{"count":0},{"count":0},{"count":0},{"count":0},{"count":0},{"count":0},{"count":0},{"count":0},{"count":0},{"count":0},{"count":0},{"count":0},{"count":0},{"count":0},{"count":0},{"count":0},{"count":0},{"count":0},{"count":0},{"count":0},{"count":0},{"count":0},{"count":0},{"count":0},{"count":0},{"count":0},{"count":0},{"count":0},{"count":0}]
});
}
// update
var update={"$inc":inc['dates.'+day+'.count'] = 1;};
db.collection('ref_history').update({"_id":id},update,{upsert: true},
function(err, res){
if(err !== null){
//handle error
}
}
);
});
};
Я немного обеспокоен тем, что, чтобы пройти через обещание может замедлить это вниз, и, возможно, проверка счетчика каждый раз, когда бы свести на нет преимущества в производительности предварительного выделения записи.
Есть ли более эффективный способ справиться с этим?
Какая версия MongoDB вы используете .. и если MongoDB 3.0 или более новый, какой механизм хранения? Preallocation - это полезный метод оптимизации для механизма хранения MMAP, но добавляет накладные расходы для других систем хранения (например, WiredTiger), которые не поддерживают обновления на месте. – Stennie