gpt4 book ai didi

javascript - 在 node.js 上对具有低 RAM 的大文件进行排序

转载 作者:行者123 更新时间:2023-12-04 13:12:24 26 4
gpt4 key购买 nike

我们有 500GB 的整数行文件。我们如何使用 Node.js 仅使用 512Mb RAM 对其进行排序?我认为是这样的:

  1. 将主文件分成 256Mb 的 block
  2. 对每个 block 进行排序
  3. 获取每个 block 的第一行,排序并将其推送到最终文件
  4. 对 block 中的每一行执行第 3 步。

一些想法?

更新:感谢用户some-random-it-boy该解决方案基于带有 native 排序实用程序的子进程。我认为它应该有效)

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 的解决方案。但既然您使用的是 Node 环境,为什么不将此任务委托(delegate)给专门为此设计的流程呢?

随您的包裹child-process , 使用您需要的任何参数调用 sort ( docs here ) 命令。

引自this answer :

According to the algorithm used by sort, it will use memory according to what is available: half of the biggest number between TotalMem/8 and AvailableMem. So, for example, if you have 4 GB of available mem (out of 8 GB), sort will use 2GB of RAM. It should also create many 2 GB files in /bigdisk and finally merge-sort them.

这基本上就是您建议的做法,已经实现并在裸硬件上以 C 语言运行,中间没有任何解释器。我想在你的限制范围内你不能比这更快 :)

关于javascript - 在 node.js 上对具有低 RAM 的大文件进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63713652/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com