我想要以下内容:
- 在启动期间,主进程从文件中加载一个大表,并将其保存到共享变量中。该表具有9列和1200万行,大小为432MB。
- 工作进程运行HTTP服务器,接受实时查询以对大表进行操作。
以下是我的代码,显然没有达到我的目标。
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);
}
我已经尝试将大表保存到MongoDB中,以便每个进程都可以轻松访问数据。但由于表的大小很大,即使使用索引,MongoDB也需要约10秒钟才能完成我的查询。这太慢了,对于我的实时应用程序是不可接受的。我还尝试过Redis,它将数据保存在内存中。但Redis是一个键值存储,而我的数据是一张表。我还编写了一个C++程序将数据加载到内存中,查询只花费了不到1秒钟,所以我想在node.js中模拟这个过程。
memcached
Тў»тљджђѓтљѕтГўтѓеУ┐ЎС║ЏТЋ░ТЇ«№╝Ъ - sarnold