Nei computer moderni che attraversano una directory con file 500K non è nulla. Quando si usa il comando fs.readdir
in modo asincrono in Node.js, ciò che fa è semplicemente leggere un elenco di nomi di file nella directory specificata. Non legge i contenuti dei file. Ho appena testato con i file 700K nella directory. Occorrono solo 21 MB di memoria per caricare questo elenco di nomi di file.
Una volta caricato questo elenco di nomi di file, li si attraversa uno ad uno o in parallelo impostando un limite per la concorrenza e si possono facilmente consumare tutti. Esempio:
var async = require('async'),
fs = require('fs'),
path = require('path'),
parentDir = '/home/user';
async.waterfall([
function (cb) {
fs.readdir(parentDir, cb);
},
function (files, cb) {
// `files` is just an array of file names, not full path.
// Consume 10 files in parallel.
async.eachLimit(files, 10, function (filename, done) {
var filePath = path.join(parentDir, filename);
// Do with this files whatever you want.
// Then don't forget to call `done()`.
done();
}, cb);
}
], function (err) {
err && console.trace(err);
console.log('Done');
});
prima di credere alle persone quando fanno quelle affermazioni: ci hai provato? Inoltre: una directory con file 100k o 500k è pazzesca, non dovresti avere i dati organizzati in questo modo. Non puoi nemmeno 'rm' che molti file. –
@ Mike'Pomax'Kamermans, guarda prima: "Ho appena testato con i file 700K nella directory. Richiede solo 21 MB di memoria per caricare questo elenco di nomi di file". cosa succede se ho 1M o 10 milioni di file nella directory? – raitucarp
il tuo filesystem non è un database. Un milione di file in una directory è pazzesco e invece di trovare una soluzione di codice è necessario innanzitutto organizzare meglio i dati, come buona pratica. –