Node.js Streams per gestire grandi volumi di dati
Elaborare dati senza riempire la memoria
Caricare un file da 2 GB interamente in memoria per elaborarlo e una pessima idea: l'applicazione rischia di crashare. Gli stream di Node.js permettono di processare i dati a pezzi (chunk), mantenendo l'uso di memoria costante.
I tipi di stream
Node.js offre quattro tipi di stream: Readable (sorgenti di dati), Writable (destinazioni), Duplex (entrambi) e Transform (trasformano i dati in transito). Si compongono con pipe o, meglio, con pipeline.
const fs = require("node:fs");
const zlib = require("node:zlib");
const { pipeline } = require("node:stream/promises");
await pipeline(
fs.createReadStream("dati.csv"),
zlib.createGzip(),
fs.createWriteStream("dati.csv.gz")
);
Backpressure: il vantaggio nascosto
Il punto di forza degli stream e la gestione automatica della backpressure: se la destinazione e piu lenta della sorgente, lo stream rallenta la lettura per non accumulare dati in memoria. Con pipeline ottieni anche una gestione corretta degli errori e la chiusura delle risorse.
Quando usarli
Gli stream sono ideali per file di grandi dimensioni, esportazioni, elaborazione di log e proxy di dati. Per payload piccoli, l'approccio tradizionale resta piu semplice.
In MUSTNODE usiamo gli stream per gestire grandi flussi di dati industriali in modo efficiente e affidabile.
Articoli correlati
Altri approfondimenti dalla categoria Backend & Java.
Java moderno: record, sealed e pattern matching
Le novita del Java recente che rendono il codice piu conciso ed espressivo: record, classi sealed e pattern matching su switch.
Costruire API REST con Spring Boot
Dai controller alla validazione, dalla gestione degli errori alla documentazione: come strutturiamo API REST solide con Spring Boot.
PostgreSQL: indici e performance delle query
Come funzionano gli indici in PostgreSQL, quando aiutano e come usare EXPLAIN per capire perche una query e lenta.