【问题标题】:Are queries on the "__key__" property strongly consistent with GAE datastore?对“__key__”属性的查询是否与 GAE 数据存储区高度一致?
【发布时间】:2014-03-25 22:16:04
【问题描述】:

我知道对 GAE 数据存储的查询通常是最终一致的。但是我不明白为什么对 __key__ 的查询不应该是强一致的,因为我认为这是数据存储区 Get 函数使用的。

谁能确认__key__的查询是强一致的?

【问题讨论】:

  • 我会严重怀疑它。您仍在对索引进行操作,在这种情况下是键的索引,而不是其他一些属性。该索引仍使用与所有其他索引相同的一致性规则进行更新。
  • 我可以想象__key__ 索引由数据存储put 操作特殊处理,因此put 仅在更新后才返回。因此可以保证putget操作之间的强一致性。
  • 我不这么理解。 get 不需要索引,您执行的查询需要索引。如果您不相信,请运行一些测试。
  • 测试完成! .即使使用了__key__ 过滤器,没有祖先过滤器的查询也只会返回最终一致的结果。你甚至不能在事务中使用它(就像任何其他无祖先查询一样)所以基本上__key__ 或任何其他无种类查询在一致性方面没有区别。
  • @themihai awesome - 确凿的证据。

标签: java php python google-app-engine go


【解决方案1】:

查询只会在祖先查询上保持一致。否则即使索引包含关键条目也不一致。 这是因为写入分两个阶段应用,一个用于写入数据,另一个用于更新索引。 Get by key neves 使用索引,因此它始终正确。 我假设您正在生成半安全密钥,否则使用密钥的查询将无用。但是请注意,appengine 现在建议分散您的密钥,以便它们覆盖较大的空间,从而更好地分布在 bigtable 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 2018-08-13
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 2017-11-19
    相关资源
    最近更新 更多