使用 index.yaml 配置 Datastore 索引

您可以使用 Cloud Datastore 来存储柔性环境中运行的应用的数据。Cloud Datastore 使用索引来处理应用执行的每个查询。实体发生变化时这些索引也会得到更新,因此在应用执行查询时,Datastore 可快速返回结果。为此,Cloud Datastore 需要预先了解应用将执行哪些查询。您可以在 index.yaml 配置文件中指定应用所需的索引。您可以在测试应用时使用 Cloud Datastore 模拟器来自动生成该文件,也可以自行编写该文件。部署应用时,您必须上传 index.yaml 文件。

关于 index.yaml

应用执行的每个 Cloud Datastore 查询都需要相应的索引。简单查询(例如对单个属性的查询)的索引是自动创建的。复杂查询的索引必须在名为 index.yaml 的配置文件中进行定义。此文件随应用一并上传,用于在 Cloud Datastore 中创建索引。

index.yaml 文件的示例如下:

indexes:

- kind: Cat
  ancestor: no
  properties:
  - name: name
  - name: age
    direction: desc

- kind: Cat
  properties:
  - name: name
    direction: asc
  - name: whiskers
    direction: desc

- kind: Store
  ancestor: yes
  properties:
  - name: business
    direction: asc
  - name: owner
    direction: asc

index.yaml 的语法采用 YAML 格式。如需详细了解此语法,请访问 YAML 网站了解详情。

索引定义

index.yaml 具有一个名为 indexes 的列表元素。列表中的每个元素表示一个应用索引。

索引元素可包含以下元素:

kind
查询的实体种类。此元素是必需的。
properties

一个要作为索引列包含在内的属性列表,排序顺序如下:先是等式过滤条件中使用的属性,然后是非等式过滤条件中使用的属性,最后是排序顺序及其方向。

此列表中的每个元素均包含以下元素:

name
属性的 Datastore 名称。
direction
排序方向,采用 asc(升序)或 desc(降序)。仅查询的排序顺序中使用的属性需要该元素,且必须与查询使用的方向匹配。默认为 asc
ancestor

如果查询具有祖先子句 (Query.setAncestor),则此元素为 yes。默认为 no

创建索引文件

您可以使用文本编辑器并按照上述文件布局手动创建索引文件。更高效的方法是在本地测试应用时自动生成文件。您可以结合使用这两种方法。

当您在本地环境中测试应用时,可以先使用 gcloud 模拟器命令启动模拟 Cloud Datastore 的服务,然后再运行应用:

gcloud beta emulators datastore start --data-dir DATA-DIR

使用 --data-dir 标志可指定自动生成的 index.yaml 文件的存储目录。

在测试应用时,每当您生成一个 Cloud Datastore 查询,该模拟器都会将生成的索引定义添加到 index.yaml。所有自动生成的索引都将出现在文件中以下行的下方:

# AUTOGENERATED

此行上方的所有索引定义都视为手动控制,而且不会由开发网络服务器进行更新。网络服务器将仅会更改该行下方的内容,并且仅在完整的 index.yaml 文件未包含与应用执行的查询对应的索引时才执行此操作。要手动控制自动生成的索引定义,请将其移到该行上方。

模拟器可能会在应用执行查询时更新该行下方的现有定义。如果应用在您测试时生成其将要执行的每个查询,则 index.yaml 中生成的条目将是完整的。您可能需要手动修改该文件以删除生产环境未使用的索引,或者定义测试时未创建的索引。

部署索引文件

在部署应用之前,您应使用 gcloud 命令来部署 index.yaml 文件:

gcloud app deploy index.yaml