我目前正在MongoDB中的一个项目中从数据库中随机抽取新产品。但我的问题不是MongoDB的具体问题,我认为这是一个通用的数据库问题。如何保留每个用户使用的数据列表
该场景:
比方说,我们有一个产品集合(或表)。我们也有一个用户集合(或表)。每次用户登录时,都会显示10个产品。这些产品从收集/表中随机选择。足够简单,但问题在于,每次用户登录时,都必须提供10种他们从未见过的产品。我能想到的解决这个问题的两个明显的方法是:
每个用户开始的所有产品自己的私人列表。每次他们获得这些产品中的一种时,产品都会从其私人列表中删除。结果是,下次从先前修剪的列表中选择产品时,它只包含新项目。
每个用户都有一个以前看过的产品的私人列表。当用户登录时,他们从主列表中选择10个随机产品,将每个产品的ID与以前查看的产品列表进行比较,如果该项目出现在先前查看的列表中,应用程序会抛出该项目,选择一个新项目,并迭代,直到有10个新项目,然后将它添加到以前查看的列表下次。
#1的问题似乎是一个巨大的浪费。你基本上会复制n个用户的列表数据。同时删除/添加新项目到系统将是一场噩梦,因为它必须迭代所有用户。 #2似乎更可取,但它也有问题。为了保证10个新产品,您最终可能会向数据库进行额外的多余呼叫。随着用户越来越多地选择产品,新产品的选择越来越少,因此不得不从数据库中拿走新产品的机会大大增加。
是否有替代解决方案?我首要关心的是性能。我会放弃磁盘空间以优化性能。
选项1看起来很糟糕(特别是如果您打算定期从通用列表中添加和删除产品),我会选择选项2.对于选项2,您可以简单地询问* *不是*的产品用户的列表并从该组中随机选择。 – NullUserException
是的,我完全同意Null。我只列出了我能想到的唯一选项。我真的不喜欢这两种解决方案...... –
我唯一的选择2是,随着时间的推移,你将拥有一个用户,他们将拥有以前看过的产品的巨大列表,这可能是一个问题。 – NullUserException