通过排序MySQL表来管理队列

时间:2015-02-09 15:42:20

标签: mysql sorting optimization

我有一个用户和工作队列。一次只能执行一项工作。

User       |   Job ID   |   Job Status
------------------------------------------
A          |      1     |   Waiting
A          |      2     |   Waiting
B          |      3     |   Done
B          |      4     |   Waiting
B          |      5     |   Waiting
C          |      6     |   Done
C          |      7     |   Done
C          |      8     |   Waiting

我想查询列表以确定作业的优先级,以尝试为所有用户提供相同数量的已完成作业。如果一个用户有大量已完成的作业,则队列应优先考虑其他用户的作业,直到其他用户赶上。

在这种情况下,A没有已完成的作业,因此具有最高优先级:

User  |   Completed Jobs
------------------------
A     |   0
B     |   1
C     |   2

因此队列的头部应该是A.队列中的第二项应该是用户A或用户B的作业,因为到第二个作业启动时,用户A和B都有一个作业已经完成了。一旦A和B完成了两个工作,它们与用户C的优先级相同。

User  |   Job ID  |  User Completed Jobs  |  Priority
-----------------------------------------------------
A     |   1       |  0                 0  |  1
B     |   3       |  1                 1  |  2
A     |   2       |  0 + 1             1  |  3
B     |   5       |  1 + 1             2  |  4
C     |   8       |  2                 2  |  5

用户已完成作业列很复杂,因为要计算其值,您需要考虑队列中的所有内容。

那么,在MySQL中有一个很好的方法吗?

0 个答案:

没有答案