MongoDB的:找到数以百万计的记录的集合数()指令的执行时间?(MongoDB: find ex

2019-10-20 21:32发布

我试图找到其上由数以百万计的TESTDATA记录,具有以下情形的集合进行计数()所需的时间: -

1)从1日蒙戈外壳我用的是代码中插入数百万条记录到集合

for (var i = 0; i < 10000000; ++i){ 
  db.unicorns.insert({name: 'sampleName', gender: 'm', weight: '440' });
}

2)从2ndMongo壳我试图找到COUNT()在该集合( 小鬼:当插入还是会被在1日蒙戈壳牌执行)

db.unicorns.count()

我研究却发现解释()和统计()不能与计()命令。

一些

我需要找出需要多少时间来算()时,有插入回事收集(有点像现场的情况)?

是否有这样做的任何其他好办法?

Answer 1:

MongoDB中有一个内置的profiller,您可以通过启用:

db.setProfilingLevel(2)

而不是“2”,你可以从列表中选择波纹管的任何选项:

  • 0 -分析器是关闭的,不收集任何数据。 mongod的总是比slowOpThresholdMs门槛,其日志写入操作更长的时间。
  • 1 -收集仅供较慢的操作分析数据。 默认情况下,缓慢操作是那些超过100毫秒慢。 您可以修改阈值“慢”与slowOpThresholdMs运行选项或命令的setParameter操作。 请参阅指定较慢的操作部分的阈值以获取更多信息。
  • 2 -收集分析信息:所有数据库操作的数据。

你可以通过检查MongoDB中的system.profile集合看到你查询的结果..

编辑:

如果你想测试的表现,你可以使用能够从蒙戈控制台执行下面的代码片段:

> 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()

而我的结论如下:

  1. 围绕170ms 添加索引 (APPART从ID)返回的数10万条记录
  2. 通过ID不到一毫秒 计算 (不计任何查询)返回的计数
  3. 用游标ID计数 (注意.find()将作为光标移到稽征法)在不到一毫秒返回的计数

因此, 更多的索引你的收藏有慢查询会 。 如果通过_id指望它会瞬间 ,如果您有它的规模根据指标数的 综合指数



Answer 2:

更简单的方法是

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和每分贝和收集调用它。



文章来源: MongoDB: find execution time for count() command on millions of records in a collection?