在Node + Mongo中强制使用单个DB编写器

时间:2013-04-02 02:14:50

标签: node.js mongodb

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

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

我想做的例子:

申请主题

  1. 插入新的“出价”
  2. 将“BidPlaced”对象放入队列
  3. 后台主题

    1. Pop“BidPlaced”
    2. 查找所有出价的最高价(价格)。更新Auction.highestBid。
    3. 我仍然关注Node的并发模型(如果你不知道的话!)。我如何在Node.js中实现类似的功能。

1 个答案:

答案 0 :(得分:0)

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

  1. 插入新的“出价”
  2. 将“BidPlaced”对象放入队列
  3. 然后我会向子进程发送队列中的下一个出价:

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