如何对10亿个QQ号进行去重?

这是个虚拟的问题,假设我有一个TXT文件,里面有10亿个QQ号(一行一条),其中可能有千万级别重复的号码,如何最快的去重呢?

阅读 10.6k
6 个回答

存进一个Map,然后遍历。
利用Map不存在相同key的特性。

内存够就很简单了,分段、多线程、Map。

我没试过这么大的量,楼主也没虚拟使用场景,所以我也虚拟一个答案

我会开一台oracle之类实例,设置唯一键,然后把这些QQ号导入进db,db报错的就是重复的,忽略错误继续跑

如果oracle也吃不消(我也不知道吃不吃得消),就切片,导入100张表,单表1000万行绝对吃得消,利用db排序后导出,再和其他文件拼合继续导入。

用位表示数
例如, 号码 {1,2,3,5,8,13} 可以表示为:0-1-1-1-0-1-0-0-1-0-0-0-0-1,先放入,然后读出

按位表示QQ号是否存在,如果QQ号最多为10位数字,那最多也就需要1000+MB的内存,怎么算都够了

顺序处理太慢的话可以用多台机器对文件分块处理,最后把处理结果按位取或就行