[英]Sort huge file with low RAM on node.js
我們有 500GB 的文件,其中包含 integer 行。 我們如何使用 Node.js 對僅 512Mb RAM 進行排序? 我認為是這樣的:
一些想法?
更新:感謝用戶some-random-it-boy此解決方案基於帶有本機排序實用程序的子進程。 我認為它應該工作)
var fs = require('fs'),
spawn = require('child_process').spawn,
sort = spawn('sort', ['in.txt']);
var writer = fs.createWriteStream('out.txt');
sort.stdout.on('data', function (data) {
writer.write(data)
});
sort.on('exit', function (code) {
if (code) console.log(code); //if some error
writer.end();
});
我討厭為 js 問題提供非 js 解決方案。 但是,既然您使用的是節點環境,為什么不將此任務委托給專門為此設計的流程呢?
使用您的包child-process ,使用您需要的任何參數調用sort
( docs here ) 命令。
引用這個答案:
根據 sort 使用的算法,它會根據可用的內容使用內存:TotalMem/8 和 AvailableMem 之間最大數字的一半。 因此,例如,如果您有 4 GB 的可用內存(8 GB 中), sort 將使用 2 GB 的 RAM。 它還應該在 /bigdisk 中創建許多 2 GB 文件,最后對它們進行合並排序。
這基本上是你建議做的,已經實現並且在裸硬件上運行的 C 中沒有任何解釋器。 我想在你的限制范圍內你不能比這更快:)
如果您的整數不是太大,您也可以嘗試將它們轉換為字符串,將它們與自定義比較器進行比較,然后再轉換回整數。
背景:JS 需要 64 位數字(例如整數),並為字符串使用一組 16 位無符號整數值的“元素”。 ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures )
我不知道這是否真的對記憶有幫助,是否值得付出努力,但也許有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.