MongoDB1000W级数据Insert和Query性能测试

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

通渭ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!

 
 
 
  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  
  2. #include  
  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:"<
  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!"<
  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"<
  35.                 conn.insert("test.users",p); 
  36.         } 
  37. #endif 
  38.  
  39.         STOP_TIME; 
  40.         PRINT_TIME; 
  41.         return 0; 

不加索引测试:

......................# 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
  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 

#p#

加索引测试:

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

......................# 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 
  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 

总结下测试数据吧:

没索引

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

查询 5.846s

有索引

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

查询 0.022s

原文链接:http://blog.csdn.net/crazyjixiang/article/details/6630624

 

【编辑推荐】

  1. 教你如何利用MySQL学习MongoDB
  2. 说说MongoDB的基础
  3. 如何用Java操作MongoDB
  4. MongoDB基于Java、PHP的一般操作和用户安全设置
  5. 设计实例对比:MySQL vs MongoDB

本文名称:MongoDB1000W级数据Insert和Query性能测试
分享URL:http://www.shufengxianlan.com/qtweb/news41/214241.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联