mongodb性能测试

开发语言
2014-09-11 17:51:27
分享

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个赞吧!
The End
免责声明:本文系转载,版权归原作者所有;旨在传递信息,不代表本站观点和立场。