zoukankan      html  css  js  c++  java
  • 8. 数据莫名被覆盖问题

    生产上偶尔会出现这样的问题:

      这个业务流程中最后时间执行的代码,而且明明日志打印执行成功了,但是为什么数据库值不对。(更新时间有时候因为各种原因,比如,客户端根据更新时间做了缓存,非关键字段信息更新不会更新更新时间、历史代码遗留很多地方更新个别底字段不做更新更新时间操作、其他原因等都没有更新更新时间,无法根据日志时间,更新时间判断问题)

    经过查找:最后发现跑批中有批处理逻辑,一次获取List,然后单条数据调用接口进行处理,恰好非常巧合,List刚拿完一批数据,处理到一半,其他程序把它更新了,(很多编写代码时不会考虑到

         过于严谨的逻辑,认为这个处理比较快,不会那么巧)等到遍历到该条数据时,又被更新成其他值,导致数据状态不对。类似的还有很多情况。

    解决方法:

    1.跑批配置尽量放在晚间三点钟左右,尽量排除这个时间点人员业务影响。

    2.单次跑批数据size设置小点,能很快执行完,几乎不影响数据状态的正确性。

    3.书写严谨逻辑,更新前去考虑它现在应该的值,可能覆盖的值(已被其他地方更新的值),排除这些值再去更新(有些业务情况下不好实现这个判断)

    4.添加版本号字段控制,查list时查出当前数据version,遍历到该条数据时再去查当前数据version,对比两次version,一样则更新,否则根据情况判断是否更新(对历史版本,

                更新地方较多的改造不友好,但是只在容易相互覆盖的地方更新时使用还是可以的)

    还有其他好的方法吗?欢迎留言!

  • 相关阅读:
    html添加遮罩层
    html绝对定位如何居中
    springboot上传文件到本地服务器
    遍历一个文件目录,把所有的子目录都列出来
    Java判断cookie中是否有某个具体的cookie
    Redis 如何打开rdb 文件
    crontab -e 如何保存退出
    linux服务器设备上没有空间
    IDEA的SonarLint插件报错Unable to create symbol table for
    使用Rome读取RSS报错,org.xml.sax.SAXParseException: 前言中不允许有内容。
  • 原文地址:https://www.cnblogs.com/flgb/p/12885418.html
Copyright © 2011-2022 走看看