我使用的是默认设置的官方Mongo NodeJS驱动程序,但今天我更深入地研究了各种选项,显然有一个默认设置为maxPoolSize
的选项.
我对此的理解是,单个NodeJS进程可以建立多达100个连接,从而允许Mongo并行处理100个读/写?
如果是这样的话,似乎把这个数字设置得更高只会对性能有利,但我不确定,因此决定在这里提问.
假设默认设置没有索引,有没有办法(根据数据库的CPU和内存)确定池的最佳连接数?
我们还可以假设NodeJS流程本身不是一个瓶颈(即可以水平扩展).
我使用的是默认设置的官方Mongo NodeJS驱动程序,但今天我更深入地研究了各种选项,显然有一个默认设置为maxPoolSize
的选项.
我对此的理解是,单个NodeJS进程可以建立多达100个连接,从而允许Mongo并行处理100个读/写?
如果是这样的话,似乎把这个数字设置得更高只会对性能有利,但我不确定,因此决定在这里提问.
假设默认设置没有索引,有没有办法(根据数据库的CPU和内存)确定池的最佳连接数?
我们还可以假设NodeJS流程本身不是一个瓶颈(即可以水平扩展).
好问题=)
似乎将这个数字设置得更高只会对性能有利
的确如此.我的意思是看起来是这样的,对于抽象的NodeJS进程来说,情况就是这样,在真空中拥有无限的资源.连接不是免费的,所以有一些事情需要考虑:
假设默认设置没有索引
您至少有_id,如果我们谈论的是性能,您应该有更多的id
有没有办法确定池的最佳连接数应该是多少?
我也很想知道.需要考虑的因素太多了,不仅是CPA/RAM,还有数据形状、查询模式等.这就是使用数据库的目的.Mongo集群需要一些关注、监测和调整,以实现最佳运行.在许多情况下,扩大集群规模比优化应用程序更具成本效益.
我们还可以假设NodeJS流程本身不是一个瓶颈(即可以水平扩展).
这是一个相当大胆的假设.这一过程不能按比例进行调整.它是在操作系统层面上的.一旦有了流程描述符,它就会一直锁定到死.您可以使用 node 集群来利用所有CPU核心,甚至可以让多个服务器运行相同的NodeJS并平衡负载,但它们都不会共享池中的连接.该池是NodeJS进程的本地池.