2017-06-21 177 views
0

快速提問是否索引。對於在文檔數組中查找特定「user_id」的集合,經常有查詢。見下面 -Mongodb索引或不索引

_id:"bQddff44SF9SC99xRu", 
participants: 
[ 
    { 
     type:"client", 
     user_id:"mi7x5Yphuiiyevf5", 
     screen_name:"Bob", 
     active:false 
    }, 
    { 
     type:"agent", 
     user_id:"rgcy6hXT6hJSr8czX", 
     screen_name:"Harry", 
     active:false 
    } 
] 

}

難道是添加一個索引 'participants.user_id' 是個好主意?該數組被頻繁添加,偶爾項目被刪除。

更新 我用同一套數據的本地測試後添加索引,這當然似乎在蒙哥過程中的高CPU使用率有所下降。由於這些文件只有少量更新,我認爲這是正確的舉措。我正在尋找更多可能的索引和優化。

+0

你是否經常查詢?你能忍受增加的寫入時間與查詢的性能增益嗎?這些通常是決定是否使用索引的事情。什麼不應該影響你是某人在這裏的意見。做什麼適合你。 –

回答

0

爲什麼要索引?查詢時是否存在嚴重延遲問題?還是你想提前優化?

最終這裏有很多變數使得它很難回答。包括但不限於:

  • 如何往往是查詢集合中取得
  • 多少文檔
  • 有多少用戶在每個文檔中
  • 添加多久/從文件中刪除用戶插入文檔後。
  • 你需要優化插入/更新到集合

這可能是因爲索引不是答案,而是你是如何構建你的數據。

+0

所以,是的,mongo進程的CPU使用率非常高。我使用Mongodb Compass標識的特定查詢似乎每秒執行幾次。我可以看到它每次搜索整個集合(34,000個並且正在增長)。用戶至少會插入一個文檔一次,並且每小時可以進行10次任何其他添加或刪除操作。 –