• 8. 数据莫名被覆盖问题


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

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

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

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

    解决方法:

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

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

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

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

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

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

  • 相关阅读:
    Lily.Core.FileDataProvider文件管理使用范例。
    CruiseControl.NET,Nant持续集成(1)
    如何为当前进程设置环境变量?
    unix时间戳与datetime的转换函数
    Mac 平台下功能强大的Shimo软件使用指南
    如何解决源码包安装时的依赖性问题
    《Linux企业应用案例精解》一书配套视频发布
    ZoneMinder配置与使用
    网站优化IIS7下静态文件的优化
    WIN7常用功能的介绍
  • 原文地址:https://www.cnblogs.com/flgb/p/12885418.html
Copyright © 2020-2023  润新知