一.需求
目前有一个小需求,就是对数据库中的数据进行去重,数据量总共大概10亿左右,如果不同数据的某三个字段均一致,则认为是重复数据
二.思考问题
- 10亿数据,以每条数据按150个字符算,一共需要139g的内存,所以只能采用分而治之的思想;
- 如果在读取数据库过程中因为某种原因程序中断,难道需要再从头开始处理吗?
三.大致方案
- 采用流式读取,分批次进行处理,比如每次读取大约3个g内存的数据(每一次将这一批处理完的最后一个数据id进行保存到本地,以便程序中断后,从当前数据开始处理)
- 将某一个字段进行哈希映射(得到哈希值对500取余即可),映射到500个文件中,每个文件大概300m,将数据ID和对应数据去重字段的MD5值保存到对应文件中.
- 依次处理每个小文件(相互重复的数据一定在一个文件中),利用Map进行去重.将重复数据进行删除.