MongoDB怎么做性能测试,看看这篇大神总结
Posted 软件测试君
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB怎么做性能测试,看看这篇大神总结相关的知识,希望对你有一定的参考价值。
01 MongoDB测试程序说明
本文主要测试的是mongodb插入数据的效率。利用的是某老师提供的mongodb二次开发接口。
数据的结构体为:
Struct keyvalmeta
Char name[64];
Int valType;
DateTime nStartTime;
DateTime nEndTime;
Int nUserDefMetaSize;
Char* pUserDefMetaDat;
上述结构体简略了其他部分,只是提供一个参考。
结构体语义解析:
- valType表示的是Value的类型,该对象是对于三维空间的对象。
- nStartTime有效时间起始点。
- nEndTime有效时间终止点。
- nUserDefMetaSize用户自定义的元数据长度。
- pUserDefMetaDat用户自定义的元数据,如XML格式。
下面为测试的代码,先初始化结构体的数据,然后使用clock()函数(时之间的CPU时钟计时单元)来设置起始时间start,通过一个循环插入数据,循环以后再次记录结束时间finish:
CreateAndConnect();//connect the mongodb
InitOrOpenDb();//initial the db
OpenWorkspace();//open a work space
//initial the data
int nMaxSize=32*1024*1024;
char* pFileDat=new char[nMaxSize];
int nFileSize;
keyvalmeta kvm;
strcpy(kvm.name,"whu");
const int TESTNUM=100000;
clock_t start,finish;
//get the file's data
FILE* fp;
fp=fopen("c:\\\\bin\\\\1.xml","rb");
nFileSize=fread(pFileDat,1,nMaxSize,fp);
fclose(fp);
kvm.nUserDefMetaSize=nFileSize;
kvm.pUserDefMetaDat=new char[kvm.nUserDefMetaSize];
//start the test
start=clock();
for(int i=0;i<TESTNUM;i++)
InsertKeyVal(kvm);//insert the record
delete [] kvm.pUserDefMetaDat;
finish=clock();
cout<<"time:"<<(double)(finish-start)/CLOCKS_PER_SEC<<"S"<<endl;
cout<<"insert finished"<<endl;
getchar();
从上述的程序可以得知,可变的量为两个:循环次数TESTNUM和文件流大小1.XML。
02 数据结构解析
在测试前,我先讲下一般测试的注意事项:
- 测试最好用台式机并且稳定性较强(通常是散热问题影响较大),不建议使用笔记本。
- 通常有的服务器或者普通台式机因为还在使用32位系统,我就要提醒下,32位系统最多存储1G多,所以,插入大量的数据时就要注意下。64位系统的最多能存储32位系统*232 ,大概是4EB左右(1EB=1024PB,1PB=1024TB,1TB=1024G)
一开始我使用笔记本测试性能。插入100w条数据,XML大小为258kb。
使用MongoDBVUE查看如图:
通过UI界面只能知道大概的数据情况,要了解具体数据还要通过shell命令的db.keyvalmeta.stats(),
输出如图所示:
mongodb存储解析:
插入的单个数据块大小为258+104=362(byte)其中258为插入文件的大小,104为结构体的大小
总Size=362*1000000=362000000(和shell命令里的360000024相差无几)
内存利用率=1-(storageSize-size)/storegeSize*100%=87.6%,内存率利用挺高的。
03 笔记本测试数据
通过64位系统的笔记本测试,使用的时间如下表所示,每次显示的时间不是很稳定。
29.54 50.3 42.66 55.96 57.48 59.26 72.19 89.75 67.92 58.82
55.83 61.96 70.2 64.12
去掉最低值29.54和去掉最高值89.75。平均的时间为:59.72,花费的时间有点吓人,插入100w条数据要等个一分钟左右。
数据的浮动比较大,所以不建议使用笔记本,稳定性不好。
04 服务器测试数据
下面使用的是32位系统的台式机(本机子是服务器,读盘速度较快),测试方法和上述的笔记本一样。
A/B,A代表的是插入的条数,B代表的是文件大小,后面显示的数据为插入花费的总时间。
根据上表,可以统计下数据如下:
下图以文件大小为横坐标,花费的时间为纵坐标
下图以插入的条数为横坐标,花费的时间为纵坐标
通过图表可以看出,文件大小的所花费的时间浮动比较小,文件大小和插入时间的花费成正比例关系,但是系数较小。
插入的条数和插入时间的花费也成正比例关系,系数大约为2(这些数据比较容易让人理解)。
下面是测试资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!
最后: 可以在公众号:伤心的辣条 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。
学习不要孤军奋战,最好是能抱团取暖,相互成就一起成长,群众效应的效果是非常强大的,大家一起学习,一起打卡,会更有学习动力,也更能坚持下去。你可以加入我们的测试技术交流扣扣群:914172719(里面有各种软件测试资源和技术讨论)
喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!
好文推荐
转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!
面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…
基础性能测试知识学习路线(看看这篇,好好学习)
以上是关于MongoDB怎么做性能测试,看看这篇大神总结的主要内容,如果未能解决你的问题,请参考以下文章
如何使用优秀的性能测试工具Locust?我们找了大神来做实战演示!忍不住收藏!