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

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

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

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

  1. ^_^[root@:~]#grep "model name" /proc/cpuinfo | cut -f2 -d:  
  2.  Intel(R) Xeon(R) CPU           E5606  @ 2.13GHz  
  3.  Intel(R) Xeon(R) CPU           E5606  @ 2.13GHz  
  4.  Intel(R) Xeon(R) CPU           E5606  @ 2.13GHz  
  5.  Intel(R) Xeon(R) CPU           E5606  @ 2.13GHz  
  6.  Intel(R) Xeon(R) CPU           E5606  @ 2.13GHz  
  7.  Intel(R) Xeon(R) CPU           E5606  @ 2.13GHz  
  8.  Intel(R) Xeon(R) CPU           E5606  @ 2.13GHz  
  9.  Intel(R) Xeon(R) CPU           E5606  @ 2.13GHz  
  10. ^_^[root@:~]#grep MemTotal /proc/meminfo  
  11. MemTotal:      4040580 kB  
  12. ^_^[root@:~]# free -m  
  13.              total       used       free     shared    buffers     cached  
  14. Mem:          3945       3715        230          0         40       2626  
  15. -/+ buffers/cache:       1048       2897  
  16. Swap:         4094          2       4092  
  17. ^_^[root@:~]#getconf LONG_BIT  
  18. 64  
  19. ^_^[root@:~]#more /etc/redhat-release  
  20. Red Hat Enterprise Linux Server release 5.5 (Tikanga)  
  21. ^_^[root@:~]#uname -r  
  22. 2.6.18-194.el5  


测试程序:

  1. #include <iostream>  
  2. #include <mongo/client/dbclient.h>  
  3. using namespace std;  
  4. using namespace mongo;  
  5.   
  6. #define INIT_TIME \  
  7.         struct timeval time1,time2; \  
  8.   
  9. #define START_TIME \  
  10.         gettimeofday(&time1,NULL); \  
  11.   
  12. #define STOP_TIME \  
  13.         gettimeofday(&time2,NULL); \  
  14.   
  15. #define PRINT_TIME \  
  16.         cout<<"Time:"<<time2.tv_sec-time1.tv_sec<<":"<<time2.tv_usec-time1.tv_usec<<endl;  
  17.   
  18. int main() {  
  19.         srand(time(NULL));  
  20.         char ar[26+1];  
  21.         DBClientConnection conn;  
  22.         conn.connect("localhost");  
  23.         cout<<"MongoDB Connected OK!"<<endl;  
  24.         int count=10000000;  
  25.         INIT_TIME;  
  26.         START_TIME;  
  27. //insert  
  28. #if 1  
  29.         while (count--) {  
  30.                 for (int i=0; i<26; i++) {  
  31.                         ar[i] = rand()%26+97;  
  32.                 }  
  33.                 ar[26]='\0';  
  34.                 BSONObj p = BSON("NewsId"<<ar);  
  35.                 conn.insert("test.users",p);  
  36.         }  
  37. #endif  
  38.   
  39.         STOP_TIME;  
  40.         PRINT_TIME;  
  41.         return 0;  
  42. }  


不加索引测试:

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

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


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

我们让MongoDB全部遍历一遍:

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

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


第一条数据的NewsId为   dgvshdhevmjgunvbepgdkzirqk

测试程序:

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

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

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


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


加索引测试:

  1. > db.users.getIndexes()  
  2. [  
  3.         {  
  4.                 "name" : "_id_",  
  5.                 "ns" : "test.users",  
  6.                 "key" : {  
  7.                         "_id" : 1  
  8.                 },  
  9.                 "v" : 0  
  10.         }  
  11. ]  
  12. > db.users.ensureIndex({NewsId:1})  
  13. > db.users.getIndexes()             
  14. [  
  15.         {  
  16.                 "name" : "_id_",  
  17.                 "ns" : "test.users",  
  18.                 "key" : {  
  19.                         "_id" : 1  
  20.                 },  
  21.                 "v" : 0  
  22.         },  
  23.         {  
  24.                 "_id" : ObjectId("4e2cc408572ff09d98851cb7"),  
  25.                 "ns" : "test.users",  
  26.                 "key" : {  
  27.                         "NewsId" : 1  
  28.                 },  
  29.                 "name" : "NewsId_1",  
  30.                 "v" : 0  
  31.         }  
  32. ]  

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

  1. ^_^[root@:~/svn/nugget/MongoDB/utest]#./insertData   
  2. MongoDB Connected OK!  
  3. Time:2019s:19419μs  

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

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

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


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

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



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

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



总结下测试数据吧:

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

查询 5.846s

删除全部 103.94s  

删除最后一条 3.991s



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

查询 0.022s 

删除全部 570.782s  

删除最后一条 0.025s


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值