2015-06-15 170 views
1

我有一個名爲posts的集合,它由多篇文章帖子和一個名爲users的集合組成,其中包含大量的用戶信息。每個post都有一個名爲author的字段,該字段引用users集合中的帖子作者。查詢的數據庫設計有類似於sql的查詢

在我的主頁上,我將查詢posts集合並返回到客戶端的帖子列表。由於我也想顯示帖子的作者,我需要做類似於sql的連接命令,以便所有帖子都有作者姓名,ID,等等。

如果我返回一個40個職位的列表,我將不得不做40個sqllike連接。這意味着每次我會做41次查詢以獲得帶有作者信息的帖子列表。這看起來非常昂貴。

我想在我存儲發佈信息時存儲作者信息。這樣我只需要執行1個查詢來檢索所有帖子和作者信息。但是,當用戶信息發生變化時(例如名稱更改),該列表將過時,並且似乎不太容易管理這樣的列表。

那麼是否有更好的或標準的方法呢?

P.S:我使用MongoDB的

+0

核心文檔中有一整段常見示例和案例。 [數據建模](http://docs.mongodb.org/manual/core/data-modeling-introduction/) –

+0

是的,謝謝我只是讓問題變得非常簡單。實際情況是相當複雜的,有1個用戶配置文件鏈接到多個屬性,如pagelikes,評論,簽到... –

+0

像例如上述40個帖子是由同一個作者。當作者更改名稱時,您只需更新40次帖子。這對我來說似乎很便宜。但我不確定是否有更通用的方法.. –

回答

3

蒙戈是的NoSQL數據庫。根據定義,NoSQL解決方案旨在非規範化(所有需要的數據應該位於同一位置)

在您的示例中,作者和帖子之間的關係是一對多但作者與帖子的比率非常小。簡而言之,不。的作者相比,沒有。的帖子會很小。

基於此,您可以安全地將作者信息存儲在posts集合中。

如果您需要查詢帖子集合,即如果您知道您的大多數查詢將在帖子集合上執行,那麼將作者存儲在帖子中是有意義的。它不會佔用巨大的空間來存儲一個屬性,但它將在查詢性能和編碼/檢索數據方面產生巨大的差異。

+0

如果作者更改了他的名字,該怎麼辦?我是否應該遍歷整個後期集合並相應地更新作者信息? –

+0

也有一位作者可能有1000個帖子。在這種情況下,當他連續三次更新他的名字時,那就是3000次寫入。那麼這是否意味着我可能會讓人們有機會輕鬆關閉服務器? –

+0

如果作者更改其名稱,則單個更新查詢(使用find子句中的作者名稱)將在任何地方更新名稱。您不必迭代(類似於RDBMS) –