gpt4 book ai didi

google-app-engine - 没有复合索引,多属性的ndb查询怎么能成功呢?

转载 作者:太空宇宙 更新时间:2023-11-03 15:34:57 26 4
gpt4 key购买 nike

我有这个实体模型:

class ApartCILabel(ndb.Model):
project_id = ndb.IntegerProperty(indexed=True)
changeset_ids = ndb.IntegerProperty(repeated=True, indexed=True) # ApartCIChangeset IDs
# other properties

我最近为这些实体添加了一种新的查询类型:

            keys = ApartCILabel.query(ApartCILabel.project_id == self.db_data.project_id,
ApartCILabel.changeset_ids == self.key_id).fetch(keys_only=True)
if keys:
label = Label(db_key=keys[0], handler=self.handler)
logging.debug('label found: %s' % label.name)
else:
logging.error('label for %s not found' % self.lid)

我知道我需要一个复合索引,所以我在 dev_appserver.py 中运行该应用程序,它用于自动更新我的 index.yaml 文件。在日志中看到调试信息,说明查询成功:

DEBUG    2018-02-20 23:56:11,720 ci_changeset.py:70] label found: ACI_COPY_OF_SMALL_180221_1

令我惊讶的是,我在我的 index.yaml 文件中没有看到任何更新。好的,自上次需要索引更新(现在运行 1.9.65)以来,我确实更新了我的 GAE SDK,也许我正在使用基于符号链接(symbolic link)的方案来共享我的索引定义文件我的服务以某种方式干扰。没问题,我将在 GAE 上部署更改,我会在那里看到缺少复合索引错误。

再次惊喜:查询成功,没有报错。

我检查了我的 index.yaml 文件,这种唯一的复合索引是这个:

- kind: ApartCILabel
properties:
- name: project_id
- name: created
direction: desc

我仔细检查了开发人员控制台中的数据存储索引,正如我所料,它与 index.yaml 文件同步:

enter image description here

我什至在开发者控制台中进行了手动查询,这应该也需要一个复合索引。同样成功:

enter image description here

如果没有复合索引,这样的查询怎么可能运行呢?我错过了什么?

更新:

几个小时后,我执行了另一个类似的手动查询,结果再次正确,但这次 您的数据存储没有此查询所需的复合索引(开发人员提供)。 错误(或者我应该称之为警告?)出现了:

enter image description here

最佳答案

仅使用相等过滤器的查询不需要创建复合索引。来自文档:

Cloud Datastore provides built-in, or automatic, indexes for queries of the following forms:

  • Queries using only ancestor and equality filters

https://cloud.google.com/datastore/docs/concepts/indexes#index_configuration

关于google-app-engine - 没有复合索引,多属性的ndb查询怎么能成功呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48896357/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com