簡體   English   中英

Mongo DB模式設計問題

[英]Mongo DB schema designing problem

我正在為像stackoverflow這樣的站點設計一個mongo db模式。 有問題和用戶。 用戶可以將問題添加到他們喜歡的列表中,他們可以在收藏夾列表中搜索問題。

我有2個收藏,作為用戶和問題。 問題是如何存儲收藏夾。 有2個選項

  1. 與用戶一起存儲收藏的問題ID列表
  2. 存儲用戶ID列表(將此問題添加到收藏夾的用戶)以及問題。

我應該采取哪種方法? 請記住,我也需要搜索用戶的收藏夾。

對於db / record大小的估計,假設stackoverflow具有的問題數,用戶db操作數

欲了解更多信息;

這個應用程序是一個用c#編寫的asp.net mvc,希望用Lucene.NET進行搜索

提前致謝

如果您像SO那樣設計網站並希望獲得相同的性能,那么您肯定需要對數據進行非規范化。 因此,我建議將用戶喜愛的問題ID存儲在用戶中,並存儲和存儲用戶ID的問題。 在收藏夾操作期間,您需要在兩個位置插入數據(用戶,問題),但您將能夠檢索快速用戶/問題收藏夾。

順便說一句:如果你將lucene與mongodb一起使用,你會遇到來自mongodb的相關加載問題。

如果您需要真正的全文搜索,可以試試RavenDB 它也很棒的nosql數據庫,它原生支持Lucene語法。

編輯:

當您設計像SO這樣的網站時,請記住:

  1. 非規范化
  2. 異步請求處理
  3. 后台工作

有一個單獨的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM