公司员工数据比对,程序实现
情景:
    有一个员工数据的视图,里面有800多万条数据,视图中有姓名,身份证号,性别等信息,其中身份证可能有重复。
    有一个webservice接口,是公安数据,通过传入视图中身份证字段进行查询,每次传入一个身份号,如果有记录,则并返回姓名,身份证,出生年月等字段。
问题:
    需要先查询员工视图,获得身份号码,才能调用webservice接口进行比对,由于员工视图数据量过大,没有自增ID,如果
一下子查询全部放到内存中肯定不信,怎样比对才能做到高效?如何做到分批查询和比对?
    

解决方案 »

  1.   

    1. 高效是做不到了,逐条比对是接口的要求,除非你有能力改接口,不然是没办法做到高效了。2. 分批查询与比对可以参照SQL分页方式进行比对,比如说你每个批次取100条数据:
    select * from (SELECT 身份证,rownum rn FROM TABLE) where rn > :(i - 1) * 100 and rn <= :i * 100
    其中i是你的批次号,可以做个循环来分批进行,防止断线等异常还可以做个记录当前批次和恢复的处理。
      

  2.   

    因为是需要调用webservice接口逐条查询,感觉不需要放入不同的临时表,只需要在取的时候分批就ok了
      

  3.   

    可以按照rownum进行分批,但是需要防止在统计过程中数据产生变化,可以先锁定表再进行统计工作。
      

  4.   

    rownum是针对oracle,这个是ms sqlserver数据库,还有表中没有类似自增的字段,这个如何做到记录上次读到了哪一行?
      

  5.   

    楼主你在1楼的发贴又没有说这个是ms sqlserver数据库,这里是oracle版,我当然认为你用的是oracle数据库了。ms sqlserver从来没用过,这个方面帮不上你了。
      

  6.   

    可以采用折半查找算法,先取中间的记录分为两半,然后每次再从中间的记录分为两半查找,直到比对到结果为止。也可以每次比对1000条,然后记录此次比对的id号,下次比对就从这个id号开始,如此一直比对到正确为止。
      

  7.   

    公安的webservice?是请求服务平台吧,
    每次只能传一个身份证号码比对,怎么快啊?这个快不起来的。
    你通过webservice发一个身份证号过去,公安是要对这个身份证号要进行比对,他要处理时间,
    而且要知道这个是通过webservice走的,别以为是通过dblink过去的
      

  8.   

    有个方法,先本地处理数据,对人口数据的身份证号去重,至于重号的,单独处理,
    剩下的不重号的,将这些人的身份证号分段,走webservice,多开几个线程请求,这要看对方的请求处理的能力了,
    你前面说了,请求是每次只能发一个身份证号