PHP MongoDB 每秒大量插入
Posted
技术标签:
【中文标题】PHP MongoDB 每秒大量插入【英文标题】:PHP MongoDB lot of inserts per second 【发布时间】:2013-10-29 12:23:13 【问题描述】:我需要编写一些轻量级的脚本来处理对数据库的大量插入。每秒大约 300 个。
它是简单的数据计数器(如查看次数等)。因此,例如调用请求: http://example.com/count/param1/param2/param3/param4
我需要用一些额外的数据(如 IP 地址或用户代理)保存 param1..4。
我决定选择 MongoDB 作为主数据库。我的想法是只编写数据而不对参数进行一些基本验证,例如:if(param1..4 are ok) than insert
。验证非常简单 (is_int(), param2 == 'view') 等等。
一个小时后,我想遍历我所有的数据库记录,删除重复项,收集一些数据,例如每小时点击次数,然后将其放入 mysql 数据库 + 从 mongo 中清除循环项目。
我不是这种大数据处理方面的专家。首先是我的批量插入代码:
$m = new \MongoClient($connectionString);
$db = $m->stats;
$collection = $db->statsdata;
$collection->insert($arrayOfData);
我的问题是 - 它是最优的吗?它每秒会处理 300 个请求吗?因为我假设每个请求都会打开与 mongo 数据库插入数据的连接并关闭它。我不知道,有没有办法让这个连接保持打开状态,例如仅用于写入?
第二个问题是关于解析数据的。我认为最好不要在写入之前检查记录是否存在。只需写入所有数据,然后对其进行解析。这个解决方案好吗?
您对处理此类解决方案有更多意见吗?也许使用另一个数据库或方法?任何输入将不胜感激:)
【问题讨论】:
检查bulk inserts。但按照你描述的方式,我怀疑 MongoDb 会成为这里的瓶颈。 【参考方案1】:我的问题是 - 它是最优的吗?它会每秒处理 300 个请求吗?
是的,您的代码很好。每秒 300 次插入对于 MongoDB 来说并不是很多。
我假设每个请求都会打开到 mongo 数据库插入数据的连接并关闭它。我不知道,有没有办法让这个连接保持打开状态,例如仅用于写入?
没有。 php 驱动程序使用持久连接。 每个 PHP 进程只创建一个连接(每个服务器、每个数据库)。 您不应明确关闭连接,因为这会影响性能。
第二个问题是关于解析数据的。我认为最好不要在写入之前检查记录是否存在。只需写入所有数据,然后对其进行解析。这个解决方案好吗?
有一种方法可以“更新”(更新或插入新文档),具体取决于您拥有的数据,这可能适合您:http://php.net/mongocollection.update
【讨论】:
以上是关于PHP MongoDB 每秒大量插入的主要内容,如果未能解决你的问题,请参考以下文章