锁定谷歌实时数据库



我看到谷歌为javascript提供了api来协作:所有客户端都看到相同的模型。未定日期(我相信在model.beginCompoundOperationmodel.endCompoundOperation之间)声称是原子和持久的。这似乎是单个控制器的理想选择 - 多个查看器(在模型更新时刷新),但对于并发应用程序 IMO 来说似乎不够。就并发控制器守恒而言,当它们都开始操作模型而不考虑其他模型时,可能会导致模型不一致。

请考虑标识计数器。您维护一个图形。那是你的模型。每个节点都必须有自己的 ID。模型中只有一个 nextID 值。当客户端创建节点时,它会递增该字段。但是,您了解另一个客户端可以同时执行相同的操作。它们都将计数器从 4 增加到 5。但是,添加了两个节点。这表明共享数据访问还必须提供锁定接口。我在谷歌实时API中没有看到任何东西。甚至没有讨论过。为什么似乎没有人注意到,似乎没有人关心?

我认为您的担忧对于数据库来说是非常有效的,但是如果您对使用Google Realtime API来存储数据持怀疑态度,如果您要求数据模型具有ACID属性,则可能会使用Google Realtime API专门按照您描述的方式存储数据。本页讨论了您引用的一些约束,此处讨论了复合操作的限制和行为。

特别

感兴趣的是,就您对复合操作的引用而言,第二个链接中的以下内容:

但是,尽管在复合操作中进行的编辑是一起传递的,但它们不是原子的。由于冲突解决,复合操作中的某些编辑可能永远不会传递。

实时 API 中的数据模型对你所做的更改运行冲突解决,而不是保证操作将产生你请求的确切效果。存储按照您的描述结构化的数据并执行需要锁定的操作不是一个好的选择。第一个链接包含描述如何使用实时模型执行共享数学的参考。

最新更新