如何在不将目录树加载到内存的情况下查询目录树
How to query a directory tree without loading them in memory
我有一个根目录,例如events.
每个事件都是一个包含文件的目录,有数百万个事件。
events 目录中的目录:
...
2018-01-17-18:40:51.151343-1bb809
2018-01-17-20:55:22.627688-26ada5
2018-01-17-20:55:27.919532-8243cd
2018-01-17-20:56:30.743072-94e913
2018-01-17-20:57:39.824845-64ccb7
...
我想做的是:
一一加载目录,而不是一次调用完成,例如fs.readDir
由于目录名称带有时间戳,我希望能够使用
查询它们
例如
{ time:
$gte: t1
$lte: t2
}
如何在不一次读取内存中的所有目录的情况下以性能的方式执行此查询?
我正在使用 NodeJs 9
使用纯 node.js File System functions 你做不到。
fs.readdir 存在,但它会return 一次所有名称。
你能做什么
使用node.js执行命令行:
所以你可以find -regex "Here the regexp to match your dates"
来自堆栈的示例 here by @hexacyanide :
const util = require('util');
const exec = util.promisify(require('child_process').exec);
async function ls() {
const { stdout, stderr } = await exec('ls');
console.log('stdout:', stdout);
console.log('stderr:', stderr);
}
ls();
我有一个根目录,例如events.
每个事件都是一个包含文件的目录,有数百万个事件。
events 目录中的目录:
...
2018-01-17-18:40:51.151343-1bb809
2018-01-17-20:55:22.627688-26ada5
2018-01-17-20:55:27.919532-8243cd
2018-01-17-20:56:30.743072-94e913
2018-01-17-20:57:39.824845-64ccb7
...
我想做的是:
一一加载目录,而不是一次调用完成,例如fs.readDir
由于目录名称带有时间戳,我希望能够使用
查询它们
例如
{ time:
$gte: t1
$lte: t2
}
如何在不一次读取内存中的所有目录的情况下以性能的方式执行此查询?
我正在使用 NodeJs 9
使用纯 node.js File System functions 你做不到。
fs.readdir 存在,但它会return 一次所有名称。
你能做什么
使用node.js执行命令行:
所以你可以find -regex "Here the regexp to match your dates"
来自堆栈的示例 here by @hexacyanide :
const util = require('util');
const exec = util.promisify(require('child_process').exec);
async function ls() {
const { stdout, stderr } = await exec('ls');
console.log('stdout:', stdout);
console.log('stderr:', stderr);
}
ls();