2011-06-05 65 views
2

我循环访问我的集合的文档,做一些事情,然后更新数据库。但是因为我实际上拥有我正在更新的文档的所有数据,如果我这样做,save()会比update()快吗?更新最快的方法:update()或save()?

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

如何自己对比它?这非常简单,只需运行两个变体,每次变化一千次,并记录时间。 – Theo 2011-06-05 13:22:45

回答

2

::update应该更快,因为它只更新文档的某些字段。 ::save保存整个文件,可能会更慢。

一般来说最好使用::update哪里有可能,因为如果你使用::save可能的并发问题。例如,如果两个线程加载了相同的文档,请更新它然后尝试保存。可以说第一个线程已保存文件。然后第二个线程重写第一个线程的更改并丢失第一个线程的更新。随着原子更新,你永远不会卡在这个问题上。