【问题标题】:Force strong consistency with objectify on GAE using ancestors使用祖先在 GAE 上强制与 objectify 的强一致性
【发布时间】:2015-06-20 14:00:19
【问题描述】:

据我了解,使用 objectify 查询具有祖先的对象应该以强一致性查询,这意味着我应该始终获得最新的对象对吗?

好像不是这样的。

这是从数据存储中提取数据的示例:

  Key<Rule> k = Key.create(Key.create(NinjaAccount.class, accountId), Rule.class, ruleId);
  return ofy().consistency(Consistency.STRONG).load().key(k).now();

或查询多个实体:

return ofy().consistency(Consistency.STRONG).load().type(Rule.class).ancestor(Key.create(NinjaAccount.class, accountId))
    .list();

但是,当我更新 Rule 对象上的一个字段时,我可以连续运行此代码多次,并让它在新值和旧值之间来回切换。我究竟做错了什么??我几乎准备好切换到 mysql,但我希望有一些我误解的小东西。

【问题讨论】:

    标签: java google-app-engine google-cloud-datastore objectify


    【解决方案1】:

    您发布的代码没有任何问题。此外,一致性(Consistency.STRONG)调用是不必要的;默认情况下,get-by-key 和祖先查询是高度一致的。

    问题不在于最终的一致性。

    您是否使用旧版本的 Objectify 并且忽略了安装 ObjectifyFilter?从历史上看,这是最有可能出现的问题(在常见问题解答中)。但是,如果您还没有安装过滤器,最新版本的 Objectify 会抛出异常,所以如果您是最新版本,那就是别的了。

    【讨论】:

    • 谢谢!这似乎解决了它。我刚想到它,这是一致性的问题,我永远不会发现。再次感谢。
    • 你可以在非祖先查询上使用 STRONG 标志来强制强一致性吗?
    • 不。普通查询总是最终一致的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多