MongoDB多数据库与单数据库性能

rpa*_*cek 6 performance mongodb

概述:

我们正在比较两种不同体系结构上的create / read / write / rw性能:单个数据库与多个数据库(15k-25k)。

我们更喜欢使用Multi-DB体系结构,因为这样可以更轻松地分离客户(customer = 1 company)。但是,由于性能下降,我们担心这可能不是一个好的解决方案。

服务器规格:

单实例MongoDB服务器;64GB RAM;16芯; 固态硬盘

检测结果:

两种测试方案的文档总数相同(并且文档的大小大致相同)。变量是数据库数量,每个数据库的集合和每个集合的文档。

除了使用100(50R / 50W)的读/写操作外,所有测试都使用50个客户端线程(单独的计算机)并行进行。启用了“ directoryPerDB”。(所有时间以毫秒为单位,每个doc操作)

Test                      Creation  Read     Write    Read/Write   Notes
25000 DB 4 Coll 250 Doc   23ms      1-10ms   1-4ms    2-10ms       Max 1400% CPU, noticeable "pauses" (CPU drops to 100%)
15000 DB 4 Coll 420 Doc   23ms      0.7-4ms  0.9-4ms  2-9ms        Max 1400% CPU, noticeable "pauses" (CPU drops to 100%)
1 DB 4 Coll 125000 Doc    0.8ms     0.6ms    0.8ms    1.2-1.6ms    Max 600% CPU, no pauses
Run Code Online (Sandbox Code Playgroud)

结论:

当数据库计数很高时,在定期间隔上似乎会出现明显的性能下降。这可能是由于文件数量过多(25000 DBs * 4 Colls * 2文件= 200k文件)或其他瓶颈所致。

在单数据库测试中,CPU保持在600%左右并保持到完成。在多数据库测试中,CPU(处于峰值性能)介于800-1400%之间,但是每隔一段时间,CPU就会降至100%,并且所有操作都将暂停。可以通过查看mongo日志以及发出R / W命令的测试客户端的日志来验证这一点。

如果不是因为这些停顿,Multi-DB体系结构将比Single-DB快2倍左右,但是似乎存在一些无法避免的全局争用。

我希望有人可能知道这种全局争用以及(如果可能的话)如何解决它。