在PHP中打开和关闭16000个Mongo数据库实例

前端之家收集整理的这篇文章主要介绍了在PHP中打开和关闭16000个Mongo数据库实例前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在进行一些个人测试和基准测试,以比较使用MongoDB和 MySQL与真实世界示例数据之间的工作流程和效率.

为了在每个数据库中设置我的数据,我正在做几千个循环并随机创建数据对象以插入到数据库中.

但是我在PHP中使用Mongo类时遇到了一些问题,我无法解决.问题是这样的:

我有一个循环,它创建一个新的Mongo实例和连接,将一个小数组插入一个集合,然后关闭连接.此循环应运行20000次.然而,当它试图创建实例/建立连接时,它始终在16300nd循环(最小值为16200,最大值为16350,我会说几次运行后)失败.

循环中的代码如下:

$data = get_random_user_data();

$mongo = new Mongo('mongodb://admin:password@localhost:27017/test');

    if ($mongo->test->users->insert($data)) {
        $users[] = array('id' => $data['_id'],'name' => $data['username']);
    echo $i." - Added user: ".$data['username'].'<br/>';
    }

$mongo->close();

get_random_user_data()只返回一个简单的关联数组.

我得到的错误是:

Fatal error: Uncaught exception 'MongoConnectionException' with message 'Unknown error'

在线上:

$mongo = new Mongo('mongodb://admin:password@localhost:27017/test');

有任何想法吗?有什么基本的东西我会像一些安全或垃圾邮件预防一样缺失吗?

提前致谢.

额外信息:

脚本在大约114.9797秒死亡.它不是PHP内存或基于时间的问题,因为提出了所有限制,我运行我的MysqL基准测试昨天插入120000行(使用相同的循环打开连接,插入,关闭连接的方法)大约一个小时没有问题.

运行PHP 5.3.5版

PHPinfo Mongo信息:

MongoDB Support enabled
Version 1.2.0-
Directive   Local Value Master Value
mongo.allow_empty_keys  0   0
mongo.allow_persistent  1   1
mongo.auto_reconnect    1   1
mongo.chunk_size    262144  262144
mongo.cmd   $  $
mongo.default_host  localhost   localhost
mongo.default_port  27017   27017
mongo.long_as_object    0   0
mongo.native_long   0   0
mongo.no_id 0   0
mongo.utf8  1   1
您的操作系统只有有限数量的插槽,它愿意打开.当你打开一个套接字然后关闭它时,操作系统不会立即将它放回“可用”池中,它会在“等待时间”状态下挂起一段时间,Nat提到 in his answer.

您可以增加操作系统将打开的套接数量,请参阅http://www.mongodb.org/display/DOCS/Too+Many+Open+Files(每个套接字都是一个打开的“文件”).

此外,您使用的是旧版本的驱动程序,您可能需要考虑升级.

猜你在找的PHP相关文章