繁体   English   中英

MongoDB最佳性能 - 多少持久连接

[英]MongoDB Optimal Performance - How Many Persistent Connections

我在EC2实例上有一个mongodb服务器。 根据mongodb官方文档,持久数据库连接应始终用于生产。 我一直在试验大约50个持久连接,并且在测试时遇到频繁的连接错误(大约33%的时间)。 我正在使用此代码:

$pid = 'db_'.rand(1,50);
$mongo = new Mongo("mongodb://{$user}:{$pass}@{$host}", array('persist' => $pid) );

关于应用程序的一些背景知识,它是一个仍然在增加的链接跟踪应用程序 - 并且在每小时500到1k的写入范围内,没有什么太疯狂......

我想知道我是否只需要允许更持久的连接? 如何确定持久连接与可用服务器资源的正确平衡?

在此先感谢大家。

从最新的驱动程序(1.2.0)开始, 不再支持 persist值。

事实是,在典型的Apache + PHP设置中,它从未真正清楚它的作用。 关于Google网上论坛和其他地方有几条评论要求详细信息,但我没有任何证据证明persistpersistent有任何深度测试。

相反,它已被“开箱即用”的连接池所取代。 通过添加MongoPool类,连接池显然已经在1.2行内进行了一些更改

仍然没有关于池如何与Apache一起工作的详细解释,但至少你不必担心persist

尽管存在这些混乱,但我通过PHP驱动程序在单个MongoDB服务器上处理了1000次流量,而没有很多连接问题。

你是否抓住了例外情况?

你能提供关于确切例外的更多细节吗?

可能存在代码解决方案。

您是为每个PHP页面请求打开一个新连接,还是使用具有50个持久连接的连接池? 如果您每次都打开一个新连接,那么您可能很快就会耗尽资源。

每个连接在服务器上使用一个额外的线程,因此您可以限制网络连接的线程数,检查/var/lib/mongodb服务器日志是否有错误。

如果您正在使用官方MongoDB PHP驱动程序 ,那么据我所知它应该自动为您处理连接池。 如果你从50个独立的客户端连接到Mongo,那么考虑在Mongo前面放一个队列来缓冲写入。

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

没有持久连接x1000

执行大约需要18秒

一贯

......它需要不到0.02秒

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM