2012-03-05 86 views
4

我目前正在研究一個基於MongoDB的系統,它將存儲至少10億個文檔。這將每個月增加約5000萬。MongoDB擴展和內存使用量非常大的數據集

主集合的標識形式爲YYYYMM_SOURCEID_DOCTYPE_UUID,並充當分片索引。每個記錄產生大約1kb的索引。 99%的業務將在最近三個月的數據中發生。我們希望支持文檔的關鍵字搜索,在最近三個月的數據中表現非常出色,至少在舊版本中表現不錯。

MongoDB聽起來像一個合理的解決方案,只要我可以保持索引的活動結束在內存中?

+0

MongoDB是內存映射,這意味着只要你能保持工作集在內存中,它應該表現良好。 – Ren 2012-03-05 22:03:05

+0

這是有道理的。謝謝。 – Josh 2012-03-06 01:32:28

回答

2

我建議你改變你的片鍵與當前的好像你可能會去打到最後碎片爲一切爲重點將使所有新插入的YYYYMM位去「最右」碎片總是。 http://www.mongodb.org/display/DOCS/Choosing+a+Shard+Key#ChoosingaShardKey-Cardinality有更多的信息。

根據「關鍵字」字段的基數,您可能希望選擇它作爲分片鍵。這樣,mongodb可以輕鬆地從一個分片中獲取屬於關鍵字的所有文檔。所有的寫入仍然會去所有的分片,因爲它是按關鍵字分區的。

如果「關鍵字」的基數不是很高(即,< 100),那麼這不是一個好的分片鍵,但是,您可以將它與年份和月份結合使用,例如keywords_YYYYMM。

+0

這取決於您還想使用其他哪種文檔訪問模式,以及您希望如何執行這些模式。如果您將其添加爲評論,我會更新我的答案。 – Derick 2012-03-06 10:28:18

+0

分片鍵方法基於上面鏈接的「索引優化」部分。 MongoDB將在服務器之間拆分存儲桶,如果需要,我們可以調整它。從YYYYMM開始的想法是確保大多數活動發生在B樹的一端。我們基本上需要隨機訪問過去三個月的數據,偶爾會讀取較舊的數據。 – Josh 2012-03-06 14:50:59