馃敟 CHUNK POR CHUNK: PROCESAR GRANDES CANTIDADES DE DATOS EN NODE.JS

Chunk por Chunk: Procesar grandes cantidades de datos en Node.js

驴Qu茅 son los chunks en los streams?

Los streams son especialmente 煤tiles para el manejo de archivos grandes dimensiones o de dimensiones desconocidas. Suponiendo que queremos leer un archivo de una gran dimensi贸n, podemos especificar que se vaya leyendo a bloques de N bites o chunks.

Stream de tipo lectura

  1. Vamos a llamar el modulo filesystem.

    var fs = require("fs");
    
  2. Definimos el archivo origen que vamos a utilizar.

    var archivo_origen = __dirname + "/texto.txt";
    
  3. Definimos el tama帽o en 16 kb, este se multiplica por 1024 para ello.

    var tamano_chunk = 16 * 1024;
    
  4. Vamos a crear un stream con los par谩metros antes definidos.

    var stream_lectura = fs.createReadStream(archivo_origen, {
        encoding: "utf8",
        highWaterMark: tamano_chunk,
    });
    
  5. Y creamos un callback que nos notifique cada que estos 16 kb sean le铆dos.

    stream_lectura.on("data", function (chunk) {
        console.log(chunk.length);
    });
    

    Ahora cada que se complete de leer un bloque, el stream_lectura invocar谩 la funci贸n callback que recibe un chunk de 16 kb. Si ejecutamos esto con node veremos que imprime varias veces esta dimensi贸n antes de terminar de leer todo el archivo.

Stream de tipo escritura

Ahora vamos a crear otro stream pero esta ves de tipo escritura.

  1. Definimos nuestro archivo destino.

    var archivo_destino = __dirname + "/texto_destino.txt";
    
  2. Creamos el stream para el archivo destino, y como vamos a usar la misma codificaci贸n que el origen, basta don definir solo el archivo a utilizar.

    var stream_escritura = fs.createWriteStream(archivo_destino);
    
  3. Actualizamos el callback para escribir cada que llegue un chunk.

    stream_lectura.on("data", function (chunk) {
        console.log(chunk.length);
        stream_escritura.write(chunk);
    });