Database 如何从每个用户的扩展元素列表中随机选择新元素?

Database 如何从每个用户的扩展元素列表中随机选择新元素?,database,algorithm,feed,recommendation-engine,bloom-filter,Database,Algorithm,Feed,Recommendation Engine,Bloom Filter,我有一个不同类别的内容列表,还有创建时间和可能的过期时间,随着时间的推移(添加了新项目),我还有许多用户具有不同的偏好。 现在我想做的是,每次用户提出新的内容时,向他们展示新的内容,没有重复,但也有一定程度的随机性。 显然,我不能将所有显示的内容存储给用户,每次都要检查整个集合。 一种可能的解决方案是使用一些集群,将每个用户分配到一个集群,并为每个集群存储一些数据,但我认为有更好的方法 编辑:好的,在我的同事问了同样的问题后,他们建议使用“Bloom过滤器”,有人同意吗?对于每个用户,都有一个要

我有一个不同类别的内容列表,还有创建时间和可能的过期时间,随着时间的推移(添加了新项目),我还有许多用户具有不同的偏好。 现在我想做的是,每次用户提出新的内容时,向他们展示新的内容,没有重复,但也有一定程度的随机性。 显然,我不能将所有显示的内容存储给用户,每次都要检查整个集合。 一种可能的解决方案是使用一些集群,将每个用户分配到一个集群,并为每个集群存储一些数据,但我认为有更好的方法


编辑:好的,在我的同事问了同样的问题后,他们建议使用“Bloom过滤器”,有人同意吗?

对于每个用户,都有一个要显示的项目优先级队列。每次创建项目时,将其以随机优先级插入到每个感兴趣用户的优先级队列中。当用户查看时,从优先级队列中删除最上面的项,直到找到一个未过期的项为止。所有每个用户的操作都会有时间
O(log(n))
,这应该是可以接受的。

对于数量有限的用户或内容来说,这是一个很好的解决方案,但我有数百万用户,数百万内容(数千个类别),每个用户都有几十个兴趣;我认为您的解决方案的磁盘开销太大了,不是吗?在这种情况下,您所做的是将用户映射到机器,并且每台机器都跟踪它需要什么。此外,还有一些优化措施,就是仅在最后一分钟将内容插入每个用户的优先级队列。但最终你要解决的是Twitter所面临的同样的基础设施问题,出于同样的原因,这对他们来说是很困难的。