我们已经使用 mysql 表实现了一个基本的作业队列,其中某些项目的优先级低于其余项目。由于队列中不断充满高优先级项目,因此低优先级项目有时永远得不到处理。
在我们的实现中,我们将项目及其优先级插入到表中,并从队列中获取下一个项目,我们查询表如下:
SELECT * FROM `queue` ORDER BY `priority` DESC, `created_at` ASC
我们应该如何为队列建模,以便低优先级的项目仍能及时得到处理?
编辑
队列通常包含超过 25,000 个项目。
最佳答案
也许您可以根据在队列中的时间来衡量优先级。这样,任务未完成的时间越长,优先级就会越高,最终这些任务应该移到列表的顶部。
看起来您已经有了关于任务记录时间(“created_at”)的数据,所以我认为您拥有所需的一切:
SELECT * FROM queue ORDER BY priority*( now() - created_at ) DESC
关于mysql - 如何确定繁忙队列的优先级,以便低优先级项目也得到处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18251744/