2012-04-25 143 views
1

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

+0

那些14个字符肯定_are_详细... – 2012-04-25 03:07:19

+0

@MДΓΓБДLL很好,我的关键点是性能问题如果重复连接不会影响性能为什么mysql_pconnect在mysql中保持连接还活着? – LotusH 2012-04-25 03:11:06

回答

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地看到,形成最大连接尝试。

+0

正是我想要的,谢谢! – LotusH 2012-04-25 06:19:38

1
private $m; 
private function getMongo() { 
    if ($this->m) return $this->m; 
    return $this->m = new Mongo(); 
} 

该技术被称为memoization。现在无处不在,通常会创建一个新的mongo实例,而是调用这个函数,它会给你现有的连接而不是创建一个新的连接。

+0

这不是单身吗? – 2012-04-25 05:02:01

+0

不是单身人士会在Mongo类中存储$ m,Mongo没有公共构造函数 – 2012-04-25 13:38:11