请大家帮帮忙,帮我解决这个问题:现在有 两个 大文本文件(大概100M)  里面是分行 一条条记录都是字符串,两个文件现在要作对比,文件中每一行 都会有一段字符串作为一个id, 有两个文件相应的id映射文件 
有字段映射文件(字段大概160多个) 也就是文件中每一行 其实也就是相当于数据库中的一条记录在要比较 这两个文件的差异  也就是比较每一条记录的各字段值的差异
最后输出到一个新的文本文件 并统计结果这个东西看起来很简单  如果数据量小  实现起来并不难 但是现在频繁io和一些大数据量加载 经常出现 内存溢出希望大家帮我想想办法 设计个性能好点的方案 先在这里谢谢大家了数据比较 大文本 IO

解决方案 »

  1.   

    有个想法,不知道效果如何。
    根据"id映射文件"对其中一个文件A的记录按照另一个文件B的记录顺序重新排序得到文件C(大文件排序可使用外排序),然后对文件B和C逐行比较。
      

  2.   

    100多M真不大,把两个文件全加载到内存也才不到300M。
    你的需求真不如把两文件数据塞到数据库的两个表里,然后用insert select把结果保存到别一个表里就搞定了。
      

  3.   

    如果连位置都不一样,既第一个文件ID=1的行 与第二个文件ID=1的行不在同一行上,那就麻烦了。
    否则的话可以分段读取对比。
      

  4.   

    100M不算大。可以先把字段映射文件读入内存,存入map。然后按行读取两个文件,读的时候将表示Id的字串解析出来,作为key,存入map。再遍历其中一个map,根据映射关系,找到另一个map中的对应字段,进行比较。如果文件太大,可以分段,不过就不好实现了。
      

  5.   

    如果两个文件不是顺利比较,分段比较也是一个麻烦事啊。
    这个问题可以采集,分布比较。
    先对每个文件进行排序,排序的过程,根据ID的特性,分成不同的几个文件。
    比如A文件的ID分为1~5,5~10等文件。B文件也同样分为几个文件。
    再利用多线程分别比较相对于的小文件(充分利用多线程的优势)。
    文件的划分排序网上有很多!
      

  6.   

    两文件都有id,但id是通过第三个文件映射的,也就是说要同时对三个文件的数据查找对比…
      

  7.   

    用两个Map做比较,key相同Value不同,或者key少或多,都返回不同。这个思路会实现比较快吧,就是内存大了点。分段也不是很困难的做法,比较分几段还是自己代码控制的