1

有没有办法连接mongodb并在任何地方使用它?当我想使用 mongodb 时,我必须详细输入。我$m= new Mongo;想知道重复连接是否会影响性能。

4

2 回答 2

3

这对于 MongoDb < 1.2 来说很重要,但在那之后,持久连接是默认的。MongoDb 的所有语言驱动程序都在内部智能地管理连接池,因此您可以安全地使用它们的默认行为。由于连接池,无论何时创建new Mongo(),它都会从连接池中选择一个已建立的连接,如果没有,则重新连接。

摘自: http: //php.net/manual/en/mongo.connecting.php

In 1.2.0+, connections are always persistent and managed 
automatically by the driver.

“连接池(版本 1.2.0+)

创建连接是驱动程序所做的最重要的事情之一。正确建立连接可能需要数百毫秒,即使在快速网络上也是如此。因此,驱动程序试图最小化通过重用池中的连接而创建的新连接的数量。

当用户创建一个新的 Mongo 实例时,所有必要的连接都将从他们的池中获取(副本集可能需要多个连接,一个用于集合的每个成员)。当 Mongo 实例超出范围时,连接将返回到池中。当 PHP 进程退出时,池中的所有连接都将关闭。"

您可以使用测试 php 脚本尝试此操作,并观察mongostat形成的最大连接数。

于 2012-04-25T06:16:33.920 回答
1
private $m;
private function getMongo() {
    if ($this->m) return $this->m;
    return $this->m = new Mongo();
}

该技术称为memoization. 现在,您通常会在任何地方创建一个新的 mongo 实例,而是调用此函数,它将为您提供现有连接而不是创建新连接。

于 2012-04-25T04:56:29.100 回答