如何将一批数据同时置为无效?
问题描述
数据库中现在有很大一批数据,每天00:00执行一次定时任务,将一部分数据的状态字段写为无效,但是定时任务需要运行一段时间(例如五分钟才能全部执行完),也就是在定时任务刚开始执行时的数据是准时(00:00)被修改了,但是在排在这个任务中后面的数据就没办法准时(00:00)被修改了(后面的数据修改时间可能是00:05)
有什么办法能让这个任务中的数据,同时在00:00时候被修改呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
可以先将需要处理数据的状态修改,然后执行业务逻辑。
解释
老人浇花
老人每天早上7点要给花园里的百合花浇水,花园里的花是整齐的排成一排一排的,百合花是穿插在花园里,每一盆百合花被浇水的时间不一样。
同时给百合花浇水的方法
1 多来几个老人
有多少百合花,来多少个老人,老人们先走到百合花跟前,一声令下,老人一起浇水 。
2 将百合花归整到一起,用一个大的水壶一起浇水
对应技术方案
1 多线程修改数据
有多少个需要修改的数据,启动多少个线程来做修改操作。不建议使用,太扯了。
2 可以事先将需要修改的数据移动到一起,使用一条update更新数据。
类似
update 花园 set 浇水时间= 当前时间 where (花=百合花)
不太清楚你的失效逻辑,但我猜你应该是想同一批数据拥有一个相同值的失效字段。
执行时间是无法避免的,如果实时获取当前时间,那么肯定是不一致的,这个无法解决。除非update set的时候采用一个固定的时间值,而不是获取执行时的当前时间。
另外是否可以改变一下逻辑,提前把一批数据的失效时间修改呢?例如打算0点设置失效时间的,那就23点的时候开始跑任务,把一批数据都设成00:00:00.
你的程序设计有问题。只有改实现逻辑才可以。
在数据库里给加一个字段,表示为失效时间,业务端代码实现时要对这个字段进行判断。
这样只要提前设置字段值,就可以实现你要的效果了。