sql >> Database teknologi >  >> NoSQL >> MongoDB

Send stor matrix til node underordnet proces

Med sådan en enorm mængde data ville jeg overveje at bruge delt hukommelse i stedet for at kopiere dataene ind i den underordnede proces (hvilket er det, der sker, når du bruger et rør eller sender beskeder). Dette vil spare hukommelse, tage mindre CPU-tid for den overordnede proces og sandsynligvis ikke støde ind i en eller anden grænse.

shm-typed-array er et meget simpelt modul, der ser ud til at passe til din applikation. Eksempel:

parent.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);

child.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);
});

Bemærk, at vi kun sender en lille "nøgle" fra forælder til underordnet processen gennem IPC, ikke hele data. Således sparer vi masser af hukommelse og tid.

Selvfølgelig kan du ændre 'Float64Array' (f.eks. en double ) til det indskrevne array din ansøgning kræver. Bemærk, at dette bibliotek i særdeleshed kun håndterer enkeltdimensionelle type-arrays; men det burde kun være en mindre hindring.



  1. Hvordan returnerer man kun den første forekomst af et ID med Mongoose?

  2. Hvordan bruger man interface type som en model i mgo (Go)?

  3. Send en reference til en Redis-instans til en Gorilla/Mux-handler

  4. Sådan returnerer du kun værdien i MongoDB