在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(每个套接字都是一个打开的“文件”). 此外,您使用的是旧版本的驱动程序,您可能需要考虑升级. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |