Самый быстрый способ обновления: update () или save ()? - PullRequest
2 голосов
/ 05 июня 2011

Я перебираю документы своей коллекции, делаю кое-что и обновляю базу данных. Но поскольку у меня есть все данные документа, который я обновляю, будет ли save () быстрее, чем update (), если я сделаю это таким образом?

foreach ($cursor as $doc) {
  $doc['new_field'] = 'value';
  $coll->save($doc);

  /* or (currently) */

  $coll->update(array('known_field' => $doc['known_field']), array('$set' => array('new_field' => 'value')));
}

Какой путь быстрее?

1 Ответ

2 голосов
/ 05 июня 2011

::update должен быть быстрее, потому что он обновляет только некоторые поля документа. ::save сохранить весь документ и, вероятно, будет медленнее.

В общем случае лучше использовать ::update там, где это возможно, поскольку при использовании ::save возможны проблемы параллелизма Например, если два потока загрузили один и тот же документ, обновите его и затем попытайтесь сохранить. Допустим, первая ветка сохранила документ. Затем второй поток переписывает изменения первого потока, и вы теряете обновления первого потока. С атомарным обновлением вы никогда не застрянете в этой проблеме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...