3

为了减少读取时间,我对存储在 MongoDB 中的一些数据进行了非规范化。每当我执行写操作时都需要刷新它,以使其与底层数据保持一致。

为了避免任何竞争条件,我想将其分离到一个单线程的后台任务中。在 Java 中,我会简单地将 Command 对象放入队列中,并让读取器线程一次处理一个。但是在 Node 中,每当我执行任何类型的数据库操作时,它都会异步发生,因此我会遇到竞争条件问题。

我想做的例子:

应用程序线程

  1. 插入新的“投标”
  2. 将“BidPlaced”对象放入队列

后台线程

  1. 流行“出价”
  2. 从所有出价中查找最大值(价格)。更新 Auction.highestBid。

我仍然在思考 Node 的并发模型(以防你看不出来!)。我如何在 Node.js 中实现这样的目标。

4

1 回答 1

0

我有一个类似的应用程序,我使用child_process来分叉后台作业,因此:

  1. 插入新的“投标”
  2. 将“BidPlaced”对象放入队列

然后我会将队列中的下一个投标发送给子进程:

// Application Thread
var child = cp.fork('the background thread module');
child.send(nextBid);

在后台线程上监听消息:

// Background Thread
process.on('message', function(bid) {
    // Do your background work
    process.send(bid);
});

然后在应用程序中监听后台完成:

// Application Thread
child.on('message', function(lastBid) {
    // Check the queue and do it again
});
于 2013-04-09T18:38:01.983 回答