2014-03-27 62 views
2

我一直在非常緩慢的貓鼬查詢。我將它縮小到Mongoose創建對象的方式或數據庫服務器請求中的實際延遲。我幾乎沒有數據庫中的任何數據(< 1000個對象在每個集合中),並手動運行查詢(類似於產品中的查詢)並對它們進行配置,並且它們都在2-4毫秒運行<。緩慢的貓鼬請求

兩個大的問題,我一直無法通過網上搜索/看文檔弄清楚:

  1. 如何獲取貓鼬是在蒙戈運行原始查詢?
  2. 調用數據庫到數據庫服務器的次數 - 例如,如果我在回調函數中有一對包含調用對象,排序調用和嵌套填充調用的查詢,那麼會對服務器執行多少次調用。

這裏有一些延遲時間我看到的:

Login 
localhost + localDB = 58ms 
localhost + mongoHQ = 127ms 
heroku + mongoHQ = 287ms 

Get Data 
localhost + localDB = 281ms 
localhost + mongoHQ = 1657ms 
heroku + mongoHQ = 2190ms 

更新1

我想通了,如何記錄查詢和檢查上一羣人。我認爲它灌進一個查詢與一羣上填入電話 - 我注意到,在生成查詢的人口部分,貓鼬輸出Mongo的查詢,如:

users.find({ _id: { '$in': [ ObjectId("531ec0e17c0b16a82be4f506"), 
ObjectId("531ec0e17c0b16a82be4f506"), ObjectId("531ec0e17c0b16a82be4f506") ... 

,其中,ID重複多時間(在這種情況下是幾百次) - 我認爲這是放緩和測試代碼的原因,我發現每個填充調用都會將約.3s-.5s添加到請求時間。填充調用也在一個數組字段上運行 - 這也保證了在100s內查詢的id數 - 低1000(重複)。

有沒有辦法刪除重複的條目時做一個填充調用?

+0

你能與蒙戈控制檯連接到其中一個實例,看看它們是緩慢的直接連接時?我無法想象,你發佈的時代不能用貓鼬的對象人口來解釋,除非它有數萬人。 – WiredPrairie

+0

@WiredPrairie它似乎很好 - 當我運行登錄用戶測試(見上文)時,連接到遠程分區時速度非常快127ms –

+0

@WiredPrairie我做了一些調查,你認爲這可能是因爲有很多填充調用中的參數? –

回答

3

嘗試更改您的查詢以使用「精益」選項並查看時間量是否減少。這將繞過貓鼬實體的創建。

http://mongoosejs.com/docs/api.html#query_Query-lean

+0

燁試過,今天上午的表現 - 其實似乎沒有有所作爲(有時候請求有點快一些,有時會慢一點 - + -10ms) –

+0

這有助於我解決這個問題。削減一半的時間。 –