Java 谷歌AppEngine HRD——一致性与竞争?
我正在尝试为一个简单的图表编辑器建模,该编辑器将数据存储到GAE的HRD数据存储中,我面临着一些问题,不知您是否可以给我一些建议。基本上,编辑器的模型是: [图表]--包含-->[形状]--包含-->[文本] 最初,我将它们放在同一个实体组中,以确保数据一致。通过这样做,每当我添加新形状或向现有形状添加文本对象时,它们都会正确显示(从数据存储中查询);但是,我遇到了问题,因为用户可能会快速添加许多形状,这会导致每秒对图表对象进行多个更新,从而导致写入争用 或者,我可以这样设计: [图表][形状-包含diagramId][文本-包含shapeId] 这将它们放在不同的实体组中,当我创建一个新形状时,我只需要保存形状对象本身。这解决了写争用问题,但数据不再一致——取决于HRD提交写操作的时间,我可能会得到过时的数据 我尝试了一些组合,比如将图表放在缓存中,并且仅当缓存不包含图表时才从HRD中检索;但是,这是不可预测的,因为我不能确定该图是否在缓存中(我希望同时编辑许多图) 处理此类问题的最佳做法是什么?我正在使用Java和JDO,如果这有什么不同的话…请注意:Java 谷歌AppEngine HRD——一致性与竞争?,java,google-app-engine,datastore,Java,Google App Engine,Datastore,我正在尝试为一个简单的图表编辑器建模,该编辑器将数据存储到GAE的HRD数据存储中,我面临着一些问题,不知您是否可以给我一些建议。基本上,编辑器的模型是: [图表]--包含-->[形状]--包含-->[文本] 最初,我将它们放在同一个实体组中,以确保数据一致。通过这样做,每当我添加新形状或向现有形状添加文本对象时,它们都会正确显示(从数据存储中查询);但是,我遇到了问题,因为用户可能会快速添加许多形状,这会导致每秒对图表对象进行多个更新,从而导致写入争用 或者,我可以这样设计: [图表][形状-
get
,HRD读取是非常一致的;如果您使用query
,HRD读取最终是一致的(因为查询依赖于索引,而这些索引需要时间构建)。如果可能的话,您可以使用get
,绕过您的问题@Serialize
注释实现的(我不知道JDO,因为我不使用它)get
,HRD读取是非常一致的;如果您使用query
,HRD读取最终是一致的(因为查询依赖于索引,而这些索引需要时间构建)。如果可能的话,您可以使用get
,绕过您的问题@Serialize
注释实现的(我不知道JDO,因为我不使用它)