最近在公司项目的时候发现它们用了Generic Pool 去管理mongo的连接池,但是我发现感觉用的很诡异,mongostat显示,在打开后,要么维持在最大连接数, 要么最小连接数,不会有任何变化。
node连接mongodb 真的需要连接池么?我在百度和谷歌都看了一圈,发现很多结论,并且发现这个数据库连接池的库,被关注的并不高。说明使用的人应该不会太多。
我就想请教下,这个node到底怎么连接mongodb 最科学,给点思路或者哪里能学习就行。谢谢各位大大。!~
最近在公司项目的时候发现它们用了Generic Pool 去管理mongo的连接池,但是我发现感觉用的很诡异,mongostat显示,在打开后,要么维持在最大连接数, 要么最小连接数,不会有任何变化。
node连接mongodb 真的需要连接池么?我在百度和谷歌都看了一圈,发现很多结论,并且发现这个数据库连接池的库,被关注的并不高。说明使用的人应该不会太多。
我就想请教下,这个node到底怎么连接mongodb 最科学,给点思路或者哪里能学习就行。谢谢各位大大。!~
5 回答4.8k 阅读✓ 已解决
4 回答2.4k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
5 回答1.9k 阅读
2 回答1.3k 阅读✓ 已解决
3 回答2k 阅读
1 回答3.2k 阅读
无论是node-native-driver还是mongoose都自带了连接池,没有必要,也不应该再额外配置一个连接池来使用,会产生一些奇怪的效果,你看到的最大连接数可能就是其中之一。
连接池的相关配置全都在连接字符串里,具体参考一下官方文档有很明白的说明:Connection Pool Options
关于连接池的大小,取决于驱动。比如Java/C#的默认值是1~100,NodeJS这样异步非阻塞的语言是1~5。根据应用的情况,你可能会占用更多或者更少的连接都有可能。道理很简单,比如:
你的查询非常简单,每秒能执行1000次;
或者你的查询非常复杂,每秒只能执行1次;
对比起来,前者所需的连接数就要少得多。驱动会根据需要在不超过最大值的情况下调整池内连接数的多少,所以从默认值开始是一个好的开端,通常默认的池大小也够用。不过还是要仔细观察自己的压力状况来做适当的调整。
一个误区是给很大的
maxPoolSize
,想怎么都够用对不对?实际上服务器所能承受的压力并不是多给连接就可以扩展的,所以建立了超过服务器承受能力连接数不但没有帮助,反而会拖垮服务器。实际上maxPoolSize
也正是在压力超过服务器承受能力的时候的一种保护措施。综上,需要多少连接是由你的查询现状决定的,我没有办法在这里给出一个理想值。观察你的应用,寻找合适的值,但是量力而为。