0

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

考虑身份计数器。您维护一个图表。那是你的模型。每个节点都必须有自己的 id。模型中有一个 nextID 值。当客户端创建一个节点时,它会增加该字段。但是,您知道另一个客户可以同时做同样的事情。他们都将计数器从 4 增加到 5。但是,添加了两个节点。这表明共享数据访问还必须提供锁定接口。我在 Google Realtime API 中看不到任何内容。甚至没有讨论。为什么似乎没有人注意到,也没有人关心?

4

1 回答 1

1

我认为您的担忧对于数据库来说是非常有效的,但是如果您需要数据模型具有 ACID 属性,我会怀疑使用 Google Realtime API 来专门存储数据的方式。本页讨论了您引用的一些约束,这里讨论复合操作的限制和行为。

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

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

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

于 2015-01-28T18:59:37.487 回答