【问题标题】:How to randomly select new elements from an expandig list of elements for each user?如何从每个用户的扩展元素列表中随机选择新元素?
【发布时间】:2015-12-18 19:17:02
【问题描述】:

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

编辑:好的,在问了我的同事同样的问题后,他们提出了“Bloom Filters”,有人同意吗?

【问题讨论】:

    标签: database algorithm feed recommendation-engine bloom-filter


    【解决方案1】:

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

    【讨论】:

    • 这对于有限数量的用户或内容来说是一个很好的解决方案,但是我有几百万的用户,几百万的内容(有上千个类别),每个用户都有几十个兴趣;我认为您的解决方案的磁盘开销太大了,不是吗?
    • 在这种情况下,您所做的是将用户映射到机器,并且每台机器都会跟踪它需要做什么。也有关于仅在最后一分钟在每个用户优先级队列中插入内容的优化。但最终,您要尝试解决与 Twitter 相同的基础架构问题,并且由于与它们相同的原因,这将很困难。
    猜你喜欢
    • 2014-02-07
    • 1970-01-01
    • 2021-12-30
    • 2013-10-19
    • 2023-01-11
    • 2018-02-16
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多