我想下面的
- 在启动过程中,主处理从文件加载一个大表,并将其保存到共享变量。 该表有9列和12万行,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是一个key-value存储和我的数据是一个表。 我也写了一个C ++程序加载数据到内存中,并查询了不到1秒,所以我想在node.js中效仿这一