mongo 长连接 短连接 和连接池

本文探讨了在使用MongoDB 1.3及以上版本时,如何通过PHP的MongoClient类进行连接管理,特别是长连接的使用及存在的问题。文章讨论了连接数过多导致的内存消耗,并提出了解决方案,包括关闭连接、减少fpm数量和建立连接池等。
MongoDB1.3版本以上都通过MongoClient类进行连接,其策略默认就是长连接,而且无法修改。所以连接数其实取决于fpm的客户进程数。如果fpm量太大,必然会导致连接数过多的问题。如果你所有机器上一共有1000个fpm,那么就会创建1000个长连接,按mongodb服务端的策略,每个连接最低消耗1M内存,那这1G内存就没了。所以直接方案是每次使用完后进行close操作,这样不会让服务端需要保持大量的连接。而close函数也有一个坑,就是默认只关闭写连接(比如master或者replica sets的primary),如果要关闭全部连接,需要添加参数true即:$mongo->close(true)每次关闭连接的方案可以有效减少服务器的并发连接数,除非你的操作本身非常慢。但是同样也有它的问题,比如每次不能复用之前的tcp连接,需要重新进行连接,这样连接耗时会比较高,特别是用replica sets的时候,需要创建多个tcp连接。所以最终可能只有两个方案一是减小fpm的数量二是自建连接池,通过连接池将之个客户端的连接收敛成固定数量对MongoDB的连接。

PHP那边是推荐用的persistent connection, 而且也说了DB 那边那种不推荐使用pconnect 但对于mongo 不适用, Mongo 是strongly recommend 使用persistent connection.

[url]http://www.zhihu.com/question/20012148[/url]


[url]http://blog.sina.com.cn/s/blog_4b82753d0100w24w.html[/url] 长连接 短连接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值