在复杂条件下避免将模型插入DB的竞争条件

时间:2016-10-03 03:19:12

标签: node.js firebase firebase-realtime-database race-condition nosql

我们正在尝试创建一个算法/启发式,它将在特定时间段安排交付,但这里确实存在竞争条件,因此可以将两个冲突的预定项写入数据库,因为写入不是真的原子。

真正防止竞争条件的唯一方法是创建一些原子插入操作TMK。

服务器接收在某段时间内安排某些事情的请求,并且服务器必须在将数据写入数据库之前检查该时间段是否仍然可用。但在那段时间内,服务器可能会得到类似的请求并最终写出相互冲突的数据。

如何规避这个?是否有某种方法可以在DB本身中创建一些脚本来挂钩写入操作以使整个事物成为原子?通过在该脚本上设置锁定机制?使整个事物成为非原子的是服务器和数据库之间的读取和连线时间。

1 个答案:

答案 0 :(得分:2)

每当我遇到竞争状态时,我会想到一个立即解决方案QUEUE。

步骤1)您可以做的是,不是直接向数据库添加数据,而是可以将其添加到队列中而无需检查任何内容。

步骤2)单独的读者将从队列检查DB中读取任何冲突并采取必要的措施。

这是解决此问题的方法之一如果您实施任何更好的解决方案,请分享。

希望有所帮助