2013-10-10 66 views
0

我在這裏獲得關於在我的應用程序中構建我的數據模型(mongodb)的最佳方法的建議。Spring,mongodb數據模型建議

比方說,我將這些實體:

用戶: 與所有常見的屬性一個用戶,我需要每個用戶有追隨者和下面的列表。 每個用戶也將有一個他感興趣的「發佈」列表。

發表: 一篇文章將有一個內容,一個創建日期,一個作者(用戶),一個喜歡該帖子的用戶列表(我希望能夠從帖子中檢索用戶信息),一個評論列表(評論)

評論: 評論將有一個作者(用戶),一個內容,並且必須鏈接到一個帖子。

我在想這個應用程序處理大量的內容和用戶,這就是爲什麼我真的關心這個數據模型,並且我希望能夠在可維護性和性能方面構建它的最佳方式。

我真的不能自己決定在哪種情況下,我需要使用嵌入式文檔功能或者重現像關係數據模型。

你將如何構建這個數據模型?

回答

1

我們正在將我們的帖子從MySQL遷移到MongoDB,所以我考慮過這些相同的事情。

我們決定將用戶和帖子保留在不同的集合中,並且只嵌入我們感興趣的各種屬性。因此,例如在一篇文章中,我們有一個喜歡那篇文章的用戶數組,但數組中的每個元素只有用戶的名稱和用戶名。顯示帖子時,我們可以顯示喜歡帖子的用戶名列表,並使用用戶名生成每個用戶的鏈接。

需要考慮的事情是,如果用戶更改他們的名字或用戶名,那麼你需要更新他們創建或喜歡的每一篇文章。我們不允許更改用戶名,並且決定在我們的情況下更新名稱不是必需的。

這種方法在性能方面的問題是MongoDB自動添加到文檔以允許它們增長的填充以及如果文檔增長超過分配給它的空間時移動文檔的開銷。我們的系統比讀取帖子的寫入要重得多,所以這些是我們很樂意處理的事情。

在MongoDB中設計模式的正確方法最終取決於您如何訪問數據以及您的特定用例。我們也剛剛開始,但是這種方法對我們來說是有意義的。

+0

你是如何繼續限制數組的內容在用戶的名稱和用戶名? – user2865790

+0

當用戶喜歡帖子時,我們手動將只有名稱和用戶名的對象推送到數組上。 – Brett

+0

好的。我問這個是因爲我相信我已經看到一種方法可以自動使用mongo來做這件事。但我找不到它了。 – user2865790