代码之家  ›  专栏  ›  技术社区  ›  Creos

在objectify/google云数据存储中,提供祖先是否可以提高过滤查询的性能?

  •  0
  • Creos  · 技术社区  · 12 年前

    我想知道这两个中的哪一个在性能(可能还有成本?)方面更胜一筹:

    1) ofy().load().type(A.class).ancestor(parentKey).filter("foo", bar).list()

    2) ofy().load().type(A.class) .filter("foo", bar).list()

    从逻辑上讲,我认为(1)会表现得更好,因为它限制了要在其上执行过滤的域(尽管显然有一个索引)。然而,我想知道我是否遗漏了一些考虑因素。

    非常感谢。

    1 回复  |  直到 12 年前
        1
  •  1
  •   Ed Davisson Alfred Fuller    12 年前

    包含祖先不应显著影响查询性能(正如您所注意的,每个选项都需要不同的索引)。

    在决定使用祖先查询时,更重要的考虑是您是否需要高度一致的查询结果。如果这样做,则需要将实体分组到实体组中,并使用祖先查询(示例中的#1)。

    将实体分组为实体组的权衡是,每个实体组每秒仅支持1次写入。

    您可以在这里找到关于构建数据以实现强一致性的更详细讨论: https://developers.google.com/datastore/docs/concepts/structuring_for_strong_consistency