论坛首页 综合技术论坛

关于任务优先级的解决方案:数据库中存储一系列的任务列表,执行任务的线程依次按优先级执行任务,现有需求要对优先级进行调整

浏览 1981 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-01-12  
MySQL数据库一表中存储了任务列表,有一个执行任务的线程从表中按优先级顺序取出并执行,执行完成后从表中移除记录。任务列表是第三方插入的,现在有这么个需求:调整优先级。

现优先级字段是插入时候默认为系统当前时间毫秒数:System.currentTimeMillis()(用String存储,字段array),对于调整优先级现仅能想到以下:
1.调整任务B到A任务前即将A的array数值减1,当又将任务C调整到A前也将A的array值数值减1,此时发现减1后的值已经存在,则在数值减1后的array字段后字符加1,当任务D又要调整到A前,如此如此……如果对于优先级调整频繁的话,array字段长度终究是要溢出的(现设定array最大长度为99)。
2.update数据库相应array字段值,如果将任务X挑中到M前,则将M到W的任务的array值都相应的赋予下个任务的值(M.array=N.array,N.array=O.array…),如果数据库中任务列表量大而优先级调整又频繁的话就会导致数据库操作过于频繁。
3.使用单向链表,在数据库中添加一字段,用于存储当前任务的前一个任务。这样对于调整优先级倒是方便了,改两行的值即可,但是对于从表中取值就要查询很多次了(查询第一个之后,根据“指针”查询到第二个……)。

求一解决方案,谢谢了!

http://www.iteye.com/problems/78079
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics