背景:从核心流水中每次抽取N条数据,进行基本校验(与DB交互),进行结果集处理。
现有系统处理方式:
1、从记录表中抽取条件(记录上一次,数据抽取的位置,即流水号,顺序的),从核心抽取指定的流水
2、逐条流水,基本校验,产生结果,处理发送
3、更新记录表处理的位置。
改为多线程处理方式:
1、从记录表中抽取条件(记录上一次,数据抽取的位置),从核心抽取指定的流水
2、将流水分成多个部分,由多个线程同时处理,将结果集插入到待发送表中---------
3、从待发送表中读取结果集,处理发送
4、如果更新记录表中的记录 ??????????????1)如果我等线程全部处理完后,从待发送表中,逐一分析发送,这样就会延迟。(先处理完的需要等待所有处理完才发送)--此方案不可行
2)如果我边处理,边发送,这样我的记录表中应该记录什么时候的位置呢? 
希望大家帮忙设计一下。

解决方案 »

  1.   

    有个问题
    线程A 处理1,4,5,6,7
    线程B 处理2,3,8,9,10 假设线程B处理完毕 那么记录中已记录到10了,线程A处理到4,的时候 中断了
    程序重启 那么 记录从10开始了,就丢失了5,6,7 3条数据了。
      

  2.   

    有个问题
    线程A 处理1,4,5,6,7
    线程B 处理2,3,8,9,10  假设线程B处理完毕 那么记录中已记录到10了,线程A处理到4,的时候 中断了
    程序重启 那么 记录从10开始了,就丢失了5,6,7 3条数据了。
      

  3.   

    有个问题
    线程A 处理1,4,5,6,7
    线程B 处理2,3,8,9,10  假设线程B处理完毕 那么记录中已记录到10了,线程A处理到4,的时候 中断了
    程序重启 那么 记录从10开始了,就丢失了5,6,7 3条数据了。
      

  4.   


    控制点 就在这里啊。。
    单线程 逐一条,记录已操作的位置。
    多线程 同时处理,线程A 1,3,4,5,6,7 线程B 2,8,9,10 如何更新?不知道线程A,线程B 的处理快慢 没有处理完的数据状态不会更新 但是你的流水号 是顺序的,如果小的流水未处理,大的流水执行了。那么如何更新???