现有有两个txt文件,比如a.txt,b.txt,这两个文件里面都是有一千万条数据.现在对这两个文件当中重复的文件过滤掉,把b.txt存在,而a.txt中不存在的数据写到c.txt当中.我试过用list这种普通的过滤会抛内存溢出.不知道还有没其它的好方面.求助各位高手.数据比对数据过滤

解决方案 »

  1.   

    因为a.txt,b.txt两个文件里面的数据达到一千万条数据.我很难想象这能用内存一次读出来进行比较。所以只能逐条读入进行对比,但如果你的数据有一定的规律,比如按照一定的排序方式还能操作,如果不是一定的顺序,那我个人建议你还是借用数据库工具通过SQL来实现吧。
      

  2.   

    我有个思路,仅供参考:
    对比多条复杂的记录很慢,但是对比一堆hashcode要快的多,所以,创建两个临时文件 a.txt.index和b.txt.index,这两个临时文件中只有三列信息:某条记录在x.txt的文件位置、记录长度和此条记录hashcode。
    一次从a.txt.index取十万条记录 放到内存用不了多少M。再于b.txt.index分批比较,由于只需要比较hashcode,比较速度应该是比较快的。
      

  3.   

    用nio,切勿一次性读入内存。
      

  4.   

    分批比对吧。
    另外感觉对比的算法上应该提高。
    要是双list循环比对绝对崩。
      

  5.   

    好,但hashcode相等不代表原记录一定相等怎么办?
      

  6.   

    这就是所谓的hash collision嘛
      

  7.   

    function B:
    b切成n份
    for(i=0; i<n; i++) {
        将切片传入A中进行验证
    }a切分成m份
    function A:
    for(i=0; i<m; i++) {
        将B的某个切片 放进来比对A的切片
        每次比对 , 清理内存
    }