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个赞吧!

来源: 雨林博客(www.yl-blog.com)