我們正在採用MongoDB作爲新的解決方案,並且正在嘗試爲我們的需求設計最有效的數據模型,即關於數據項之間的關係。MongoDB海量關係的最佳數據模型
我們必須在用戶,項目和列表之間保持三種關係。用戶可以有許多項目和許多列表。一個列表將有一個用戶和許多項目。一個項目可以屬於許多用戶和許多列表。後者尤其重要 - 一個項目可能屬於可能數量龐大的列表:數千個,當然可能有數十個或數十萬個。未來可能甚至達到數百萬。我們需要能夠在兩個方向上導航這些關係:例如,獲取列表中的所有項目或項目所屬的所有列表。我們還需要解決方案是通用的,以便我們可以在需要時添加更多類型的文檔和關係。
因此,似乎有兩種可能的解決方案。首先是數據庫中的每個文檔都有一個由「ID」數組組成的「關係」集合。因此,列表文檔將具有包含所有項目的ID的項目的關係集合以及具有該用戶的單個ID的關係集合。在這個模型中,當一個項目屬於許多許多用戶或許多許多列表時,這些數組將變得很龐大。
第二個模型需要一個新類型的文檔,一個「關係」文檔,存儲每個合作伙伴的ID和關係名稱。這會整體存儲更多數據,因此會影響光盤空間。它在NoSQL中看起來像是一種「非自然」的方式來解決這個問題。
性能明智,空間明智,架構明智,這是更好的,爲什麼?
乾杯, 馬特
感謝您的全面回答。我將嘗試使用數組,因爲讀取速度比寫入速度更重要,更新問題可以在代碼中獲得(我們不需要更新關係,因此可以繞過它們)。 – 2012-02-02 11:13:16