W node.js, jak zadeklarować współużytkowaną zmienną, która może być zainicjowana przez proces master i dostępna dla procesów roboczych?

Chcę następować

Podczas uruchamiania proces główny ładuje dużą tabelę z pliku i zapisuje ją w udostępnionej zmiennej. Tabela ma 9 kolumn i 12 milionów wierszy, rozmiar 432 MB.Procesy robocze uruchamiają serwer HTTP, akceptując zapytania w czasie rzeczywistym względem dużej tabeli.

Oto mój kod, który oczywiście nie osiąga mojego celu.

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

Próbowałem zapisać dużą tabelę w MongoDB, aby każdy proces mógł łatwo uzyskać dostęp do danych. Ale rozmiar tabeli jest tak duży, że MongoDB potrzebuje około 10 sekund, aby zakończyć moje zapytanie nawet z indeksem. Jest to zbyt wolne i niedopuszczalne dla mojej aplikacji w czasie rzeczywistym. Próbowałem także Redis, który przechowuje dane w pamięci. Ale Redis jest sklepem o kluczowej wartości, a moje dane to tabela. Napisałem również program C ++, aby załadować dane do pamięci, a zapytanie zajęło mniej niż 1 sekundę, więc chcę to emulować w node.js.

questionAnswers(5)

yourAnswerToTheQuestion