Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Google :处理最终一致性问题

Google :处理最终一致性问题
EN

Stack Overflow用户
提问于 2014-12-24 00:27:39
回答 1查看 774关注 0票数 1

我正在开发一个GAE web应用程序,我需要创建和删除没有祖先关系的两个实体的实例之间的关联(还考虑到同一个实例可能有多个关联,这些关联在时间上可能会发生变化,而祖先关系一旦创建,就不能被删除)。我已经体验过“最终一致性”策略,这意味着我的网页中的数据与我正在创建/删除的关系的更新不一致。但是,我已经看到,通过双倍执行put()方法,一致性似乎是强制性的。

这符合“最终一致性”定义,该定义规定,“.如果不进行新的更新.”数据最终将是一致的,而且,由于我正在进行另一次更新(实际上是相同的两次),我猜系统会强制保持一致性。

我说的对吗?还有其他更优雅的方法吗?

更新:我的AIM

假设我有一个A类型实体的列表,不管它们到底代表什么,假设它们代表我的业务的主要实体,我有一个B类型的实体的列表,它代表A类型的实体可以依赖的服务。它是一个多到多的关系,所以A服务b可以被许多A类型的实体a使用,a实体a可以被许多B类型的服务b所服务。

我有一个web页面,允许我创建这样的关系(一个带有来自客户端的Jquery回调的Jinja2模板和一个依赖于服务器端的数据存储的webapp2 python请求处理程序)。当关系从数据存储中移除时,我通过对a实体进行另一个查询并描述与其相关的b键列表来刷新数据。在这种情况下,我仍然可以在与a相关的b键列表中看到删除的b.key,这不是我所期望的。

更新:一些代码

这是模型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class A(ndb.Model):
    name = ndb.StringProperty()
    services = ndb.KeyProperty(repeated=True)

class B(ndb.Model):
    name = ndb.StringProperty()
    servedEntities = ndb.KeyProperty(repeated=True)

下面是我用来创建关系的代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
                a.services.append(b.key);
                b.servedEntities.append(a.key);
                a.put()
                b.put()

下面是我用来删除关系的代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
               a.services.remove(b.key);
               b.servedEntities.remove(a.key);
               a.put()
               b.put()

在关系删除后,a和b之间没有祖先关系,如果再次从数据存储中检索a,我仍然可以看到b.key在a.services中列出。

EN

回答 1

Stack Overflow用户

发布于 2014-12-24 09:19:54

你的问题的答案在于这一声明:

当关系从数据存储中移除时,我通过对一个实体进行另一个查询来刷新数据。

为什么需要一个新的查询?

假设一个用户订阅了服务x、y和z,现在一个用户告诉您将service z从列表中删除。你去Datastore做必要的改变。但是,与运行新的查询不同,新查询仍可能在返回的实体中显示z,您可以简单地从客户端的用户实体中删除z并相应地更新UI。

这显然是一个简化的例子。我在编写学校日程安排应用程序时遇到了类似的挑战,该应用程序有一个更复杂的用例--一次更改可能会影响到选定时间段内的许多实体(例如,“每一天安排一堂课,直到本季度结束”),所以我很想简单地运行一个新的查询来刷新时间表视图。显然,我遇到了一个最终的一致性问题,有时不得不创建几十个实体,这进一步放大了这个问题。然后,我意识到我已经拥有了在不运行新查询的情况下刷新视图所需的所有数据。这是一个更多的代码,但它是一个干净可靠的解决方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27633835

复制
相关文章

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文