我正在开发一个动态应用程序,其中会有大量请求快速进入。 流程就像,
第一个请求在第二个请求结束之前进入。我想让第二个请求等到第一个请求完成。 我怎样才能做到这一点?任何一般性的想法都是必需的。
P.S第一个请求在数据库中进行了一些更改,第二个请求的数据反映在其中。因此,我必须等待第二个请求,直到第一个请求完成该过程。
答案 0 :(得分:0)
我认为您的基本问题是如何在向节点服务器发出多个写入请求的情况下避免数据库争用情况(对一般问题的通用答案)。 好吧,如果是这种情况,你的问题不是新的,有办法避免或管理它,我会尝试列出并解释其中的一些,我认为你可以成为哪一个适合你的情况的最佳判断。
锁定数据库或记录
你需要“阅读你的写作”,这意味着在你写下来之前 更改,您需要再次阅读记录并检查是否有任何更改 自上次阅读以来所做的事情。你可以这样做 逐字段(细粒度)或基于时间戳 (粗粒)。当您执行此操作时,您需要一个独占锁 在记录上。如果没有进行任何更改,您可以写下您的 更改并释放锁定。如果记录已经改变了 与此同时,您中止事务,释放锁定并通知 用户。
版本控制:
考虑这是实施版本控制的数据库记录{id:1, status: unimportant, version:5}
现在你有3到4个排队的请求没有执行顺序。
每个请求可以包含以下伪代码:请求1
1. Read record (r1)
2. if (the version of previosuly read rrecord is <= recordToSave) : GoTo Step 5
3. update record
4. else : read again
5. Update Database and Increament version
活动采购: 这是一个应用程序,我们将应用程序状态的所有更改捕获为临时队列中的一系列事件,可以是简单的FIFO或基于Weigthage等。
通过这种方式,您可以将所有请求存储在队列中并逐个解析,而不会丢失任何请求并维护流程。在深入实施之前,请参考this article。
此evenstore模块是有助于在NodeJS中创建CQRS事件存储的模块之一
这只是冰山一角,在您决定哪种方式最适合您之前,您可能需要仔细阅读以下参考资料。