MongoDB 1000W級資料 Insert和Query和Delete效能測試(分別測試 不加索引 和 加索引)

來源:互聯網
上載者:User

先看下測試機效能(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/meminfoMemTotal:      4040580 kB^_^[root@:~]# free -m             total       used       free     shared    buffers     cachedMem:          3945       3715        230          0         40       2626-/+ buffers/cache:       1048       2897Swap:         4094          2       4092^_^[root@:~]#getconf LONG_BIT64^_^[root@:~]#more /etc/redhat-releaseRed Hat Enterprise Linux Server release 5.5 (Tikanga)^_^[root@:~]#uname -r2.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.2connecting to: test> var startTime = new Date();> > db.users.find({NewsId:"dgvshdhevmjgunvbepgdkzirqk"});{ "_id" : ObjectId("4e2ccfd2a1ca039d82527b34"), "NewsId" : "dgvshdhevmjgunvbepgdkzirqk" }> > (new Date().getTime()-startTime.getTime())/10005.846s> bye

......................# MongoDB 不加索引 1000W條刪除測試 #...................

^_^[root@:/usr/local/mongodb/bin]#./mongo 10.7.3.228 < bat.jsMongoDB shell version: 1.8.2connecting 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.jsMongoDB shell version: 1.8.2connecting 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.2connecting to: test> var startTime = new Date();> > db.users.find({NewsId:"nxuvdqtjrrptoyildolesbkqmd"});{ "_id" : ObjectId("4e2ccc2ea1ca039d82b9e4b3"), "NewsId" : "nxuvdqtjrrptoyildolesbkqmd" }> > (new Date().getTime()-startTime.getTime())/10000.022s> bye

......................# MongoDB 加索引 刪除1000W條測試 #...................

^_^[root@:/usr/local/mongodb/bin]#./mongo 10.7.3.228 < bat.jsMongoDB shell version: 1.8.2connecting 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.jsMongoDB shell version: 1.8.2connecting 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 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.