【问题标题】:mongodb & max connectionsmongodb & 最大连接数
【发布时间】:2012-01-16 09:36:07
【问题描述】:

我将拥有一个拥有 20k+ 并发用户的网站。

我将使用 mongodb 使用一个管理节点和 3 个或更多节点进行数据分片。

现在我的问题是最大连接数。如果我有那么多用户访问数据库,我如何确保他们没有达到最大限制?我是否还必须更改内核上的任何内容以增加连接?

基本上,数据库将用于保持连接到站点的用户,因此会有大量的读/写操作。

提前谢谢你。

【问题讨论】:

  • 使用持久连接,在大多数 mongodb 驱动程序中可用。
  • 了解您的首选堆栈(LAMP/PHP/Perl/Python/Ruby on Rails/Apache/Tomcat/Windows/Linux?)会很有帮助

标签: mongodb connection


【解决方案1】:

您不希望每次新用户连接时都打开一个新的数据库连接。我不知道您是否能够轻松扩展到 20k+ 并发用户,因为 MongoDB 为每个新连接使用一个新线程。您希望您的 Web 应用后端只打开一到几个数据库连接,并且只使用池中的那些连接,特别是因为 Web 使用是非常异步和事件驱动的。

见:http://www.mongodb.org/display/DOCS/Connections

服务器将每个 TCP 使用一个线程 连接,因此强烈建议您的应用程序 使用某种连接池。幸运的是,大多数司机都能处理这个问题 为你在幕后。一个值得注意的例外是您的设置 应用程序为每个请求生成一个新进程,例如 CGI 和一些 PHP的配置。

无论您使用什么驱动程序,您都必须了解它们如何处理连接以及它们是否池化。例如,Node 的 Mongoose 是非阻塞的,因此通常每个应用程序使用一个连接。这可能是你想要的。

【讨论】:

  • 感谢您的回答,现在,我完全是菜鸟。您在说什么驱动程序?我该如何设置?谢谢
  • @enrico 好吧,您要使用的编程模型是基于事件的编程,而不是您想的基于线程的模型。 Node.js+Express+Mongoose+MongoDB 是一个流行的堆栈。如果您喜欢 Perl,请查看 Mojolicious 或 AnyEvent。如果您不使用事件系统,您将遇到的问题是 C10k 问题:kegel.com/c10k.html 我在这里有一个 Node.js Web 应用程序的示例:github.com/EhevuTov/netPeek
  • 我知道您回答这个问题已经有一段时间了,但是您能否提供更多关于什么是“连接”的见解?是执行查询或将数据写入数据库的行为,还是调用连接函数并传递数据库 URL?我正在使用 Mongoose,所以你是说 Mongoose 只为每个应用程序实例打开一个连接,这意味着即使我有 500 个用户执行并发操作(如查询数据),Atlas 仍然只会将其视为一个连接,即使服务器托管在 Heroku 上?谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-20
  • 2015-06-04
  • 1970-01-01
  • 2014-02-14
  • 2014-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多