MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Предавайте голям масив към дъщерен процес на възел

С такова огромно количество данни бих разгледал възможността за използване на споделена памет вместо да копирате данните в дъщерния процес (което се случва, когато използвате канал или предавате съобщения). Това ще спести памет, ще отнеме по-малко процесорно време за родителския процес и е малко вероятно да се сблъскате с някакво ограничение.

shm-typed-array е много прост модул, който изглежда подходящ за вашето приложение. Пример:

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

Обърнете внимание, че изпращаме само малък „ключ“ от родителския към дъщерния процес чрез IPC, а не всички данни. Така спестяваме много памет и време.

Разбира се, можете да промените 'Float64Array' (напр. double ) към какъвто и да е въведен масив вашето приложение изисква. Обърнете внимание, че по-специално тази библиотека обработва само едномерни въведени масиви; но това трябва да е само малка пречка.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. $ проекция в mongoDB findOneAndUpdate()

  2. Агрегиране на ниво месец и ниво година, също намерете средната стойност в MongoDB

  3. Премахване на документи от колекция mongodb от node.js

  4. Вмъкването на Mongodb/mongoose не е функция

  5. Как да изчислим текущата сума с помощта на агрегат?