我什么时候需要Google App Engine数据存储区的索引?

时间:2019-04-09 02:36:58

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

我正在为我的项目使用带有旧数据存储区(而非NDB)的Google App enginge Python 2.7标准环境。

我遇到了数据存储区自定义索引的奇怪行为。

我有这样的模特。

class EmailHistory(db.Model):
    code = db.StringProperty(required=True)
    account = db.ReferenceProperty(Account)
    group = db.ReferenceProperty(Group)
    ......

然后我尝试使用下面的查询来获取实体。

q = EmailHistory.all().filter('account =', account).filter('code =', code).filter('group =', group)
lst = [e for e in q]

由于我要通过三个属性进行查询,因此我期望此查询需要自定义索引。 (我的理解是AppEngine为每个属性自动创建内置索引,因此我不需要为单个属性的查询定义索引。但是,如果要按多个属性进行查询,则需要定义自定义索引)

但是当我在本地运行它时,它并不会自动生成自定义索引。而且,当我在Google App引擎服务器上运行它时,我能够在没有NeedIndexError的情况下获取实体。

我的问题是,Datatstore何时确切需要自定义索引?我已经阅读了他们的官方文档,但没有弄清楚为什么我不需要上面的查询的自定义索引。 https://cloud.google.com/appengine/docs/standard/python/datastore/indexes

1 个答案:

答案 0 :(得分:1)

Cloud Datastore能够执行可以使用合并联接的查询。您可以在https://cloud.google.com/appengine/articles/indexselection上找到更多详细信息。

https://cloud.google.com/appengine/docs/standard/python/datastore/indexes#index-configuration上,它说:“这些预定义索引足以执行许多简单查询,例如仅相等查询和简单不平等查询”。您的查询是纯等查询。