[英]MongoDB: find execution time for count() command on millions of records in a collection?
我正在尝试寻找在包含数百万个testdata记录的集合上执行count()所需的时间,以下情况是:
1)从1st Mongo Shell,我使用代码将数百万条记录插入到集合中
for (var i = 0; i < 10000000; ++i){
db.unicorns.insert({name: 'sampleName', gender: 'm', weight: '440' });
}
2)我试图从2ndMongo Shell上找到该collection上的count()( Imp:当插入仍在第一Mongo Shell上执行时)
db.unicorns.count()
我研究了一下,但发现explain()和stats()无法应用于count()命令。
一些
我需要找出在集合上进行插入操作时count()需要花费多少时间(类似于实时场景)?
还有其他好的方法吗?
MongoDB具有内置的填充器,您可以通过以下方式启用它:
db.setProfilingLevel(2)
您可以从下面的列表中选择任何选项来代替“ 2”:
通过检查MongoDB中的system.profile集合,您可以查看查询结果。
编辑:
如果要测试性能,可以使用以下可从mongo控制台执行的代码片段:
> for (var i = 0; i < 10000000; ++i) { db.countTest.insert({a: i % 10}) }
> db.countTest.ensureIndex({a:1})
> db.countTest.count({a: 1})
> db.countTest.count()
> db.countTest.find().count()
我的结论如下:
因此,集合中的索引越多, 查询的速度 就越 慢 。 如果按_id计数,它将是即时的 ;如果您有复合索引 ,它将根据索引的数量进行缩放 。
更简单的方法是
function timeCount(database, collection) {
db = db.getSiblingDB(database);
var start = new Date().getTime();
db.collection.count();
print("msecs taken: "+ (new Date().getTime() - start) );
}
现在您可以使用
timeCount("yourDB","unicorns")
您可以将函数放入js文件并通过--shell
参数加载,也可以将其放入~/.mongorc.js
并在每个数据库和集合中调用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.