我有一個可能會非常大的集合。現在我知道MongoDB實際上並沒有問題,但我真的不知道如何設計一個可以輕鬆處理大型數據集的模式。所以我要介紹一下這個問題。將大集合拆分爲更小的集合?
我們正在爲我們的客戶收集大量數據。基本上,當我們收集這些數據時,它表示爲一個三元組,可以說(a,b,c),其中b和c分別是集合B和C的成員。在這個特殊情況下,我們知道B和C集合隨着時間的推移不會增長很多。對於我們目前的客戶,我們正在談論約20萬名會員。然而,A組是隨着時間的推移而不斷增長的組合。目前,我們每個客戶約有2,000,000名會員,但是這將會增長(可能很快)。此外,b-> a和c-> a之間存在1→n的關係。
該數據集的工作量基本上分爲3個用例。收藏將定期更新,其中A將得到最多的寫入,而B和C將得到一些,但不是很多。第二個用例是對B的隨機訪問,然後聚合C中與b中b有關的一些文檔。最後一個用例基本上是將來自A和B的大子集流化以生成一些新數據。
我們面臨的問題是指標越來越大。目前,我們有大約8個小客戶的測試設置,目前總數據集大小約爲15GB,索引運行大約3GB到4GB。這裏的問題是我們的數據集中沒有真正的熱區。它基本上會在所有文檔中均勻分佈負載。
基本上我們已經想出了兩個選擇來做到這一點。我上面描述的那個,所有客戶的所有數據都堆積成一個集合。這意味着我們必須在某個字段中創建索引,將該集合中的文檔鏈接到特定的客戶。
其他選項是將所有b和c放在一起(這些集合相對較小),但將C集合分爲一個,每個客戶一個。我可以想象這最後一個解決方案有點難以管理,但由於我們很少同時訪問多個客戶的數據,所以它可以防止內存問題。 MongoDB將能夠將客戶索引加載到內存中,並從那裏運行。
你對此有何看法?
P.S .:我希望這不是太含糊,如果有什麼不清楚的話,我會進入更多的細節。
謝謝您的回答,我剛安裝了2.2和我要去尋找到把一個到它自己的數據庫。 – Blubber