我遍历我的集合的文档,做一些事情,然后更新数据库。但实际上,我正在更新文档的所有数据,如果我这样做,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')));
}
哪种方式更快?
答案 0 :(得分:2)
::update
应该更快,因为它只更新文档的某些字段。 ::save
保存整个文档,可能会更慢。
通常最好尽可能使用::update
,因为如果使用::save
可能的并发问题。例如,如果两个线程已加载相同的文档,请更新它然后尝试保存。让我们说第一个线程已保存文档。然后第二个线程重写第一个线程的更改,您将丢失第一个线程的更新。通过原子更新,您永远不会遇到这个问题。