您的位置:首页 > 数据库 > Mongodb

MongoDB 1000W级数据 Insert和Query和Delete性能测试(分别测试 不加索引 和 加索引)

2011-10-15 16:12 671 查看
MongoDB
1000W级数据 Insert和Query和Delete性能测试(分别测试 不加索引 和 加索引)

转自:http://blog.csdn.net/crazyjixiang/article/details/6630624

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

view
plainprint?

^_^[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

测试程序:

view
plainprint?

#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条测试 #...................

view
plainprint?

^_^[root@:~/svn/nugget/MongoDB/utest]#./insertData

MongoDB Connected OK!

Time:207s:194125μs

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

我们让MongoDB全部遍历一遍:

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

view
plainprint?

> db.users.find().sort({'_id':-1})

{ "_id" : ObjectId("4e2cbdf4a1ca039d82214e33"), "NewsId" : "dgvshdhevmjgunvbepgdkzirqk" }

第一条数据的NewsId为 dgvshdhevmjgunvbepgdkzirqk

测试程序:

view
plainprint?

^_^[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条删除测试 #...................

view
plainprint?

^_^[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条删除最后一条测试 #...................

view
plainprint?

^_^[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

加索引测试:

view
plainprint?

> 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条测试 #...................

view
plainprint?

^_^[root@:~/svn/nugget/MongoDB/utest]#./insertData

MongoDB Connected OK!

Time:2019s:19419μs

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

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

view
plainprint?

^_^[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条测试 #...................

view
plainprint?

^_^[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中删除一条测试 #...................

view
plainprint?

^_^[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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: