2016-12-04 5 views
2

Я намерен использовать nodejs на сервере - 12 ядер, 64 ГБ оперативной памяти.Использование глобального объекта vs Redis (nodejs)

Если у меня есть объект, как так -

obj= {x1: [user1_id, user2_id, user4_id, user89_id, user541_id], 
     x2: [user55_id, user44_id, user3_id, user89_id, user132_id], 
     .... } 

Вопрос: В какой момент это имеет смысл хранить OBJ в Redis, а не в глобальном объекте? (В масштабе, я ожидаю иметь ~ 300000 ключей в среднем по 5 элементов в каждом)
(Постоянство OBJ не проблема)

Вопрос: Что позволено как максимальный размер кучи nodejs процесс?

+0

Если вы захотите использовать nodejs-кластеризацию для использования 12 ядер, тогда вы захотите использовать redis, чтобы все кластерные процессы могли получить доступ к данным. Использование redis также поможет вам с использованием памяти nodejs, поскольку вы будете перемещать redis-хранилище в другой процесс и из процесса nodejs. – jfriend00

+0

Если я использую cluster.fork() внутри основного процесса сервера, глобальные переменные не будут доступны внутри разветвленных процессов? – vjjj

+0

Глобалы не разделяются между кластеризованными процессами node.js или совместно с другими процессами. – jfriend00

ответ

5

Вот несколько причин, чтобы перейти к Redis:

  1. Если вы хотите, чтобы ваш процесс кластера Node.js, чтобы воспользоваться несколькими ядрами для обработки большой нагрузки. Глобальные переменные в node.js не распределяются между кластерными процессами, поэтому вам понадобятся данные, которые будут управляться другим процессом (redis), к которому может получить доступ каждый кластер node.js.

  2. Если вас беспокоит использование большой памяти внутри node.js. Перемещение на redis перемещает память, используемую данными из процесса node.js.

  3. Если вы хотите использовать некоторые функции управления данными или другие функции redis.

Per this article, вы можете набрать до разрешенного использования памяти node.js довольно далеко (от колпачка в памяти по умолчанию из 1.76GB до 26GB).