Node.js Stream API, büyük veri setlerini belleğe tamamen yüklemeden işlemenizi sağlar. Dosya okuma, HTTP istekleri, veri dönüşümleri — hepsi stream'lerle çok daha verimli hale gelir.
Stream Türleri
- Readable: Veri kaynağı (dosya okuma, HTTP response)
- Writable: Veri hedefi (dosya yazma, HTTP request)
- Duplex: Hem okuma hem yazma (TCP socket)
- Transform: Veriyi dönüştüren Duplex (gzip, şifreleme)
Temel Kullanım
import { createReadStream, createWriteStream } from 'fs'; import { createGzip } from 'zlib'; import { pipeline } from 'stream/promises'; // 10GB dosyayı belleği patlatmadan sıkıştır await pipeline( createReadStream('büyük-dosya.txt'), createGzip(), createWriteStream('büyük-dosya.txt.gz') );
Transform Stream Oluşturma
import { Transform } from 'stream'; const upperCaseTransform = new Transform({ transform(chunk, encoding, callback) { this.push(chunk.toString().toUpperCase()); callback(); } }); process.stdin.pipe(upperCaseTransform).pipe(process.stdout);
Backpressure Yönetimi
Stream'lerin en kritik konusu backpressure'dır. Yazma hızı okuma hızından yavaşsa veri birikir. pipeline() bunu otomatik yönetir, bu yüzden manuel pipe() yerine her zaman pipeline() tercih edin.
Sonuç
Stream API, Node.js'in en güçlü özelliklerinden biri. Büyük dosyalar, gerçek zamanlı veri işleme ve yüksek throughput gerektiren senaryolarda vazgeçilmez bir araç.