Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

356
Vistas
Procesar archivo JSON de 10 GB en Node JS

Tengo un archivo json y la estructura de ese archivo es la siguiente:

 { "orders":[ { "id": 876876876, "app_id":580714, "client_details": {}, "discount_codes": [{}], "line_items": [ { "id": 466157049, ... } ], ...... }, { "id": 47844583, "app_id":580714, "client_details": {}, "discount_codes": [{}], "line_items": [ { "id": 466157049, ... }], .... }, {...}, {...}, {...} ] }

Esta matriz puede contener más de 10 lakhs (1 millón) de objetos. Actualmente necesito:

  • encontrar el objeto con ID de pedido
  • Número total de pedidos
  • obtener pedidos con ID de pedido y con el número de límite

Estoy usando el siguiente código:

 return new Promise((resolve, reject) => { var orders = [] var getStream = function () { var stream = fs.createReadStream(file_path, { encoding: 'utf8' }), parser = JSONStream.parse('*'); return stream.pipe(parser); }; getStream() .pipe(es.mapSync(function (data) { orders = data })) .on('end', function() { resolve(orders) }) })

Pero hace que el sistema se cuelgue. Además, también he usado el siguiente comando:

 node --max-old-space-size=8192 index.js

Pero eso tampoco funcionó. ¿Alguien puede ayudarme a procesar un archivo json tan grande?

Editado : ahora el tamaño del archivo es de 850 MB y estoy usando el siguiente código:

 return new Promise((resolve, reject) => { var data = '' var reader_stream = fs.createReadStream(file_path) reader_stream.setEncoding('UTF8') reader_stream.on('data', function(chunk) { data += chunk }) reader_stream.on('end',function() { try{ const orders_result = JSON.parse(data) var order_count = (orders_result.orders) resolve({ "count": order_count.length }) } catch(err) { console.log(err) } }) reader_stream.on('error', function(err) { console.log(err.stack) reject(err.stack) }) })

y obteniendo el siguiente error

Excepción no detectada: RangeError: longitud de cadena no válida

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

JSON.parse necesita leer todo el archivo en la memoria, incluidas las partes que su aplicación no necesita. Un enfoque sería usar un analizador tipo SAX como clarinete . Estos analizadores no leen todo el archivo en la memoria, sino que generan eventos durante el proceso de análisis. Debe manejar estos eventos para verificar si los datos son de interés y solo almacenar la información que realmente necesita.

Esto reducirá la cantidad de memoria requerida para el proceso de análisis, pero no es tan conveniente. Parece que su operación no necesita todos los datos, por lo que tal vez tenga suerte y una versión simplificada pueda caber en la memoria.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda