我有以下 PHP 脚本,它基本上连接到 MongoDB,写入一个文档,然后关闭连接 19000 次:
<?php
for($i=0; $i < 19000; $i++) {
$con = new Mongo("mongodb://localhost:27017");
$db = $con->selectDB('test');
$col = $db->selectCollection('close_wait_test');
$col->insert(array('Test' => 'Value1'));
$con->close();
}
?>
运行此脚本一次可以正常工作,但如果我在几秒钟后运行脚本,我会收到“无法分配请求的地址”异常,这是可以理解的,因为服务器系统可能会用完端口。
但是,如果我删除 $con->close(); 我可以一遍又一遍地运行该脚本,而不会对数据库造成任何明显的压力。我假设这是因为与数据库的连接是持久的,并且在脚本上重用了相同的初始连接。
我想知道的是,如果 20k+ 个不同的用户同时运行 1 个该脚本循环,数据库会发生什么情况?例如,是否会因为每个用户需要创建一个到数据库的连接而简单地用完可用连接?还是所有这些用户都使用第一个用户创建的相同初始连接?