C++简单测试MongoDB性能

由于不进入数据库,本文并不能代表mongodb性能,仅以此与IO做简单对比得出性能并不科学,但也能从侧面说明一定问题,给大家开发中一定的提示。

附: 本文测试并作于2012年初,由于录入博客时间较晚,可能有所差异,欢迎提供最新数据。


测试数据大小:531M

读取数据大小:10^7 字节

由于MongoDB最快的内存文件读写方式大致如下(不进入数据库):

  read(unsigned int nOffset , void *lpStore , unsigned int nStoreLen ),其每次读已默认进行了类似seek的偏移,因此,测试时使用seek 与没有 seek 的 同时进行测试,结果如下(单位:ms):

每次读1字节,共读10^7次,(seek对应10^7次)

without Seek

 Seek

MongoDB

265

5678

3885

281

5601

3916

265

5612

3791

272

5726

3842

264

5709

3850

280

5702

3872

265

5600

3940

266

5631

3912

 

每次读取10 字节 ,共读 10^6次:

without Seek

 Seek

MongoDB

31

608

390

31

562

406

31

577

390

47

577

390

16

577

375

31

577

390

31

562

422

31

577

390

31

562

390

 

读取10^7 BYTE 对于读取大内存块,两者性能几乎接近。

 

总结: 在测试中MongoDB对于连续性读取性能约仅为IO的1/10左右,但是相对每次进行偏移后取值存在较大优势(例如移动鼠标获取图像值,如下图),对于读取大内存,MongoDB性能与IO相差微乎其微。因此,颗粒度越大,MongoDB性能就越接近IO,如果将MongoDB作为底层,需要避免频繁小颗粒度的存取(零存整取)。


本文仅以简单方式测试了MongoDB不进入数据库下read,并不能代表MongoDB本身性能,只能说明如何更好的去应用它。

你可能感兴趣的:(杂文/其他)