我需要编写一些轻量级脚本来处理大量数据库插入。每秒约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