Node .fs使用HUGE目录

时间:2016-05-17 20:30:14

标签: node.js file fs

想象一个包含大量文件的目录。作为一个粗略的衡量标准,我认为到目前为止我们看到的最多只有几百万,但从技术上来说,它可以更高的订单。使用node,我想从这个目录中读取文件,处理它们(基本上上传它们),然后将它们移出目录。很简单。在应用程序运行时不断添加新文件,而我的工作(就像一个正在下沉的船上拿着水桶的人)就是要尽快将这个目录清空。

那么我的选择是什么? fs.readdirnot ideal,它会将所有文件名加载到内存中,这会成为这种规模的问题。特别是随着新文件的不断添加,需要重复调​​用。 (对于将来提到这一点的任何人来说,有something被提议解决整个问题,可能会或可能没有在你的时间表内实现。)

我看过无数的fs drop-ins(graceful-fs,chokadir,readdirp等),其中没有一个在他们的职权范围内有这个特殊的用例。

我也遇到过一些人建议可以使用child_process来处理这个问题,而且还有一个名为inotifywait的包装器,它完全符合我的要求。但我真的不明白这是如何解决潜在问题的,特别是在这种规模上。

我想知道我真正需要做的是找到一种方法来从目录中获取第一个文件(或者实际上是批量文件),而无需将整个目录结构读入内存的开销。在读取了一定数量的文件后可以终止的某种流?我知道Go有一个参数可以从目录中读取第一个 n 文件,但我找不到相应的节点,这里有人遇到过一个或有任何有趣的想法吗?在这一点上,左场解决方案非常受欢迎!

1 个答案:

答案 0 :(得分:1)

您可以使用操作系统列表文件命令,并将结果流式传输到NodeJS。

例如在Linux中:

var cp=require('child_process')
var stdout=cp.exec('ls').stdout

stdout.on('data',function(a){
         console.log(a)
});0

RunKit:https://runkit.com/aminanadav/57da243180f3bb140059a31d