MongoDB和最大连接数

23

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

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

现在我的问题是最大连接数。如果有那么多用户访问数据库,如何确保他们不达到最大限制?另外,我是否需要更改内核以增加连接?

基本上,数据库将用于保存与网站连接的用户,因此将进行大量的读/写操作。

提前谢谢。


1
使用持久连接,在大多数 MongoDB 驱动程序中可用。 - DhruvPathak
了解您偏爱的技术栈(LAMP/PHP/Perl/Python/Ruby on Rails/Apache/Tomcat/Windows/Linux)会对我们有很大帮助。 - Kato
1个回答

25

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

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

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

无论使用哪个驱动程序,您都需要找出它们如何处理连接以及是否进行连接池化。例如,Node的Mongoose是非阻塞的,因此通常使用一个连接。这可能是你想要的类型。


谢谢您的回答,现在我是个彻头彻尾的新手。您所说的这个驱动程序是什么?我该如何设置它?谢谢。 - carmelo arena
2
@enrico 嗯,你想要使用的编程模型是基于事件的编程,而不是你之前想到的基于线程的模型。Node.js+Express+Mongoose+MongoDB 是一个流行的堆栈。如果你喜欢 Perl,请看一下 Mojolicious 或 AnyEvent。如果你不使用事件系统,你将遇到 C10k 问题:http://www.kegel.com/c10k.html我在这里有一个 Node.js 网络应用程序的示例:http://github.com/EhevuTov/netPeek - EhevuTov
我知道你回答这个问题已经有一段时间了,但你能否提供更多关于“连接”是什么的见解?它是执行查询或将数据写入数据库的行为,还是调用连接函数并传递数据库URL?我正在使用Mongoose,所以您是说Mongoose每个应用程序实例只打开一个连接,这意味着即使我有500个用户执行并发操作(如查询数据),那么Atlas仍然只会看到一个连接,即使服务器托管在Heroku上?谢谢。 - user6233283

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接