请教怎么在node中使用mongodb的连接池
发布于 12 年前 作者 knighterrant 22848 次浏览 最后一次编辑是 8 年前

最近用node读取更新mongodb的文档,发现: Error: db object already connecting, open cannot be called multiple times 的错误出现的次数越来越多,但是我每一次open()后都有close()。。听说用连接池管理mongodb的链接可以优化性能,不需要close()了,所以在这里想请教各位前辈,如何使用连接池解决这个问题,优化mongodb的性能?

PS:我知道有一个mongose可以解决这个问题,但是很想知道不用它应该怎么做。。

10 回复

我觉得吧 node这种单线程靠回调的甚至有时候没法准确控制流程的物件,mongodb打开了就不要关闭了吧。一直用一个db 连接就好了。

恩恩已经了解了。但是欢迎各位前辈甩下一些资料~~

一个连接的话如果连接lost或者阻塞了不就挂了?pool还是比较好的,不过mongodb 我没用过,实在不行自己写个,或者用这个generic-pool

多谢前辈指点~~

@knighterrant 请问你是怎么解决的?

You open do MongoClient.connect once when your app boots up and reuse the db object. It’s not a singleton connection pool each .connect creates a new connection pool.

使用node-mongodb-native,这是官方为nodejs提供的驱动。这个库本本身就实现了pool管理,所以不用另外考虑连接池。使用上可以通过配置链接url或server的属性设置连接池大小。可以在程序初始化时创建一个全局的访问client,也可以自己再封装一次。所有通过这个client的发出的mongo操作请求,驱动底层都会自动分配链接。由于底层是用c/c++实现的,所以不用担心代码会阻塞。具体如何创建可以参见http://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html#mongoclient-connect

使用 mongoosejs

回到顶部