node连接mongodb的一些思考

最近在公司项目的时候发现它们用了Generic Pool 去管理mongo的连接池,但是我发现感觉用的很诡异,mongostat显示,在打开后,要么维持在最大连接数, 要么最小连接数,不会有任何变化。

node连接mongodb 真的需要连接池么?我在百度和谷歌都看了一圈,发现很多结论,并且发现这个数据库连接池的库,被关注的并不高。说明使用的人应该不会太多。

我就想请教下,这个node到底怎么连接mongodb 最科学,给点思路或者哪里能学习就行。谢谢各位大大。!~

阅读 3.9k
2 个回答

无论是node-native-driver还是mongoose都自带了连接池,没有必要,也不应该再额外配置一个连接池来使用,会产生一些奇怪的效果,你看到的最大连接数可能就是其中之一。
连接池的相关配置全都在连接字符串里,具体参考一下官方文档有很明白的说明:Connection Pool Options
关于连接池的大小,取决于驱动。比如Java/C#的默认值是1~100,NodeJS这样异步非阻塞的语言是1~5。根据应用的情况,你可能会占用更多或者更少的连接都有可能。道理很简单,比如:

  1. 你的查询非常简单,每秒能执行1000次;

  2. 或者你的查询非常复杂,每秒只能执行1次;

对比起来,前者所需的连接数就要少得多。驱动会根据需要在不超过最大值的情况下调整池内连接数的多少,所以从默认值开始是一个好的开端,通常默认的池大小也够用。不过还是要仔细观察自己的压力状况来做适当的调整。
一个误区是给很大的maxPoolSize,想怎么都够用对不对?实际上服务器所能承受的压力并不是多给连接就可以扩展的,所以建立了超过服务器承受能力连接数不但没有帮助,反而会拖垮服务器。实际上maxPoolSize也正是在压力超过服务器承受能力的时候的一种保护措施。
综上,需要多少连接是由你的查询现状决定的,我没有办法在这里给出一个理想值。观察你的应用,寻找合适的值,但是量力而为。

我个人是直接使用 mongoose,让处理连接和释放的这些逻辑都放出去,自己专心处理数据。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题