表格似乎无法复制,可以到我的博客观看原文
http://blog.csdn.net/xuddk727/article/details/10937905
由于不进入数据库,本文并不能代表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本身性能,只能说明如何更好的去应用它。