mysql - 如何确定繁忙队列的优先级,以便低优先级项目也得到处理?

标签 mysql algorithm sorting queue scheduling

我们已经使用 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/

相关文章:

mysql - 我应该如何设计关系数据库中的表?

bash - 按时间戳排序 `.bash_history`

javascript - 如何优化最大值算法

algorithm - 具有彩色边缘的图形中更改次数最少的路径

algorithm - 主成分分析 m×n 矩阵实现

PHP 对同一项目进行两次多重排序

java - Java 中删除数组的最高值和最低值

php - 如何 ping MySQL 数据库并使用 PDO 重新连接?

php - mysqli 是否在同一个请求中重用连接?

php - PHP $ _GET数组插入到mysqli吗?