java高效重复数据删除
作者:互联网
假设您有一个大文本文件.每行包含一个电子邮件ID和一些其他信息(比如一些product-id).假设文件中有数百万行.您必须在数据库中加载此数据.您如何有效地重复数据删除(即消除重复)?
解决方法:
疯狂的行数
>使用Map& Reduce框架(例如Hadoop).这是一个完整的分布式计算,所以除非你有TB的数据,否则这是一个过度杀手. (j / k :))
无法适应内存中的所有行
>即使结果也不合适:使用合并排序,将中间数据保存到磁盘.合并时,您可以丢弃重复项(可能是this sample帮助).如果您愿意,这可以是多线程的.
>结果将适合:您可以使用行迭代器或其他东西,而不是读取内存中的所有内容然后将其放入HashSet(见下文),并继续添加到此HashSet.您可以使用ConcurrentHashMap并使用多个线程来读取文件并添加到此Map.另一个多线程选项是使用ConcurrentSkipListSet.在这种情况下,您将实现compareTo()而不是equals()/ hashCode()(compareTo()== 0表示重复)并继续添加到此SortedSet.
适合记忆
>设计一个保存数据的对象,实现一个好的equals()/ hashCode()方法并将它们全部放在HashSet中.
>或者使用上面给出的方法(你可能不想坚持使用磁盘).
哦,如果我是你,我会在DB上放置唯一约束……
标签:java,large-data-volumes 来源: https://codeday.me/bug/20190717/1484719.html