在这里插入图片描述

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(里面有各种软件测试资源和技术讨论)

喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!


好文推荐

转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!

面试经:一线城市搬砖!又面软件测试岗,5000就知足了…

面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…

什么样的人适合从事软件测试工作?

那个准点下班的人,比我先升职了…

测试岗反复跳槽,跳着跳着就跳没了…

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐