我目前正在MongoDB中的一個項目中從數據庫中隨機抽取新產品。但我的問題不是MongoDB的具體問題,我認爲這是一個通用的數據庫問題。如何保留每個用戶使用的數據列表
該場景:
比方說,我們有一個產品集合(或表)。我們也有一個用戶集合(或表)。每次用戶登錄時,都會顯示10個產品。這些產品從收集/表中隨機選擇。足夠簡單,但問題在於,每次用戶登錄時,都必須提供10種他們從未見過的產品。我能想到的解決這個問題的兩個明顯的方法是:
每個用戶開始的所有產品自己的私人列表。每次他們獲得這些產品中的一種時,產品都會從其私人列表中刪除。結果是,下次從先前修剪的列表中選擇產品時,它只包含新項目。
每個用戶都有一個以前看過的產品的私人列表。當用戶登錄時,他們從主列表中選擇10個隨機產品,將每個產品的ID與以前查看的產品列表進行比較,如果該項目出現在先前查看的列表中,應用程序會拋出該項目,選擇一個新項目,並迭代,直到有10個新項目,然後將它添加到以前查看的列表下次。
#1的問題似乎是一個巨大的浪費。你基本上會複製n個用戶的列表數據。同時刪除/添加新項目到系統將是一場噩夢,因爲它必須迭代所有用戶。 #2似乎更可取,但它也有問題。爲了保證10個新產品,您最終可能會向數據庫進行額外的多餘呼叫。隨着用戶越來越多地選擇產品,新產品的選擇越來越少,因此不得不從數據庫中拿走新產品的機會大大增加。
是否有替代解決方案?我首要關心的是性能。我會放棄磁盤空間以優化性能。
選項1看起來很糟糕(特別是如果您打算定期從通用列表中添加和刪除產品),我會選擇選項2.對於選項2,您可以簡單地詢問* *不是*的產品用戶的列表並從該組中隨機選擇。 – NullUserException
是的,我完全同意Null。我只列出了我能想到的唯一選項。我真的不喜歡這兩種解決方案...... –
我唯一的選擇2是,隨着時間的推移,你將擁有一個用戶,他們將擁有以前看過的產品的巨大列表,這可能是一個問題。 – NullUserException