MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Przekaż dużą tablicę do procesu potomnego węzła

Przy tak ogromnej ilości danych chciałbym użyć pamięci współdzielonej zamiast kopiowania danych do procesu potomnego (co się dzieje, gdy używasz potoku lub przekazujesz wiadomości). Pozwoli to zaoszczędzić pamięć, zabierze mniej czasu procesora procesowi nadrzędnemu i prawdopodobnie nie przekroczy jakiegoś limitu.

shm-typed-array to bardzo prosty moduł, który wydaje się pasować do Twojej aplikacji. Przykład:

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

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

Zauważ, że wysyłamy tylko mały "klucz" od rodzica do procesu podrzędnego przez IPC, a nie całe dane. W ten sposób oszczędzamy mnóstwo pamięci i czasu.

Oczywiście możesz zmienić 'Float64Array' (np. double ) do dowolnej wpisanej tablicy Twoja aplikacja wymaga. Zauważ, że ta biblioteka w szczególności obsługuje tylko jednowymiarowe tablice typowane; ale to powinna być tylko niewielka przeszkoda.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. $sum z grupy dokumentów i poddokumentów według $autora (MongoDB)

  2. Znajdź dokumenty z tablicą, która nie zawiera określonej wartości

  3. Jak obliczyć odległość trasy między wieloma punktami GeoJSON w MongoDB?

  4. MongoDB GridFs z C#, jak przechowywać pliki takie jak obrazy?

  5. Grupuj MongoDB według elementów wewnętrznych tablicy