Ejecutar el siguiente código Error: Cannot create a string longer than 0x3fffffe7 characters . Mi archivo contiene solo 2 matrices y está composed , todo el archivo contiene 1,3 GB. Quería combinarlos por id usando algo como el siguiente código para mapear a través de arrayMain y devolver cada objeto combinado con el objeto de arrayItems con la misma id y luego reestructurar ese objeto para descartar la id. Pero creo que me estoy topando con un límite del sistema. Soy bastante nuevo en el trabajo con archivos de datos de gran tamaño, por lo que se agradece cualquier ayuda.
const composed = arrayMain.map((d) => { return { ...d, data: arrayItems.filter(({ ID }) => d.ID === ID).map(({notNeeded, ...needed}) => needed), }; });Si alguien se pregunta cómo se estructuran mis datos
const arrayMain = [ { ID: 30574062, number: 28234702, place: London, }, { ID: 30574063, number: 45232502, place: Paris, }, ... ]; const arrayItems = [ { "ID": 30574062, "anotherNumber": "52,3", "color": "red" }, { "ID": 30574062, "anotherNumber": "13", "color": "yellow" }, { "ID": 30574063, "anotherNumber": "60,6", "color": "blue" }, ... ] //expected result [ { ID: 30574062, number: 28234702, place: London, data: [ { "anotherNumber": "52,3", "color": "red" }, { "anotherNumber": "13", "color": "yellow" } ] }, { ID: 30574063, number: 45232502, place: Paris, data: [ { "anotherNumber": "60,6", "color": "blue" }, ] }, ... ]Probablemente haya una solución más atractiva, pero tal vez podría clasificar la matriz para que se escriba en fragmentos, y solo generar cadenas y llamar a appendFile en esos fragmentos, de modo que en ningún momento haya una sola cadena enorme. Después de crear composed , cree un flujo de escritura (para permitir muchas escrituras secuenciales sin errores) y siga llamando a .write en él.
const stream = fs.createWriteStream(filePath, { flags:'a' }); stream.write('['); const CHUNK_LENGTH = 500; // alter as needed for (let i = 0; i < composed.length; i += CHUNK_LENGTH) { const chunkStr = JSON.stringify( composed.slice(i, i + CHUNK_LENGTH) ); stream.write(chunkStr); } stream.write(']'); // to wait for all of this to complete, watch for the stream's finish event