0

我需要编写一些轻量级脚本来处理大量对数据库的插入。每秒大约 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 数据库插入数据的连接并关闭它。我不知道,有没有办法让这个连接保持打开状态,例如仅用于写入?

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

您对处理此类解决方案有更多意见吗?也许使用另一个数据库或方法?任何输入将不胜感激:)

4

1 回答 1

1

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

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

因为我假设每个请求都会打开与 mongo 数据库插入数据的连接并关闭它。我不知道,有没有办法让这个连接保持打开状态,例如仅用于写入?

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

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

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

于 2013-11-19T23:57:22.460 回答