zoukankan      html  css  js  c++  java
  • 多线程导致事务失效-记一次性能优化

    优化背景:项目中有一个批量更新的方法,由于代码逻辑是逐个调用数据库进行更新,导致在更新数量多的情况下,整个方法执行慢。

    正常业务情况下,更新的数量能达到500个,假设更新一个耗时为100ms,那么500个需要的时间为50秒,用户肯定等不了那么久,需要优化。

    一开始想法是,开启多线程去更新,一个线程执行一个sql更新,我便动起手来,发现用多线程效果确实还可以,500个数据库更新耗时大概3秒。喜笑颜开。

    然而,后面分析这个改动会带来的影响是:

    原来这是一个事务方法,在使用多线程之后,那么这些批量更新就不在同一个事务了,那么可能存在某个线程中某个执行异常了,但是其他线程中的任务依然提交成功,就达不到事务的效果了。

    (事务状态基于threadlocal来保存,不同线程那么threadlocal则不同)

    那么如果解决上面遇到的问题呢?

    刚开始想到两个方法:

    方法一 : 让这些线程共用同一个事务,那么则需要自定义一个事务管理器,(这个个人感觉比较麻烦),只是有这个想法,还未去实现。

    方法二:让这500个sql更新操作,变成一个批量更新的sql,减少网络传输的耗时。

    最终使用了方法二,优化执行效率同时也保证了事务。

  • 相关阅读:
    python数据类型以及模块的含义
    python基础语言以及if/while语句结构
    subprocess模块
    linux 管道通信socket 全双工示例
    整体框架
    licode_WebrtcConnection
    webrtc杂谈(转)
    修改背景颜色
    激活NX窗口的按钮
    NX屏蔽窗口的按钮
  • 原文地址:https://www.cnblogs.com/swave/p/12084771.html
Copyright © 2011-2022 走看看