MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

नोड बाल प्रक्रिया के लिए बड़ी सरणी पास करें

इतनी बड़ी मात्रा में डेटा के साथ, मैं साझा मेमोरी<का उपयोग करने पर विचार करूंगा। /मजबूत> डेटा को चाइल्ड प्रोसेस में कॉपी करने के बजाय (जो तब हो रहा है जब आप पाइप का उपयोग करते हैं या संदेश पास करते हैं)। यह मेमोरी को बचाएगा, मूल प्रक्रिया के लिए कम CPU समय लेगा, और कुछ सीमा में टकराने की संभावना नहीं है।

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

ध्यान दें कि हम केवल माता-पिता से बच्चे की प्रक्रिया में आईपीसी के माध्यम से एक छोटी सी "कुंजी" भेज रहे हैं, संपूर्ण डेटा नहीं। इस प्रकार, हम एक टन मेमोरी और समय बचाते हैं।

बेशक, आप 'Float64Array' को बदल सकते हैं (उदाहरण के लिए एक double ) जो कुछ भी टाइप की गई सरणी के लिए आपके आवेदन की आवश्यकता है। ध्यान दें कि यह पुस्तकालय विशेष रूप से केवल एकल-आयामी टाइप किए गए सरणी को संभालता है; लेकिन यह केवल एक छोटी सी बाधा होनी चाहिए।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मौजूदा संग्रह के लिए वृद्धिशील क्षेत्र

  2. मोंगो अद्वितीय सूचकांक मामला असंवेदनशील

  3. मौजूदा मोंगोडब दस्तावेज़ में बाल दस्तावेज़ जोड़ना

  4. PHP7 से मोंगोडब संग्रहीत फ़ंक्शन को कॉल करें

  5. कैसे `Db.repairDatabase ()` के बिना हटाए गए स्थान को पुनः प्राप्त करने के लिए?