我需要编写一些可以处理大量数据库插入的轻量级脚本。每秒约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数据库插入数据的连接并关闭它。有什么办法,我不知道,保持这种连接只是为了写例如开放吗?
第二个问题是解析数据。我认为在写入之前不检查记录是否存在是最佳的。只需编写所有数据,然后解析它。这个解决方案好吗?
您还有关于处理此类解决方案的更多信息吗?也许使用其他数据库或方法?任何输入将不胜感激:)
答案 0 :(得分:1)
我的问题是 - 它是最佳的吗?它会每秒处理300个请求吗?
是的,您的代码没问题。 300插入一秒不是MongoDB的很多插入。
因为我假设每个请求都会打开与mongo数据库插入数据的连接并关闭它。有没有办法,我不知道,保持这种连接只是为了写例如开放?
没有。 PHP驱动程序使用持久连接。 每个PHP进程只创建一个连接(每个服务器,每个数据库)。 您不应该明确关闭连接,因为这会对您产生性能影响。
第二个问题是解析数据。我认为在写入之前不检查记录是否存在是最佳的。只需编写所有数据,然后解析它。这个解决方案好吗?
有一种方法可以" upsert" (更新或插入新文档),取决于您拥有的数据,可能适合您:http://php.net/mongocollection.update