Torna al blog
Node.jsPerformanceBackend

Node.js Streams per gestire grandi volumi di dati

MUSTNODE SRL7 min di lettura

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.