先看下测试机性能(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
#p#
加索引测试:
- > 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
总结下测试数据吧:
没索引
添加 1 千万 记录 Time:207s:194125μs
查询 5.846s
有索引
添加 1 千万 记录 Time:2019s:19419μs
查询 0.022s
原文链接:http://blog.csdn.net/crazyjixiang/article/details/6630624
【编辑推荐】