如何在PHP中批处理ups mongodb?
|
我目前有一些代码,需要对数千个用户的每个用户执行多次更新,并根据他们执行的操作来递增计数器,以跟踪正在执行的操作。每个动作都包含子动作,这些子动作也需要更新计数。这些需要每天进行跟踪。
因此,我要存储\“ action \”:\“ actionName \”,\“ day \”:day,\“ count \”:计数,以计算每天的操作(例如,从外部网页传入,开始游戏,停止游戏)退出,并与许多游戏的游戏名称关联)。
每天我都会添加几千行(每个唯一操作一个),每天更新数十万次以增加计数。
相关代码如下(不包括创建动作数组)。
$m = new Mongo();
$db = $m->actionsDB;
$collection = $db->action_count;
foreach ($arr as $action) {
$collection->update(array(\"action\" => $action, \"day\" => $day),array(\'$inc\' => array(\"count\" => 1)),array(\"upsert\" => true));)
}
$collection->ensureIndex(array(\"action\" => 1, \"day\" => -1));
对一个操作和子操作进行的一系列更新的示例如下:
startGame,20110417;
startGameZork,20110417;
startGameZorkWindows,20110417
问题似乎是在服务器上运行此代码后,shell中的mongo命令排队了。
目前,我不确定为什么,我想每秒可能有如此多的更新可能会导致性能问题。
我想知道如何提高性能?我对mongo还是很陌生,所以不能完全确定可以使用哪些选项。我查看了PHP的batchInsert,但是看不到任何关于进行batchUpdate的提及(因此,不是更新,而是创建一个包含我当前更新的所有数据的数组,然后在一次访问数据库的过程中进行一次batchUpdate)。
Mongo驱动程序版本为1.2.0,因此默认情况下为持久连接。
编辑:db.serverStatus()之前,之中和之后每秒约1600次更新(30秒)。测试数据
没有找到相关结果
已邀请:
2 个回复
土投
郡豪靠暖
标志来更新/插入文档(如果已经存在/新创建) 例如从PHP: