2016-04-15 10 views
0

Ich erstelle ein Caching-Modul für Nodejs, die mehrere CPUs mit Unterprozesse verwenden müssen.NodeJs gemeinsam genutzte Objekte zwischen Prozessen

possible setup

Ich mag, Daten speichern in einem Index in dem Master-Prozess oder vorzugsweise in einem Unterprozess wie folgt:

var index = { key1: 21, key2: 22, key3: 55 } 

und ein anderer Prozess sollte in diesem Index zu suchen, die Lage sein, als efficient as:

Ich nehme an, mit IPC wäre wesentlich langsamer als gemeinsame Objekte zu erreichen. Ist das überhaupt möglich? Vielen Dank.

+0

Warum nicht nur redis, memcached oder gar node-cache verwenden? Reife Caching-Frameworks mit guter Unterstützung. –

+0

@ MattiasÅslund Ich könnte, aber das ist nicht, worum es in diesem Modul geht: D –

+0

Warum die Downvotes? –

Antwort

0

Ich würde in Ihrem Fall redis verwenden. Es gibt Möglichkeiten, redis zu konfigurieren, wie oft es seine Speicherdaten auf der Festplatte speichert, basierend auf der Anzahl gespeicherter Einträge oder nur der Zeit (http://redis.io/topics/persistence).

Eine andere Option könnte das Senden von Anfragen zwischen Instanzen sein, um diese Speicherdaten nur auf dem Master zu speichern.

Wenn eine Nicht-Master-Instanz Daten speichern oder laden möchte, fordert sie den Master an. Hier

ist einige Pseudo-Code:

var SharedMemory = { 
    storeObject: function(args, done) { 
    if (IAmMaster()) { 
     storeObjectToMemory(args); 
     done(); 
    } else { 
     sendRequestToMasterForSave(args, done); 
    } 
    }, 
    getObject: function(args, done) { 
    if (IAmMaster()) { 
     done(getObjectFromMemory(args)); 
    } else { 
     getResponseFromMasterForLoad(args, done); 
    } 
    } 
} 

Dies ist jedoch wahrscheinlich gonna ein schmerzhafter Prozess

0

Sie möchten vielleicht mmap-object versuchen. Er koordiniert den gemeinsamen Speicher auf der Grundlage einer speicherabgebildeten Datei, was bedeutet, dass die Daten sowohl persistent sind als auch zwischen Prozessen ausgetauscht werden. Ich habe es geschrieben, um sowohl die Leistung als auch den Verwaltungsaufwand von redis oder einer ähnlichen Lösung zu vermeiden.

Für Ihre Anwendung kann die read-write version sein, was Sie wollen.

Verwandte Themen