mongodb性能测试
mongodb性能测试
mongodb的性能高,提到大数据我们可能就会想到这个数据库,那么它的性能究竟如何,需要我们实践与探讨。
基本信息:
- mongodb版本:2.2.7
- 系统:win7 x64
- 内存:8G(两根内存条)
- CPU:2.6 GHZ
- 软件运行环境: 多个后台程序持续运行。
测试过程中(执行生成数据):
- CPU使用率 :54%
- mongod内存占用:28128 KB = 28MB
测试用例需求
测试需求内容
collection name:user_scores
insert 1,000,000 records.
{
"_id" : "usr1000001_sn3933" ,
"usrid" : 1000001 ,
"lsnid" : 3933 ,
"score" : 67 ,
"date" : 1408349053174
}
按分数 desc, date desc 排序,取前一百条记录.
生成测试数据代码
Spring集成Junit测试方法,部分代码。
@Test
public void add(){
for(int i=0;i<1000000;i++){
int a = (int) (Math.random() * 100);
Scores s = new Scores(1000001,3933,a, new Date().getTime() );
mongo.save(s);
}
}
生成数据时间大概:1分钟
注意:如果你的在配置,也就是mongo数据库连接池配置为默认的,如果自行配置可能效率会更低
测试查询效率代码
@Test
public void count(){
DBCollection coll = mongo.getCollection(DOC.MODEL_SCORES);
// 先排序成绩倒序,再排序时间倒序,获取数据库游标
DBCursor cursor = coll.find().sort(new BasicDBObject("date", -1) )
.sort(new BasicDBObject("score", -1))
.limit(100);
while(cursor.hasNext()){
DBObject obj = cursor.next();
System.out.println(obj);
}
}
无索引查询性能测试报告
- 数据量:
100w 条数据
- 消耗时间:
1706 毫秒
测试数据仅供参考
添加索引查询性能测试报告
手动添加索引
db.user_scores.ensureIndex({score:-1,date:-1})
OK,来看看测试报告
- 数据量:
100w 条数据
- 消耗时间:
40 毫秒
第二轮测试:
- 数据量:
400w 条数据
- 消耗时间:
60 毫秒
测试数据仅供参考
测试心得体会
在生成数据阶段,明显感觉速度不给力。然后把生成数据代码改为多线程的,然后junit瞬间完成,不错,程序结束了,一条数据也没有添加。所以还是只有继续等待100w级数据的插入完成。
第二天,Richard说这个测试生成数据的速度有问题,于是他把以前写的groovy代码给我,我看了下代码视乎一样的,然后我就开始早原因,以为Junit测试代码可能插入一些冗余代码或者做相关的限制,就直接部署项目测试,但问题同样存在。
后台查询spring配置文件,发现mongo的数据库连接池有个配置,然后删除使用默认配置。OK,问题得到解决!!插入速度是相当的快。45.5秒插入100w数据。
其他没啥要说的,给点32个赞吧!