0

假设我在队列中有大量用户,我会定期根据速率限制的API 查询每个用户。查询完所有用户后,将重新启动该过程。应用了速率限制,因此我无法在合理的时间内检查所有用户(> 1 天检查每个人)。

每次我检查用户时,我都能检查他们上次活动的时间。如果用户最近很活跃(比如说最近几天),那么他们应该优先于根本不活跃的用户(> 一年)。但是,查询到非活动用户的概率仍然应该大于0。关于如何有效地管理这个队列,是否有任何现有的研究/方法?

目前我在想的是做一个简单的优先级队列,并让用户的初始值是他们最后一次活动的时间。任何时候查询用户时,他们在队列中的位置都会替换为他们最后一次活动的日期 + 从分布中生成的一些随机数,以便最终可以检查所有用户。

4

1 回答 1

0

经过一番思考,我决定使用贝叶斯模型来推断每个用户在事件之间的时间。我假设每个用户在一段时间内的活动量遵循泊松分布。因此,每个事件之间的时间遵循指数分布。对于速率参数,我假设它是伽马分布的。因此,后验分布是一个lomax分布。对于我添加到队列中的每个用户,我都从后面采样作为他们的新优先级#。当用户最近有活动时,我会更新他们特定于用户的超参数,然后重新采样一个新的优先级值。这使我可以灵活地根据数据调整每个用户的优先级,并为我没有任何信息的新用户设置先验。

于 2020-09-28T20:24:36.303 回答