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

标签 javascript node.js mongodb

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

服务器的主要事件可以描述如下:

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

  1. 从数据库读取数据
  2. 对第 1 步的数据进行计算
  3. 从数据库中读取更多数据(所需数据取决于第 2 步的结果)
  4. 对第 1 步和第 3 步的数据进行计算
  5. 将数据写入数据库(创建或更新)

--> 发送响应消息(通过 WebSocket)

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

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

问题:

  1. 由于第 1 步和第 3 步中读取的数据必须一致,并且如果数据库中的数据在第 3 步和第 5 步之间发生了变化,则第 5 步中的写入可能不再有效,所以在我看来,我不能使用异步调用完全没有数据库(因为数据库中的数据可能会在上述步骤之间被其他代码更改)。对吗?
  2. 当考虑在同一个数据库上运行多个 node.js 实例的部署时(我认为这就是 nodejitsu 所说的“无人机”,对吧?)然后我什至必须使用跨越步骤 1 到步骤 5 的数据库事务。对吗?

在我看来,在所有这些情况下使用对数据库的同步调用并进行事务将是糟糕的设计并会引入性能问题。有更好的方法吗?

如有任何提示,我们将不胜感激!提前致谢!!

最佳答案

问题 1:

node.js 是异步的。这是事实。如果你不能在这种模式下设计你的应用程序,你就不能使用 node.js

当然,有一些技术和模式可以让您在异步环境中做您想做的事。以下是一些可能会引导您走向正确方向的关键字、函数和链接:

问题 2:

使用事务可能很好,但你不能,因为mongoDB does not have any .你必须自己在 nodejs 端对它们进行编程。这是 mongoDB 的基本原理之一:程序员(而不是数据库)的所有权力。福与祸!

关于javascript - 我是否需要使用来自 node.js 的 mongodb 进行同步调用/事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21525178/

相关文章:

javascript - .js 文件和 jQuery AJAX 方法

javascript - 使用 Javascript 比较嵌套对象并保存新对象中的差异

php - 如何在网络应用程序中显示和操作视觉对象?

javascript - 从 Kendo 上的 ListView 项模板访问模型数据

php - 如何使用带有 laravel 的 Redis 和 Nodejs 广播消息

javascript - 为什么 express-session(SameSite 属性)在 Chrome 上不起作用?

javascript - 如何在javascript中比较两个时间戳值?

mongodb - 使用 MongoDB 配置 Sonata Media Bundle 时出现问题

arrays - 可变的用户选择

javascript - 我收到一个有效函数的 422 错误