2013-10-29 56 views
0

我需要编写一些轻量级的脚本,可以处理大量的插入数据库。大约每秒300。PHP MongoDB大量的插入每秒

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

我需要保存param1..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数据库插入数据并关闭它。是否有任何方式,我不知道,保持这种连接打开只为写作例如?

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

关于处理此类解决方案,您有任何更多的意见吗?也许使用其他数据库或方法?任何输入将不胜感激:)

+1

检查[批量插入]( http://docs.mongodb.org/manual/core/bulk-inserts/)。但是按照你描述的方式,我怀疑MongoDb将成为这里的瓶颈。 – raina77ow

回答

1

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

是的,你的代码没问题。 300插入第二个不是很多的MongoDB插入。

因为我假设每个请求都会打开连接到mongo数据库插入数据并关闭它。是否有任何方式,我不知道,保持这种连接打开只为写作例如?

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

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

有一种方法来“UPSERT”(更新或-插入新的文档),这取决于你的数据,这可能是你的东西:http://php.net/mongocollection.update