sql >> Database >  >> NoSQL >> MongoDB

Geef een grote array door aan het onderliggende proces van het knooppunt

Met zo'n enorme hoeveelheid gegevens zou ik overwegen om gedeeld geheugen in plaats van de gegevens naar het onderliggende proces te kopiëren (wat gebeurt als u een pipe gebruikt of berichten doorgeeft). Dit bespaart geheugen, kost minder CPU-tijd voor het bovenliggende proces en zal waarschijnlijk niet tegen een limiet aanlopen.

shm-typed-array is een zeer eenvoudige module die geschikt lijkt voor uw toepassing. Voorbeeld:

ouder.js

"use strict";

const shm = require('shm-typed-array');
const fork = require('child_process').fork;

// Create shared memory
const SIZE = 20000000;
const data = shm.create(SIZE, 'Float64Array');

// Fill with dummy data
Array.prototype.fill.call(data, 1);

// Spawn child, set up communication, and give shared memory
const child = fork("child.js");
child.on('message', sum => {
    console.log(`Got answer: ${sum}`);

    // Demo only; ideally you'd re-use the same child
    child.kill();
});
child.send(data.key);

kind.js

"use strict";

const shm = require('shm-typed-array');

process.on('message', key => {
    // Get access to shared memory
    const data = shm.get(key, 'Float64Array');

    // Perform processing
    const sum = Array.prototype.reduce.call(data, (a, b) => a + b, 0);

    // Return processed data
    process.send(sum);
});

Houd er rekening mee dat we alleen een kleine "sleutel" van het bovenliggende naar het onderliggende proces sturen via IPC, niet de hele gegevens. Zo besparen we een hoop geheugen en tijd.

Natuurlijk kunt u 'Float64Array' . wijzigen (bijv. een double ) naar wat dan ook getypte array uw aanvraag vereist. Merk op dat deze bibliotheek in het bijzonder alleen enkeldimensionale getypeerde arrays verwerkt; maar dat zou slechts een klein obstakel moeten zijn.



  1. Een ingesloten document zoeken met een specifieke eigenschap in Mongoose, Node.js, MongodDB

  2. Hoe documenten te verwijderen die zijn geretourneerd door een aggregatiequery in mongodb

  3. Hoe invoegverzoeken in Spring Data verwerken voordat ze aan MongoDB worden toegevoegd?

  4. mongodb geoNear vs near