2013-08-30 71 views
0

我需要一些關於如何正確設置索引w/mongodb的建議。mongodb複合或個別索引

讓說我的數據收集是這樣的:

玩家

- age 
- scores 
- fouls 
- yellow cards 
- red cards 
- offsides 

我的那個問題是,我的潛在查詢可以覆蓋索引的所有組合,例如:

Get players that age < 30 and yellow card > 3 
Get players that age < 30 and yellow card > 3 and red_cards >6 
Get players that age < 30 and red_cards card > 3 and scores > 2 
Get players that scores < 30 and yellow card > 3 and fouls < 6 and red_cards >2 
Get players that scores < 30 and yellow card > 3 and fouls < 6 and red_cards >2 and age > 25 

在這種情況下分配索引的最佳方法是什麼?如果我的集合在我的示例中有6個字段,那麼我是否需要36個索引? 或者它會是一個更好的選擇,每個索引有一個字段?

+0

每個集合的索引不能超過64個。但是,建議在這個數字下面保持**遠遠低於**。如果你的數據插入率很高,那麼保持這個數字很小就更重要。閱讀本文http://docs.mongodb.org/manual/applications/indexes/ – WiredPrairie

回答

0

這個問題的答案取決於你集合的大小,查詢速度,不同類型的查詢的分佈(有一些組參數查詢具有更高的速度,其他人)等

如果收集不到的大小100k(例如)文件,您可以確信您的所有查詢都將是快速,即使他們不使用索引並且始終進行順序掃描。另一方面,如果每秒鐘有1000個這樣的查詢,它將無法按預期工作,在這種情況下,您必須使用分析器(system.profile)來確定不同類型查詢的分佈。當你得到這個發行版時,它會很明顯,你應該創建哪些索引。

您的主要目標應該是,減少您閱讀的數據量(索引+文檔)以滿足查詢。

最後,您可以通過創建MongoDB ReplicaSet來提高讀取吞吐量。

+0

感謝您的回答,文件大小不會大於10k,但我會有很多這樣的文件(大約800 Milion),我們設計了一個高查詢率和高吞吐量的系統。在這種情況下你會推薦做什麼? – BmaorLO

+0

@BmaorLO,如果10К是單個文檔的大小,那麼你應該提及這個問題,因爲這很重要。你的原始描述大約有6個字段,這個文件的大小約爲0.1K(不是10K)。你能更清楚地寫出什麼是平均文檔大小,文檔總數,查詢率,文檔結構和典型查詢。 –

+0

你是對的,我很抱歉從一開始就不清楚。 在本週末我做了更多的研究後,數字將如下所示。 該文件將看起來像在這裏發佈的原始問題。 我將有1 Bilion這樣的記錄 每個文件將0.1K(而不是10K對此感到抱歉)。 我需要支持儘可能多的快速讀取。 您會在這種情況下推薦做什麼? – BmaorLO