我需要合併大約30個gzip-ed文本文件,每個文件大約壓縮10-15GB,每個文件包含多行記錄,每個記錄都由同一個鍵排序。這些文件駐留在NFS共享中,我可以從多個節點訪問它們,並且每個節點都有自己的/tmp
文件系統。最快的方法是什麼?有效合併排序文件
一些可能的解決方案:
A.一切交給sort -m
。要做到這一點,我需要通過awk
/sed
/grep
傳遞每個輸入文件,將每條記錄摺疊成一行,並提取一個sort
可以理解的密鑰。所以,我會得到類似
sort -m -k [...] <(preprocess file1) [...] <(preprocess filen) | postprocess
B.瞧到蟒的heapq.merge
。 C.編寫我自己的C代碼來做到這一點。我可以合併在小批量的文件,使一個OMP線程每個輸入文件,一個用於輸出,和一個實際上做在RAM中的合併等
選項上述所有的:
d 。在比賽中一次合併幾個文件。 E.爲此使用多個節點,在節點之間複製中間結果。
你會推薦什麼?我對二級存儲效率並沒有太多經驗,因此,我很難估計其中的哪一個會發揮作用。
你有沒有考慮過將問題更接近它起源的地方?例如。如果您的文本文件是面向行而不是面向記錄(多行),那麼您可以在不進行預處理的情況下執行合併排序。 – Jens 2011-08-26 12:25:44