[英]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.