如何在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秒)。测试数据     
已邀请:
没有内置的批处理更新/ upserts。您只能通过调整查询表达式并以某种方式为“模拟”添加更多过滤器来限制要更新的文档。 MongoDB不会在这里为您提供帮助。更新/更新是其中之一或全部。     
如果您有机会将数据存储在文件(json或csv)中,则可以尝试使用命令行mongoimport实用程序插入数据。 这样,您可以使用
--upsert
标志来更新/插入文档(如果已经存在/新创建) 例如从PHP:
exec(\"mongoimport --db <bdname> --collection <collection_name> --jsonArray --upsert --file $data_file\");
    

要回复问题请先登录注册