对亿级数据进行去重

一.需求

     目前有一个小需求,就是对数据库中的数据进行去重,数据量总共大概10亿左右,如果不同数据的某三个字段均一致,则认为是重复数据

二.思考问题

  1. 10亿数据,以每条数据按150个字符算,一共需要139g的内存,所以只能采用分而治之的思想;
  2. 如果在读取数据库过程中因为某种原因程序中断,难道需要再从头开始处理吗?

三.大致方案

  1. 采用流式读取,分批次进行处理,比如每次读取大约3个g内存的数据(每一次将这一批处理完的最后一个数据id进行保存到本地,以便程序中断后,从当前数据开始处理)
  2. 将某一个字段进行哈希映射(得到哈希值对500取余即可),映射到500个文件中,每个文件大概300m,将数据ID和对应数据去重字段的MD5值保存到对应文件中.
  3. 依次处理每个小文件(相互重复的数据一定在一个文件中),利用Map进行去重.将重复数据进行删除.
上一篇:Nginx http 500错误分析及解决方法


下一篇:面试题—— MySQL一张表到底能存多少数据?