En node.js, ¿cómo declarar una variable compartida que puede ser inicializada por el proceso maestro y accedida por los procesos de trabajo?

Quiero lo siguiente

Durante el inicio, el proceso maestro carga una tabla grande desde un archivo y la guarda en una variable compartida. La tabla tiene 9 columnas y 12 millones de filas, 432 MB de tamaño.Los procesos de trabajo ejecutan el servidor HTTP, aceptando consultas en tiempo real contra la tabla grande.

Aquí está mi código, que obviamente no logra mi objetivo.

var my_shared_var;
var cluster = require('cluster');
var numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
  // Load a large table from file and save it into my_shared_var,
  // hoping the worker processes can access to this shared variable,
  // so that the worker processes do not need to reload the table from file.
  // The loading typically takes 15 seconds.
  my_shared_var = load('path_to_my_large_table');

  // Fork worker processes
  for (var i = 0; i < numCPUs; i++) {
    cluster.fork();
  }
} else {
  // The following line of code actually outputs "undefined".
  // It seems each process has its own copy of my_shared_var.
  console.log(my_shared_var);

  // Then perform query against my_shared_var.
  // The query should be performed by worker processes,
  // otherwise the master process will become bottleneck
  var result = query(my_shared_var);
}

He intentado guardar la tabla grande en MongoDB para que cada proceso pueda acceder fácilmente a los datos. Pero el tamaño de la tabla es tan grande que a MongoDB le lleva aproximadamente 10 segundos completar mi consulta, incluso con un índice. Esto es demasiado lento y no es aceptable para mi aplicación en tiempo real. También he intentado Redis, que guarda los datos en la memoria. Pero Redis es un almacén de valores clave y mis datos son una tabla. También escribí un programa en C ++ para cargar los datos en la memoria, y la consulta tardó menos de 1 segundo, así que quiero emular esto en node.js.

Respuestas a la pregunta(5)

Su respuesta a la pregunta