1
回答
MongoDB 1000W级数据 Insert和Query和Delete性能测试(分别测试 不加索引 和 加索引)
百度AI开发者大赛带你边学边开发,赢100万奖金,加群:418589053   

先看下测试机性能(64bit):

^_^[root@:~]#grep "model name" /proc/cpuinfo | cut -f2 -d:
 Intel(R) Xeon(R) CPU           E5606  @ 2.13GHz
 Intel(R) Xeon(R) CPU           E5606  @ 2.13GHz
 Intel(R) Xeon(R) CPU           E5606  @ 2.13GHz
 Intel(R) Xeon(R) CPU           E5606  @ 2.13GHz
 Intel(R) Xeon(R) CPU           E5606  @ 2.13GHz
 Intel(R) Xeon(R) CPU           E5606  @ 2.13GHz
 Intel(R) Xeon(R) CPU           E5606  @ 2.13GHz
 Intel(R) Xeon(R) CPU           E5606  @ 2.13GHz
^_^[root@:~]#grep MemTotal /proc/meminfo
MemTotal:      4040580 kB
^_^[root@:~]# free -m
             total       used       free     shared    buffers     cached
Mem:          3945       3715        230          0         40       2626
-/+ buffers/cache:       1048       2897
Swap:         4094          2       4092
^_^[root@:~]#getconf LONG_BIT
64
^_^[root@:~]#more /etc/redhat-release
Red Hat Enterprise Linux Server release 5.5 (Tikanga)
^_^[root@:~]#uname -r
2.6.18-194.el5


测试程序:

#include <iostream>
#include <mongo/client/dbclient.h>
using namespace std;
using namespace mongo;

#define INIT_TIME \
        struct timeval time1,time2; \

#define START_TIME \
        gettimeofday(&time1,NULL); \

#define STOP_TIME \
        gettimeofday(&time2,NULL); \

#define PRINT_TIME \
        cout<<"Time:"<<time2.tv_sec-time1.tv_sec<<":"<<time2.tv_usec-time1.tv_usec<<endl;

int main() {
        srand(time(NULL));
        char ar[26+1];
        DBClientConnection conn;
        conn.connect("localhost");
        cout<<"MongoDB Connected OK!"<<endl;
        int count=10000000;
        INIT_TIME;
        START_TIME;
//insert
#if 1
        while (count--) {
                for (int i=0; i<26; i++) {
                        ar[i] = rand()%26+97;
                }
                ar[26]='\0';
                BSONObj p = BSON("NewsId"<<ar);
                conn.insert("test.users",p);
        }
#endif

        STOP_TIME;
        PRINT_TIME;
        return 0;
}


不加索引测试:

......................# MongoDB 不加索引 插入1000W条测试 #...................

^_^[root@:~/svn/nugget/MongoDB/utest]#./insertData              
MongoDB Connected OK!
Time:207s:194125μs


......................# MongoDB 不加索引 1000W条遍历测试 #...................

我们让MongoDB全部遍历一遍:

让测试数据倒序,取倒序后第一条数据:

> db.users.find().sort({'_id':-1})
{ "_id" : ObjectId("4e2cbdf4a1ca039d82214e33"), "NewsId" : "dgvshdhevmjgunvbepgdkzirqk" }


第一条数据的NewsId为   dgvshdhevmjgunvbepgdkzirqk

测试程序:

^_^[root@:/usr/local/mongodb/bin]#./mongo<bat.js 
MongoDB shell version: 1.8.2
connecting to: test
> var startTime = new Date();
> 
> db.users.find({NewsId:"dgvshdhevmjgunvbepgdkzirqk"});
{ "_id" : ObjectId("4e2ccfd2a1ca039d82527b34"), "NewsId" : "dgvshdhevmjgunvbepgdkzirqk" }
> 
> (new Date().getTime()-startTime.getTime())/1000
5.846s
> bye

......................# MongoDB 不加索引 1000W条删除测试 #...................

^_^[root@:/usr/local/mongodb/bin]#./mongo 10.7.3.228 < bat.js
MongoDB shell version: 1.8.2
connecting to: 10.7.3.228/test
> var startTime = new Date();  
> //db.users.find({NewsId:"csgsqdglbyfuwdjfkkrxgzyacc"});  
> db.users.remove()
> (new Date().getTime()-startTime.getTime())/1000 
103.924
> bye


......................# MongoDB 不加索引 1000W条删除最后一条测试 #...................
^_^[root@:/usr/local/mongodb/bin]#./mongo 10.7.3.228 < bat.js
MongoDB shell version: 1.8.2
connecting to: 10.7.3.228/test
> var startTime = new Date();  
> //db.users.find({NewsId:"csgsqdglbyfuwdjfkkrxgzyacc"});  
> db.users.remove({"NewsId":"nmffcewwjvbhjfyagfxlifgiud"})
> (new Date().getTime()-startTime.getTime())/1000 
3.991
> bye


加索引测试:

> db.users.getIndexes()
[
        {
                "name" : "_id_",
                "ns" : "test.users",
                "key" : {
                        "_id" : 1
                },
                "v" : 0
        }
]
> db.users.ensureIndex({NewsId:1})
> db.users.getIndexes()           
[
        {
                "name" : "_id_",
                "ns" : "test.users",
                "key" : {
                        "_id" : 1
                },
                "v" : 0
        },
        {
                "_id" : ObjectId("4e2cc408572ff09d98851cb7"),
                "ns" : "test.users",
                "key" : {
                        "NewsId" : 1
                },
                "name" : "NewsId_1",
                "v" : 0
        }
]

......................# MongoDB 加索引 插入1000W条测试 #...................
^_^[root@:~/svn/nugget/MongoDB/utest]#./insertData 
MongoDB Connected OK!
Time:2019s:19419μs

......................# MongoDB 加索引 1000W条测试遍历测试 #...................

还是一样取最后一条数据,然后看下性能:

^_^[root@:/usr/local/mongodb/bin]#./mongo <bat.js 
MongoDB shell version: 1.8.2
connecting to: test
> var startTime = new Date();
> 
> db.users.find({NewsId:"nxuvdqtjrrptoyildolesbkqmd"});
{ "_id" : ObjectId("4e2ccc2ea1ca039d82b9e4b3"), "NewsId" : "nxuvdqtjrrptoyildolesbkqmd" }
> 
> (new Date().getTime()-startTime.getTime())/1000
0.022s
> bye


......................# MongoDB 加索引 删除1000W条测试 #...................

^_^[root@:/usr/local/mongodb/bin]#./mongo 10.7.3.228 < bat.js
MongoDB shell version: 1.8.2
connecting to: 10.7.3.228/test
> var startTime = new Date();  
> //db.users.find({NewsId:"csgsqdglbyfuwdjfkkrxgzyacc"});  
> db.users.remove()
> (new Date().getTime()-startTime.getTime())/1000 
570.782
> bye



......................# MongoDB 加索引 1000W中删除一条测试 #...................
^_^[root@:/usr/local/mongodb/bin]#./mongo 10.7.3.228 < bat.js
MongoDB shell version: 1.8.2
connecting to: 10.7.3.228/test
> var startTime = new Date();  
> //db.users.find({NewsId:"csgsqdglbyfuwdjfkkrxgzyacc"});  
> db.users.remove({"NewsId":"cikjwikamhtixoykrrfjnepkwu"})
> (new Date().getTime()-startTime.getTime())/1000 
0.025
> bye



总结下测试数据吧:

没索引
添加 1 千万 记录  Time:207s:194125μs   

查询 5.846s

删除全部 103.94s  

删除最后一条 3.991s



有索引
添加 1 千万 记录 Time:2019s:19419μs 

查询 0.022s 

删除全部 570.782s  

删除最后一条 0.025s


测试MongoDB版本1.6 


原文链接:http://blog.csdn.net/crazyjixiang/article/details/6630624
举报
晨曦之光
发帖于6年前 1回/1K+阅
顶部