我认为fastmod指定了一些操作,比如就地更新。 在我的应用程序中,我使用'$'修饰符进行_id更新,例如:
$colleciton->update(
array('_id' => $id),
array(
'$inc' => array('hits' => new MongoInt32(1)),
'$set' => array(
'times.gen' => gettimeofday(true),
'http.code' => new MongoInt32(200)
)
),
array('safe'=>false,'multiple'=>false,'upsert'=>false)
);
我有这样的日志:
Wed Jul 25 11:08:36 [conn7002912] update mob.stat_pages query: { _id: BinData } update: { $inc: { hits: 1 }, $set: { times.gen: 1343203715.684896, http.code: 200 } } nscanned:1 nupdated:1 keyUpdates:0 locks(micros) w:342973 342ms
在日志中,您可以看到我没有任何“fastmod”标志。没有“移动”标志,因为我在插入时设置字段'times.gen'和'http.code',因此填充因子为1.0。
我做错了什么,或者我误解了fastmod的含义?
答案 0 :(得分:3)
您是正确的,日志中的“fastmod”表示就地更新。遗漏记录的fastmod /就地操作的一些可能原因:
进一步研究:
查看the profiler,尝试不同的设置,注意:分析会增加负载 - 所以请小心使用。
您也可以尝试在启动时将slowms值设置为较低值:
> db.setProfilingLevel(0,20) // slow threshold=20ms