我正在對mongodb與mysql進行比較,並將mysql數據導入到mongodb集合(> 500000記錄)中。 集合看起來是這樣的:MongoDB與MySQL性能 - 簡單查詢
{
"_id" : ObjectId(""),
"idSequence" : ,
"TestNumber" : ,
"TestName" : "",
"S1" : ,
"S2" : ,
"Slottxt" : "",
"DUT" : ,
"DUTtxt" : "",
"DUTver" : "",
"Voltage" : ,
"Temperature" : ,
"Rate" : ,
"ParamX" : "",
"ParamY" : "",
"Result" : ,
"TimeStart" : new Date(""),
"TimeStop" : new Date(""),
"Operator" : "",
"ErrorNumber" : ,
"ErrorText" : "",
"Comments" : "",
"Pos" : ,
"SVNURL" : "",
"SVNRev" : ,
"Valid" :
}
當比較查詢(兩者返回15條):
mysql -> SELECT TestNumber FROM db WHERE Valid=0 AND DUT=68 GROUP BY TestNumber
與
mongodb -> db.results.distinct("TestNumber", {Valid:0, DUT:68}).sort()
結果是等效的,但需要( iro)從mongodb開始17secs,而mysql從0.03秒開始。
我明白,很難做出兩個數據庫架構之間的比較,我進一步讚賞mongodb管理員的技能之一是相應地組織數據結構(因此,這不是一個公正的測試,只是導入MySQL結構)參考號:MySQL vs MongoDB 1000 reads
但是,返回差異的時間太長,無法成爲調整問題。 我(默認)MongoDB的日誌文件上寫着:
週三04年3月5日:56:36.415 [conn4089]命令NTV_Results $ cmd命令:{不同: 「結果」,關鍵: 「TestNumber」,查詢:{有效:0.0,DUT:68.0}} ntoreturn:1個keyUpdates:0 numYields:6個鎖(百萬分之一)R:21764672個reslen:250 16525ms
我也曾嘗試查詢:
db.results.group({
key: { "TestNumber": 1 },
cond: {"Valid": 0, "DUT": 68 },
reduce: function (curr, result) { },
initial: { }
})
隨着類似(17秒)的結果,我做錯了什麼線索? 這兩種服務都運行在具有Windows 7和16Gb RAM的八核心i7 3770臺式機上。
你有testnumber字段的索引嗎? –
這些函數都不是您嘗試執行的操作類型的好例子,因爲它們是被認爲被[聚合管道]取代的舊實現(http://docs.mongodb.org/manual/core/聚合管道/)閱讀進一步的信息 –
固定:需要閱讀索引的wrt mongodb。特別是如果導入現有的MySQL數據庫,因爲它們可能不是默認創建的。 –