RunCommand MongoDB намного медленнее, чем прямой вызов
У меня есть две команды монго, которые, по моему мнению, должны привести к одинаковым результатам:
for(var i=0;i<1000;i++){db.test.insert({a:1}); db.getLastError({j:1, w:1});};
for(var i=0;i<1000;i++){db.test.insert({a:1}); db.runCommand({getLastError:1, j:1, w:1});};
Обе команды выполняют вставки корректно, однако вторая - примерно в 100 раз медленнее (500 мс против 45 с). Кто-нибудь знает, почему это так? Разница присутствует только тогда, когда задано {j:1}, так что, возможно, это как-то связано с некоторыми проблемами журналирования?
1 ответ
Решение
Вторая команда фактически ожидает фиксации журнала, тогда как первая - нет, и, следовательно, разница. При использовании помощника оболочки getLastError вы не можете передать опцию j. Это должно быть число или строка, соответствующие параметру w команде базы данных getlasterror, как описано здесь.