加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 13:20:56 所属栏目:PHP教程 来源:网络整理
导读:我目前正在进行一些个人测试和基准测试,以比较使用MongoDB和 MySQL与真实世界示例数据之间的工作流程和效率. 为了在每个数据库中设置我的数据,我正在做几千个循环并随机创建数据对象以插入到数据库中. 但是我在PHP中使用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(每个套接字都是一个打开的“文件”).

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读