从10 TB大小的文件中删除重复记录的最佳方法是什么?
具体我正在使用oracle 11g。每个记录由20个varchar(255)(60)等字段,Date或Number组成。大约10%的记录是重复的,重复可以通过10位数的字段识别。 订单没关系,但我很感激,如果你能提一下我的订购情况,我有一个带有4GB RAM的core2dou CPU。
答案 0 :(得分:1)
这是element distinctness Problem,可以通过以下两种方法解决:
[0,a)
中的所有条目(和哈希)加载到RAM中,并写入所有唯一的元素到新文件。然后重复范围[a,b)
,[b,c)
,......确保范围足以包含该范围内的所有元素。请注意,您可以递归执行此操作(即,使用散列[x,y]
编写中间文件,并在此新文件上以递归方式调用以筛选重复项。这使得此方法需要O(nlogn)
磁盘访问非常大的文件。 / LI>
醇>
第二种方法的分布式版本是使用map-reduce:
map(file):
emit(key,'1')
reduce(key,list):
emit(key)