Mysql 如何在RESTful系统中处理新创建记录的竞争条件

Mysql 如何在RESTful系统中处理新创建记录的竞争条件,mysql,node.js,concurrency,race-condition,Mysql,Node.js,Concurrency,Race Condition,我控制着两个系统,我们称它们为proxy和store,并且可以访问第三方系统,我们称之为producer +----------+ +-------+ +-------+ | producer | -> | proxy | -> | store | +----------+ +-------+ +-------+ 生产者通过使用这些消息并使用HTTP请求将它们发送到存储中的代理,生成成为存储中记录的消息。我遇到的并发性问题是,消息的生成速度足够快,用于更新记

我控制着两个系统,我们称它们为
proxy
store
,并且可以访问第三方系统,我们称之为
producer

+----------+    +-------+    +-------+
| producer | -> | proxy | -> | store |
+----------+    +-------+    +-------+
生产者通过使用这些消息并使用HTTP请求将它们发送到存储中的代理,生成成为存储中记录的消息。我遇到的并发性问题是,消息的生成速度足够快,用于更新记录的消息可能会在创建记录的消息到达存储之前到达存储

我的问题

在发送任何补丁请求之前,我在代理上使用了一个简单的超时来解决这个问题。就目前而言,它是可行的,但我知道这是一个有一些真正缺陷的黑客

我的问题是,我还应该怎么想呢?有什么更惯用的(甚至是规范的)方法来实现这一点。我在代理和存储上都使用Node,存储后面是MySQL。目前(最重要的一句话),无法访问像Redis这样的键值存储

似乎有意义的解决方案是:(A)实现某种类型的锁,(B)使所有db输入成为一个
INSERT。。。在重复密钥更新时
查询。对于(A),我不确定锁应该发生在哪里——在代理上,还是在商店上?对于(B),这似乎打破了HTTP方法的语义

非常感谢您对这些(或完全不同的策略)的任何意见。

创建一个符合您需要的精心设计的方案?创建一个符合您需要的精心设计的方案?