[英]Mongo DB schema designing problem
我正在為像stackoverflow這樣的站點設計一個mongo db模式。 有問題和用戶。 用戶可以將問題添加到他們喜歡的列表中,他們可以在收藏夾列表中搜索問題。
我有2個收藏,作為用戶和問題。 問題是如何存儲收藏夾。 有2個選項
我應該采取哪種方法? 請記住,我也需要搜索用戶的收藏夾。
對於db / record大小的估計,假設stackoverflow具有的問題數,用戶db操作數
欲了解更多信息;
這個應用程序是一個用c#編寫的asp.net mvc,希望用Lucene.NET進行搜索
提前致謝
如果您像SO那樣設計網站並希望獲得相同的性能,那么您肯定需要對數據進行非規范化。 因此,我建議將用戶喜愛的問題ID存儲在用戶中,並存儲和存儲用戶ID的問題。 在收藏夾操作期間,您需要在兩個位置插入數據(用戶,問題),但您將能夠檢索快速用戶/問題收藏夾。
順便說一句:如果你將lucene與mongodb一起使用,你會遇到來自mongodb的相關加載問題。
如果您需要真正的全文搜索,可以試試RavenDB 。 它也很棒的nosql數據庫,它原生支持Lucene語法。
編輯:
當您設計像SO這樣的網站時,請記住:
有一個單獨的UserFavories集合是更好的方法。 因為收藏的大小在任何時候都是未知的,並且它會繼續增長
UserFavories
-UserID (BSON Objectid)
- id of the user who posted
- Name of the user who posted
- Name of the question
- Question id
- url to the question
我們認為存儲Userid,Question Id足以在大多數時間找到收藏夾。 但是在非sql中,最好將非常相關的信息與id(避免連接)一起存儲。 在這種情況下,您存儲發布問題的用戶的ID和名稱,以及問題的名稱,ID和URL,這樣您只需查詢此doc即可輕松顯示收藏夾,如下所示
它不是一個確切的方法,但它會給你一個想法..
如果要顯示每個問題的收藏標記數,您應該將它們與問題一起存儲,以避免搜索用戶數據庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.