我是mongo的新用戶(具有豐富的mysql經驗),它似乎有一些有趣的優點和缺點。顯然,專業人士可以容納的數據大小以及可以寫入記錄的速度。我有一個應用程序,我正在向一個集合寫很多日誌,到目前爲止我已經有大約7米了。我的問題是,一個看似簡單的查詢需要很長時間才能真正實現。讓我解釋。mongo聚合速度
我收藏有7米文件:
> db.alpha2.count()
7257619
現在我想指望所有記錄對於給定的CID,並且具有比一些數量較少的時間戳(本例中在未來有時間戳,所以應該什麼都算):
> db.alpha2.find({'ts': {'$lt': 1446457607}, 'cid': '2636518'}).count()
7257619
這是問題的查詢,它需要一個完整的58秒這個號碼還給我!從概念上講,這是一個非常簡單的查詢,並會在一定程度上相當於在SQL中的世界:
select count(*) from alpha2 where cid=2636518 and ts<1446457607
我沒有等價表,但我認爲這將需要小於0.1秒基於在mysql中運行根據我的經驗。那麼我該怎麼做?我計劃對大於7m記錄的數據集進行大量聚合計數。我也做了一些稍微困難的事情(地圖縮小),而且更糟(幾分鐘)。我需要這個不到一秒鐘。我究竟做錯了什麼?這是mongo預計的時間成本嗎?
我把一個指標的TS值與在此之前我的時間在上面查詢:
db.alpha2.ensureIndex({ts:1})
只有ts列上的索引,如果ts <1446457607匹配的記錄數很大,SQL也可能需要很長時間。您需要在cid和ts上使用複合索引來加快速度。 – gkamal