MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Lewati array besar ke proses anak simpul

Dengan jumlah data yang begitu besar, saya akan mencoba menggunakan memori bersama daripada menyalin data ke dalam proses anak (yang terjadi saat Anda menggunakan pipa atau meneruskan pesan). Ini akan menghemat memori, mengurangi waktu CPU untuk proses induk, dan kemungkinan tidak akan mencapai batas tertentu.

shm-typed-array adalah modul yang sangat sederhana yang tampaknya cocok untuk aplikasi Anda. Contoh:

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

Perhatikan bahwa kami hanya mengirimkan "kunci" kecil dari induk ke proses anak melalui IPC, bukan seluruh data. Dengan demikian, kami menghemat banyak memori dan waktu.

Tentu saja, Anda dapat mengubah 'Float64Array' (mis. double ) ke array yang diketik apa pun aplikasi Anda membutuhkan. Perhatikan bahwa perpustakaan ini secara khusus hanya menangani array berdimensi tunggal; tapi itu seharusnya hanya menjadi kendala kecil.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kueri agregasi rata-rata Mongo tanpa grup

  2. Menggunakan MongoDB $pull untuk menghapus dokumen dalam Array

  3. MongoError:Argumen yang salah

  4. Bagaimana cara mengonversi string menjadi tanggal dengan agregasi mongo?

  5. Bisakah saya mengonfigurasi MongoDB menjadi In-Memory?