2016-04-15 3 views
0

Я создаю модуль кэширования для Nodejs, который должен использовать несколько процессоров с использованием подпроцессов.Общие объекты NodeJs между процессами

possible setup

Я хотел бы хранить данные в индексе в основном процессе, или, предпочтительно, в подпроцесс следующим образом:

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

и другой процесс должен иметь возможность поиска в этом индексе как эффективно, поскольку:

if('key2' in index) // do stuff 

Я предполагаю, что использование IPC будет значительно медленнее, чем достижение общих объектов. Возможно ли это? Благодарю.

+0

Почему бы просто не использовать redis, memcached или даже кеш-узел? Зрелые структуры кэширования с хорошей поддержкой. –

+0

@ MattiasÅslund Я мог бы, но это не то, о чем этот модуль: D –

+0

Почему downvotes? –

ответ

0

Я использовал бы redis в вашем случае. Существуют способы настройки redis на том, как часто он будет хранить данные своей памяти на диске в зависимости от того, сколько записей сохраняется или просто время (http://redis.io/topics/persistence).

Другим вариантом может быть отправка запросов между экземплярами для сохранения данных в памяти только на главном компьютере.

Если экземпляр неинтерфейса хочет сохранить или загрузить данные, он запросит мастер.

Вот некоторые псевдокод:

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

Однако, это, вероятно, собирается быть болезненным процессом

0

Вы могли бы хотеть попробовать mmap-object. Он координирует общую память на основе файла с отображением памяти, что означает, что данные являются постоянными, а также распределены между процессами. Я написал это так, чтобы избежать как служебных, так и управленческих издержек redis или аналогичного решения.

Для вашего применения read-write version может быть тем, что вы хотите.

Смежные вопросы