2015-04-27 27 views
-3

從10TB大小的文件中刪除重複記錄的最佳方法是什麼?從10TB大小的文件中刪除重複記錄的最佳方法是什麼?

具體我使用的是oracle 11g。每個記錄由20個varchar(255)(60)等字段組成,Date或Number。約10%的記錄是重複的,重複可以通過10位數的字段來識別。 順序並不重要,但我很感激,如果你可以提到我應該怎麼辦,如果訂購,我有一個core2dou CPU與4GB內存。

+0

在哪裏擺放那些TERA – romuleald

+0

你需要什麼樣的文件和什麼樣的記錄,請再具體些 –

+3

提供了更多的信息之前,這可能是 –

回答

1

這是element distinctness Problem,可以通過這兩種方法來解決:

  1. 排序(你的情況外部排序)和迭代:一是梳理你的文件,然後重複它,所有重複的條目將被彼此相鄰。
  2. 使用散列表來存儲相同的元素。由於散列表不適合內存(並且在磁盤上實現它效率低下),因此可以分塊進行,首先將所有條目(和散列)加載到RAM中,散列代碼的範圍爲[0,a),並將所有獨特元素寫入新文件。然後重複範圍[a,b),[b,c),......。確保範圍足以包含該範圍內的所有元素。請注意,您可以遞歸做到這一點(即寫中間文件,哈希[x,y],並遞歸調用這個新的文件篩選重複。這使得這種方法需要O(nlogn)磁盤訪問非常大的文件。

的分佈式版本第二屆的方法是使用map-reduce:??

map(file): 
    emit(key,'1') 
reduce(key,list): 
    emit(key) 
相關問題