【问题标题】:Google Datastore low-level api query by key property谷歌数据存储低级API查询键属性
【发布时间】:2010-05-26 23:27:05
【问题描述】:

我正在使用低级 google 数据存储 api,我想通过 key 属性和另一个属性(我们称之为类别)进行查询。

我需要根据我将使用 IN 运算符的键列表进行查询。我知道最大。您可以为 IN 子句提供的值的数量是 30。

我有两个问题:

  1. 30 个 IN 值的限制是否也适用于 key 属性?
  2. 我是否需要在 {__key__ + category} 上或仅在 {category} 上为此查询创建复合索引?

谢谢, 可乐

【问题讨论】:

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


    【解决方案1】:
    1. 不,限制仅限于 IN 值。
    2. 不,您不需要索引。

    但是,如果您可以避免执行 IN 查询,请这样做 - IN 查询在内部被评估为多个相等查询,IN 中的每个元素一个。

    【讨论】:

    • 谢谢,尼克。除了 IN 之外,我还有其他方法可以过滤一组键吗? DatastoreService.get(keys) 返回与键对应的所有实体,但不允许我对它们应用另一个过滤器。
    • 检索列表中的所有键,然后手动过滤。它仍然比每个实体执行一次查询要快得多!
    • 如果我有一百万把钥匙,并且需要找出这百万把钥匙中是否存在我目前随身携带的 100 把钥匙怎么办?
    • @Nischal 我不明白你在问什么。您需要对这百万个密钥执行的测试的性质是什么?
    • @nick-johnson 对此感到抱歉,我对这个问题非常热情。这里的第一条评论实际上回答了我的疑问。我需要知道的是,如果我必须查找 100 个密钥(我使用电子邮件地址作为唯一的东西创建密钥对象),我想我需要使用 DatastoreService.get(List of keys)