從2012年3月13日起,我安裝了最新的MongoDB 64位數據庫和官方C#驅動程序。我使用遊標獲得了一些意想不到的性能結果。MongoDB C#光標性能問題
以下約26.8 K /秒的代碼將檢索和環通500000條記錄在我的Core 2 Duo 2 GHz的筆記本電腦:
var query = Query.EQ("_H._t", "Car");
var cursor = mc.FindAs<RoctObj>(query);
double priceTot = 0d;
foreach (RoctObj item in cursor)
{
Car car = (Car)item._H;
priceTot += car.Price;
}
這似乎是合理的。接下來,我調整了查詢,以便只返回721個結果。代碼接管1.1秒長於執行如果在foreach段被替換爲:
long i = cursor.Count();
鑑於第一實施例的速度,721個記錄應該只需要幾分之一秒進行迭代。我知道還有一些其他的開銷,但他們應該那麼糟糕。我不明白爲什麼我要+1.1秒。
任何想法?
EDIT
下面是備用的查詢。請注意,查詢時間不是問題。這是迭代時間。
var query = Query.And(
Query.LTE("_H.Price", BsonDouble.Create(80000d)).GTE(BsonDouble.Create(40000d)),
Query.LTE("_H.Cylinders", BsonDouble.Create(8d)).GTE(BsonDouble.Create(4d)),
Query.LTE("_H.Capacity", BsonDouble.Create(3000d)).GTE(BsonDouble.Create(2000d)),
Query.LTE("_H.TopSpeed", BsonDouble.Create(200d)).GTE(BsonDouble.Create(100d))
);
您是如何調整查詢的?你剛剛使用了「限制」嗎?您應該使用'explain()'功能來更好地瞭解這兩個查詢計劃,並且可以將其添加到您的問題中。 – 2012-03-13 19:36:22
我在編輯中顯示了調整後的查詢。雖然查詢的執行時間不是問題,但我該如何使用C#中的解釋? – IamIC 2012-03-13 19:39:42
而不是使用C#驅動程序進行解釋,請使用shell或更好的GUI,比如MongoVUE,這非常棒。你確定它不是查詢時間的問題嗎?你怎麼確定? MongoDB不會一次返回所有結果,它會返回一個遊標,它會一次一個記錄地從數據庫中讀取數據,就像應用程序要求的那樣(即在迭代過程中) – 2012-03-13 19:42:42