【发布时间】:2015-04-14 00:53:11
【问题描述】:
我根据以下反馈更新了这个问题,使其更加具体
如果两个用户都发出执行以下操作的 HTTP 请求,MEAN 堆栈应用程序中是否可能存在竞争条件:读取记录,根据业务逻辑对记录进行一些更改,然后写回D B?还是因为单线程JS执行环境不可能?根据下面的一些 cmets,这听起来像是一个问题。有没有办法实现交易?或者,也许我需要创建一个作业队列或使用基于参与者的方法。我试图了解这种类型的问题通常是如何使用 MEAN 堆栈解决的。
【问题讨论】:
-
我实际上更多地在 Node JS 方面提出这个问题。我举了一个具体的例子,其中两个用户发出一个 HTTP 请求,该请求将读取、修改和写入文档。
-
@ademartini 问题是,node.js 从不写入文档,这是由第三方 api 或服务(例如数据库或文件系统)完成的。同样的事情也适用。虽然 node.js 不会同时发送两次写入,但如果您不小心,它会在第一次完成之前发送第二次写入。
-
我认为这是一个有效的问题,为什么要投反对票?考虑到 Node 的口头禅,它是单线程的,这是有道理的。
-
好的,当您说“根据业务逻辑更改记录”时,该逻辑具有 绝对最新 值是否重要,还是 1 秒前的值?可以接受吗?当您写回数据库时,存储在那里的值是 latest 操作的结果而不是之前发生的操作有多重要?如果你能描述你真正在做什么会有所帮助。
标签: javascript node.js race-condition mean-stack