最近用node读取更新mongodb的文档,发现: Error: db object already connecting, open cannot be called multiple times 的错误出现的次数越来越多,但是我每一次open()后都有close()。。听说用连接池管理mongodb的链接可以优化性能,不需要close()了,所以在这里想请教各位前辈,如何使用连接池解决这个问题,优化mongodb的性能?
PS:我知道有一个mongose可以解决这个问题,但是很想知道不用它应该怎么做。。
我觉得吧 node这种单线程靠回调的甚至有时候没法准确控制流程的物件,mongodb打开了就不要关闭了吧。一直用一个db 连接就好了。
恩恩已经了解了。但是欢迎各位前辈甩下一些资料~~
一个连接的话如果连接lost或者阻塞了不就挂了?pool还是比较好的,不过mongodb 我没用过,实在不行自己写个,或者用这个generic-pool
多谢前辈指点~~
@knighterrant 请问你是怎么解决的?
@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