使所有PHP mongoDB连接使用Unix域套接字

使所有PHP mongoDB连接使用Unix域套接字,php,mongodb,sockets,Php,Mongodb,Sockets,由于不久前我们开始使用mongoDB,我们的PHP代码库的很大一部分如下所示: $mongo = new Mongo(); $coll = $mongo->mydb->mycoll; $client = new MongoClient("mongodb:///tmp/mongodb-27017.sock"); 默认设置是通过TCP连接到localhost:27017,这对我们来说已经好几年了。出于速度方面的考虑,我想切换到使用Unix域套接字,这些套接字受以下支持: $mongo

由于不久前我们开始使用mongoDB,我们的PHP代码库的很大一部分如下所示:

$mongo = new Mongo();
$coll = $mongo->mydb->mycoll;
$client = new MongoClient("mongodb:///tmp/mongodb-27017.sock");
默认设置是通过TCP连接到
localhost:27017
,这对我们来说已经好几年了。出于速度方面的考虑,我想切换到使用Unix域套接字,这些套接字受以下支持:

$mongo = new Mongo();
$coll = $mongo->mydb->mycoll;
$client = new MongoClient("mongodb:///tmp/mongodb-27017.sock");
有没有一种方法可以在不必在代码中指定套接字文件的情况下实现这一点?列表
mongo.default\u host
mongo.default\u port
可以在
php.ini
中设置,以便您可以编写:

$client = new MongoClient();

但这似乎只适用于TCP连接。或者我可以使用这些参数来指定套接字文件吗?如果是这样,怎么做?

我不认为Unix域套接字更快。驱动程序维护一个连接池。在初始连接之后,几乎没有开销。瓶颈通常是RAM或查询本身,因此这是一个非常糟糕的主意™ 在与MongoDB实例相同的计算机上运行应用程序(尤其是PHP应用程序)。他们将争夺公羊。MongoDB需要大量的RAM,每个请求和连接都需要额外的RAM。因此,当内存不足时,MongoDB应答将花费更长的时间,对其他操作进行排队。回答时间越长,排队的请求就越多。一个恶性循环。速度假设是基于发布的评论和一个普遍的观察结果,即Unix域套接字与TCP连接相比非常有效。在我们的例子中,DB没有在web服务器上运行,只有
mongos
在运行,所以我不担心竞争RAM。我只是不想因为TCP带来的开销而失去资源。@Olivier:如前所述,连接池是由驱动程序维护的,它在建立初始连接后利用TCP开销,每个请求都不握手,诸如此类。