Referencia de datastore-indexes.xml

App Engine predefine un índice simple en cada propiedad de una entidad. Una aplicación de App Engine puede definir más índices personalizados en un archivo de configuración de índices llamado datastore-indexes.xml. El servidor de desarrollo puede generar la configuración de índices que necesita la aplicación cuando realiza estas consultas mientras pruebas la app. Puedes ajustar los índices de forma manual si editas el archivo datastore-indexes.xml antes de subir la aplicación. Consulta Configura índices de Datastore para obtener información sobre cómo implementar y administrar la configuración de índices.

Ejemplo

El siguiente es un ejemplo de un archivo datastore-indexes.xml:

<?xml version="1.0" encoding="utf-8"?>
<datastore-indexes
  autoGenerate="true">
    <datastore-index kind="Employee" ancestor="false">
        <property name="lastName" direction="asc" />
        <property name="hireDate" direction="desc" />
    </datastore-index>
    <datastore-index kind="Project" ancestor="false">
        <property name="dueDate" direction="asc" />
        <property name="cost" direction="desc" />
    </datastore-index>
</datastore-indexes>

Sintaxis

El elemento <datastore-index> puede contener los siguientes elementos:

Elemento Descripción
<kind> Obligatorio. El tipo de entidad para la consulta.
<properties>

Una lista de las propiedades que deben incluirse como columnas del índice, en el orden de clasificación deseado: primero, las propiedades de los filtros de igualdad; luego, las propiedades de los filtros de desigualdad; por último, los órdenes de clasificación y sus sentidos.

Cada elemento de la lista se compone de los siguientes elementos:

<name>
El nombre del almacén de datos de la propiedad.
<direction>
El sentido de la clasificación, que puede ser asc (ascendente) o desc (descendente). Esto solo es obligatorio en las propiedades que se usan en las clasificaciones de la consulta y debe coincidir con el sentido que use la consulta. El valor predeterminado es asc.
<ancestor> yes si la consulta tiene una cláusula principal. (Query.setAncestor). El valor predeterminado es no.

Índices automáticos y manuales

Determinar los índices que requieren las consultas de tu aplicación de manera manual puede ser una tarea tediosa y propensa a errores. Afortunadamente, el servidor de desarrollo puede determinar la configuración de índices por ti. Para usar la configuración automática de índices, agrega el atributo autoGenerate="true" al elemento <datastore-indexes> del archivo WEB-INF/datastore-indexes.xml. La configuración automática de índices también se usa si la app no tiene un archivo datastore-indexes.xml.

Con la configuración automática de índices habilitada, el servidor de desarrollo conserva un archivo llamado WEB-INF/appengine-generated/datastore-indexes-auto.xml en el directorio war/ de la app. Cuando la app, que se ejecuta en el servidor de desarrollo, intenta realizar una consulta de Datastore para la que no existe un índice correspondiente en datastore-indexes.xml o datastore-indexes-auto.xml, el servidor agrega la configuración adecuada a datastore-indexes-auto.xml.

Si se habilita la configuración automática de índices cuando subes la aplicación, el comando appcfg usa datastore-indexes.xml y datastore-indexes-auto.xml a fin de determinar qué índices deben compilarse para la app en producción.

Si autoGenerate="false" está en tu datastore-indexes.xml, el servidor de desarrollo y AppCfg ignoran el contenido de datastore-indexes-auto.xml. Si la app que se ejecuta de forma local realiza una consulta cuyo índice no se especifica en datastore-indexes.xml, el servidor de desarrollo arroja una excepción, al igual que lo haría el Datastore de producción.

Es conveniente mover de manera ocasional la configuración de índices de datastore-indexes-auto.xml a datastore-indexes.xml y, luego, inhabilitar la configuración automática de índices y probar la app en el servidor de desarrollo. Esto facilita el mantenimiento de los índices sin la necesidad de administrar dos archivos y te garantiza que la prueba reproducirá errores causados por la ausencia de la configuración de índices.

Implementa el archivo de configuración de índices

El archivo datastore-indexes.xml debe residir en el directorio /WEB-INF/ de la aplicación del servicio predeterminado.

Para implementar el archivo de configuración de índice del almacén de datos sin alterar la versión actual del servidor, usa el siguiente comando:

appcfg.sh update_indexes <application root path>

Borrar índices en desuso

Cuando cambias o quitas un índice de la configuración de índices, el índice original no se borra de App Engine de manera automática. Esto te permite conservar una versión anterior de la aplicación para que se ejecute mientras los índices nuevos se compilan, o volver inmediatamente a la versión anterior si se descubre un problema en la versión nueva.

Cuando sepas que ya no volverás a necesitar los índices anteriores, puedes borrarlos de App Engine de la manera siguiente:

./appengine-java-sdk/bin/appcfg.sh vacuum_indexes myapp/war