[英]Sorting huge volumed data using Serialized Binary Search Tree
我有 50 GB 這樣的結構化(作為鍵/值)數據,這些數據存儲在一個文本文件中(input.txt / 鍵和值是 63 位無符號整數);
3633223656935182015 2473242774832902432
8472954724347873710 8197031537762113360
2436941118228099529 7438724021973510085
3370171830426105971 6928935600176631582
3370171830426105971 5928936601176631564
我需要以該鍵的最小值按遞增順序將此數據排序為鍵。 結果必須在 30 分鍾內呈現在另一個文本文件 (data.out) 中。 例如,對於上面的示例,結果必須是這樣的;
2436941118228099529 7438724021973510085
3370171830426105971 5928936601176631564
3633223656935182015 2473242774832902432
8472954724347873710 8197031537762113360
我決定了;
我將使用 input.txt 中的鍵及其最小值創建一個 BST 樹,但該樹將超過 50GB。 我的意思是,此時我有時間和內存限制。
因此,我將使用另一個文本文件 (tree.txt),並將 BST 樹序列化到該文件中。
之后,我將使用 in-order traverse 遍歷樹並將排序后的數據寫入 data.out 文件。
我的問題主要是序列化和反序列化部分。 如何序列化這種類型的數據? 我想對序列化數據使用 INSERT 操作。 因為我的數據比內存大。 我無法在內存中執行此操作。 其實我想用文本文件作為內存。
順便說一下,我對這種東西很陌生。 如果與我的算法步驟有沖突,請警告我。 任何想法、技術和代碼示例都會有所幫助。
OS: Linux
Language: C
RAM: 6 GB
注意:我不允許使用排序和合並等內置函數。
考慮到您的文件似乎具有大約 40 個字符的相同行大小,總共給我大約 1250000000 行,我將通過以下命令將輸入文件拆分成更小的文件:
split -l 2500000 biginput.txt
然后我會對他們每個人進行排序
for f in x*; do sort -n $f > s$f; done
最后我將它們合並
sort -m sx* > bigoutput.txt
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.