Configura índices de Datastore

App Engine usa índices en Datastore para cada consulta que realiza tu aplicación. Estos índices se actualizan siempre que se modifica una entidad, de modo que se puedan mostrar resultados rápidamente cuando la aplicación realiza una consulta. Para ello, Datastore necesita saber de antemano qué consultas realizará la aplicación. Debes especificar los índices que tu aplicación necesita en un archivo de configuración. El servidor de desarrollo local puede generar automáticamente el archivo de configuración de índices mientras pruebas tu aplicación.

Esta guía proporciona instrucciones para crear tus índices y administrarlos. Si deseas obtener información de referencia, consulta Índices de Datastore.

Crea índices de Datastore

Cada consulta de Datastore que realiza una aplicación necesita un índice correspondiente. Los índices para las consultas simples, como las de una sola propiedad, se crean de manera automática. Los índices para las consultas complejas se deben definir en el archivo de configuración denominado index.yaml. Este archivo se implementa junto con la aplicación para crear los índices en Datastore.

El siguiente es un ejemplo de un archivo 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

Crea índices mediante el servidor de desarrollador

El servidor web de desarrollador (dev_appserver.py) agrega automáticamente elementos a este archivo cuando la aplicación intenta ejecutar una consulta que necesita un índice que no tiene una entrada adecuada en el archivo de configuración.

Si pruebas todas las consultas que realizará tu aplicación, el servidor de desarrollo generará una lista completa de entradas en el archivo index.yaml.

Cuando este servidor agrega una definición de índices generada para index.yaml, lo hace debajo de la siguiente línea, que inserta si es necesario:

# AUTOGENERATED

El servidor web de desarrollador considera todas las definiciones de índices debajo de esta línea como automáticas y puede que las actualice a medida que la aplicación realiza consultas.

Crea índices de forma manual

Puedes agregar índices de forma manual al archivo index.yaml o puedes editar las entradas existentes. En el caso de las consultas controladas de forma manual, debes agregarlas por encima de la línea que tiene el comentario AUTOGENERATED.

Se considera que todas las definiciones de índices ubicadas por encima de esta línea son de control manual, por lo que el servidor web de desarrollador no las actualiza. El servidor de desarrollo solo modifica lo que está debajo de la línea y solo si en el archivo index.yaml completo no existe un índice que corresponda a una consulta ejecutada por la aplicación. Para controlar una definición de índice automática, colócala por encima de esta línea.

Consulta la referencia de index.yaml para obtener información sobre la sintaxis.

Actualiza índices

Sube el archivo de configuración index.yaml en Datastore con el comando de gcloud. Si el archivo index.yaml define algún índice que no existe en Datastore, se compilarán esos índices nuevos.

Puede que Datastore tarde un tiempo en crear todos los índices y, por lo tanto, estos no estarán disponibles de inmediato para App Engine. Si tu aplicación ya está configurada para recibir tráfico, pueden ocurrir excepciones con las consultas que requieren un índice que aún se encuentra en proceso de creación.

A fin de evitar excepciones, debes dejar que pase suficiente tiempo para que se creen todos los índices. Para obtener más información y ejemplos sobre la creación de índices, consulta cómo implementar una aplicación de Python 2.

Para subir tu configuración de índice en Datastore, ejecuta el siguiente comando desde el directorio en el que se encuentra tu index.yaml:

gcloud datastore indexes create index.yaml

Para obtener información, consulta la referencia de gcloud datastore.

Puedes usar Cloud Console para verificar el estado de los índices.

Borra índices en desuso

Cuando cambies o quites un índice de index.yaml, el índice original no se borrará automáticamente de Datastore. Esto te permite mantener en ejecución una versión anterior de la app mientras que se crean los índices nuevos, o volver de inmediato a la versión anterior si surge un problema con una versión nueva.

Cuando estés seguro de que no volverás a necesitar los índices restantes en Datastore, puedes ejecutar el siguiente comando para borrar cualquier índice que no esté definido en el archivo index.yaml:

gcloud datastore indexes cleanup index.yaml

Para obtener información, consulta la referencia de gcloud datastore.