我是否需要使用node.js中的mongodb进行同步调用/事务?

时间:2014-02-03 10:43:25

标签: javascript node.js mongodb

我目前正在尝试使用node.js和WebSocket,构建一个简单的MMO服务器和客户端(没有什么复杂的,只是为了学习node.js和HTML5)。除数据持久性外,基本功能已完成。到目前为止,所有数据都保存在内存中,但现在我想用mongodb(或类似的东西)添加持久存储。我的问题是如何实现node.js应用程序和数据库之间的通信。

服务器的主要活动可以描述如下:

接收传入消息(通过WebSocket) - >

  1. 从DB
  2. 读取数据
  3. 对来自步骤1的数据的计算
  4. 从DB中读取更多数据(所需数据取决于步骤2的结果)
  5. 计算步骤1和3的数据
  6. 将数据写入DB(创建或更新)
  7. - > 发送响应消息(通过WebSocket)

    (步骤3-5并不总是发生)

    我想这是一个非常常见的用例。

    问题:

    1. 由于步骤1和3中读取的数据必须一致且如果DB中的数据在步骤3和5之间发生了变化,步骤5中的写入可能不再有效,在我看来,我不能使用异步调用完全是DB(因为在上述步骤之间,DB中的数据可能会被其他代码更改)。这是对的吗?
    2. 当考虑在同一个数据库上运行多个node.js实例的部署时(我认为这就是nodejitsu所谓的“无人机”,对吗?)然后我甚至不得不使用跨越步骤1到5的数据库事务。这是对的吗?
    3. 在我看来,使用同步调用数据库并在所有这些情况下进行交易将是糟糕的设计并引入性能问题。有更好的方法吗?

      任何暗示都会有很大的暗示!非常感谢提前!!

1 个答案:

答案 0 :(得分:0)

问题1:

node.js是异步的。这是事实。如果您无法在此模式下设计应用程序,则无法使用node.js

当然,有一些技术和模式可以让你在异步环境中做你想做的事。以下是一些可能引导您朝着正确方向前进的关键字,功能和链接:

问题2:

使用交易可能会很好,但你不能,因为mongoDB does not have any。你必须自己编程nodejs-side。这是mongoDB基础之一:程序员(而不是数据库)的所有权力。痛苦和悲伤!