2011-06-07 145 views
0

我在MongoDB中爲Rails 3應用程序使用嵌入式文檔。我喜歡我可以使用嵌入式文檔,並且所有值都返回一個查詢,並且數據庫服務器上的負載較少。但是如果我希望我的用戶能夠更新真正應該跨文檔共享的屬性,會發生什麼情況。這種操作對於MongoDB是否可行?還是我最好使用正常的基於id的關係?如果基於ID的關係走的路要在很大程度上影響性能?MongoDB和嵌入式文檔,好用例

如果您需要了解關於應用程序或數據的任何其他信息,我會很高興地通知您我正在使用的是什麼。

具有許多所有文檔共享的屬性的文檔。

Person 
name: string 
description: string 

文檔想要使用這些屬性:

Post 
(references many people) 
body: string 

回答

1

這一切都取決於你以後將如何處理你的人員模型。我知道至少有一個工作示例(使用MongoDB的博客),其開發人員將用戶數據保留在他們所做的評論中,併爲整個博客使用一個集合。好吧,他用第二個「標籤雲」:)他不需要保留所有評論者的集中列表,他不在乎。他的博客包含他之前所有網站/博客的綜合數據,總共有近6000個帖子。帖子包含評論,評論包含用戶,用戶有電子郵件,他爲每個發表評論的用戶提供「訂閱評論」選項,授權由外部OpenID服務聚合器(Loginza)處理,他保持用戶從Loginza響應獲得的電子郵件和他們的「登錄令牌」存放在他們的cookies中。所以功能非常好。

因此,真正的問題是 - 您將在以後如何處理您的用戶?如果真的覺得你需要一個單獨的集合(你將讓用戶擁有集中控制面板,進行基於站點的註冊,你將做出用戶中心化的功能等),將其分開。如果沒有 - 保持簡單,玩得開心:)

+0

謝謝,我通常是一個關係數據庫的人,我有一些固有的對冗餘數據的恐懼。 – 2011-06-09 17:48:04

+0

我剛剛講過,這個開發人員在每個文檔中都保留了全文搜索的後期關鍵字數組+3組標籤(「作者標籤」,「自動標籤」和「兩者」)。他說整個博客數據庫(6k篇+所有這些)都是32M大小,所以他不在乎冗餘,我也不應該。 – 2011-06-09 19:52:38

1

這取決於你想分享acrross文件哪些用戶信息。可以說,如果你有用戶和用戶有電子郵件。由於每個用戶的郵件數量不會超過10,20,100封,因此不會將電子郵件移動到單獨的收藏夾中。但是如果用戶說有一些大的相關信息會不斷增長,比如博客文章,那麼可以將其轉移到單獨的收藏集中。

所以答案取決於用戶文件結構。如果您顯示您的用戶文檔結構以及您打算將其轉移到單獨的收藏中,我將幫助您做出決定。

+0

嗯,我會有一組構成更復雜對象的簡單對象。例如ComplexAsset由很多元數據組成,因此我將它移入MetaData對象,ComplexAsset也有很多照片,許多視頻和其他信息,我希望跨對象使用並更新。 – 2011-06-07 15:10:19

+0

@DevinM:你能否展示一下你希望有更好理解的文檔結構。 – 2011-06-08 09:37:33

+0

那裏我已經更新了答案,我可以選擇將個人信息嵌入到文檔中或使用對該人員的引用。 – 2011-06-08 14:14:21