簡體   English   中英

MongoDB:查找count()命令在集合中數百萬條記錄上的執行時間?

[英]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”:

  • 0-探查器已關閉,不收集任何數據。 mongod對其日志的寫操作總是長於slowOpThresholdMs閾值。
  • 1-收集性能分析數據僅用於慢速操作。 默認情況下,慢速操作是指那些慢於100毫秒的操作。 您可以使用slowOpThresholdMs運行時選項或setParameter命令修改“慢速”操作的閾值。 有關更多信息,請參見指定慢速操作閾值部分。
  • 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()

我的結論如下:

  1. 添加索引 (來自id的appart)在大約170毫秒內返回了1000萬條記錄的計數
  2. 按id計數(不進行任何查詢的計數),返回的計數在不到毫秒的時間內
  3. 使用光標用id計數 (請注意,.find()將充當集合上的光標)在不到一毫秒的時間內返回了計數

因此,集合中的索引越多, 查詢速度 就越 如果按_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM