PHP MongoDB每秒大量插入


PHP MongoDB lot of inserts per second

我需要编写一些轻量级脚本来处理大量数据库插入。每秒约300次。

这是简单的数据计数器(如查看次数等)。因此,例如调用请求:http://example.com/count/param1/param2/param3/param4

我需要保存参数1。4 带有一些额外的数据(如 IP 地址或用户代理)。

我决定选择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 数据库的连接插入数据并关闭它。我不知道有什么方法可以保持此连接仅用于写入?

第二个问题是关于解析数据。我认为最好不要在写入之前检查记录是否存在。只需写入所有数据,然后对其进行解析。这个解决方案可以吗?

您对处理此类解决方案还有其他意见吗?也许使用其他数据库或方法?任何意见将不胜感激:)

我的问题是 - 它是最佳的吗?它会每秒处理 300 个请求吗?

是的,你的代码很好。 每秒 300 次插入对于 MongoDB 来说并不多。

正如我假设每个请求都会打开与 mongo 数据库的连接插入数据并关闭它。我不知道有什么方法可以保持此连接仅用于写入?

不。PHP 驱动程序使用持久连接。每个 PHP 进程只创建一个连接(每个服务器、每个数据库)。不应显式关闭连接,因为这会影响性能。

第二个问题是关于解析数据。我认为最好不要在写入之前检查记录是否存在。只需写入所有数据,然后对其进行解析。这个解决方案可以吗?

有一种方法可以"更新"(更新或插入新文档),具体取决于您拥有的数据,这可能适合您:http://php.net/mongocollection.update