job定时更新时效的需求,求思路
系统中所有的任务都放在一张表中,简单的说任务就是每个人处理过的(或待处理)的一个事项,因为操作人多,任务类型也多,所以数据量现已大于1000万。
每条任务上有一个时效字段,即该条任务完成时间最多是X小时,如果超时未完成则要做相应记录。
现在我们是每小时通过job update该表的时效字段,让其-1,直到为0则超时。由于该表大部分是已完成任务,未完成的任务才需要更新时效,大约有几万条数据。
现在发现每次update都很缓慢,各种过滤条件加进去,需要几十秒到几分钟不等,这时候所有被update到的任务会被锁定,用户无法对这些任务进行update等操作,影响系统整体可用性。
求一个解决此问题比较好的思路。(由于要保持一定时间的历史记录可以查询 ,该表的记录量不会低于1000万)
[解决办法]
因为不了解具体情况,所以比较难给出正确的方法。试着说点自己的想法。
第一印象,该表的更新太过频繁,表内容既包含任务信息;也包含日志操作信息。
频繁更新情况下索引不是最好的选择。建议在第一次-1时取出rowid保存,后面直接使用rowid做更新。
还有一种方式是使用gemfire,直接将所有未完成的任务导入到内存,日常直接操作内存。只有在任务完成时才更新到数据库。