Configurer des index Datastore

App Engine emploie des index dans Datastore pour chaque requête envoyée par votre application. Ces index sont mis à jour chaque fois qu'une entité est modifiée, de sorte que les résultats soient renvoyés rapidement lorsque l'application génère une requête. Pour ce faire, Datastore doit connaître à l'avance les requêtes générées par l'application. Vous consignez dans un fichier de configuration les index dont l'application a besoin. Le serveur de développement local peut générer automatiquement le fichier de configuration d'index lorsque vous testez l'application.

Ce guide fournit des instructions relatives à la création et à la gestion des index. Pour en savoir plus, consultez la page Index Datastore.

Créer des index Datastore

Chaque requête Datastore effectuée par une application nécessite un index correspondant. Les index liés à des requêtes simples, telles que celles portant sur une seule propriété, sont créés automatiquement. Les index liés à des requêtes complexes doivent être définis dans un fichier de configuration nommé index.yaml. Ce fichier est déployé en même temps que l'application pour vous permettre de créer des index dans Datastore.

Voici un exemple de fichier 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

Créer des index à l'aide du serveur de développement

Le serveur Web de développement (dev_appserver.py) ajoute automatiquement des éléments à ce fichier lorsque l'application tente d'exécuter une requête nécessitant un index qui ne possède pas d'entrée appropriée dans le fichier de configuration.

Lorsque vous exécutez sur le serveur de développement toutes les requêtes que votre application va effectuer, celui-ci génère une liste complète d'entrées dans le fichier index.yaml.

Lorsque le serveur Web de développement ajoute une définition d'index générée au fichier index.yaml, il effectue cette opération sous la ligne suivante, en l'insérant si nécessaire :

# AUTOGENERATED

Le serveur Web de développement considère toutes les définitions d'index figurant sous cette ligne comme étant automatiques. Il peut mettre à jour les définitions existantes sous cette ligne lorsque l'application exécute des requêtes.

Créer des index manuellement

Vous pouvez ajouter manuellement des index au fichier index.yaml ou modifier des entrées existantes. Dans le cas de requêtes contrôlées manuellement, vous devez les ajouter au-dessus de la ligne contenant le commentaire AUTOGENERATED.

Toutes les définitions d'index situées au-dessus de cette ligne sont considérées comme étant contrôlées manuellement, et ne sont pas mises à jour par le serveur Web de développement. Le serveur de développement n'apportera des modifications qu'aux éléments situés sous la ligne et seulement si le fichier index.yaml complet ne décrit pas un index qui rend compte d'une requête exécutée par l'application. Pour contrôler une définition d'index automatique, placez-la au-dessus de cette ligne.

Consultez la documentation de référence de index.yaml pour obtenir des informations sur la syntaxe.

Mettre à jour des index

Importez votre fichier de configuration index.yaml sur Datastore à l'aide de la commande gcloud. Si le fichier index.yaml définit des index qui n'existent pas dans Datastore, ceux-ci sont créés.

Datastore peut mettre un certain temps à créer tous les index et, par conséquent, ces index ne seront pas immédiatement disponibles pour App Engine. Si l'application est déjà configurée pour recevoir du trafic, des exceptions peuvent se produire pour les requêtes nécessitant un index dont la création est toujours en cours.

Pour éviter les exceptions, vous devez prévoir du temps pour la création de tous les index. Pour en savoir plus et pour consulter des exemples de création d'index, consultez la page Déployer une application Python.

Pour importer votre configuration d'index dans Datastore, exécutez la commande suivante à partir du répertoire où se trouve votre fichier index.yaml :

gcloud datastore indexes create index.yaml

Pour en savoir plus, reportez-vous à la documentation de référence de gcloud datastore.

Vous pouvez utiliser Cloud Console pour vérifier l'état de vos index.

Supprimer des index inutilisés

Lorsque vous modifiez ou supprimez un index dans index.yaml, l'index d'origine n'est pas automatiquement supprimé de Datastore. Cela vous donne la possibilité d'utiliser une ancienne version de l'application pendant la création des index ou de revenir immédiatement à l'ancienne version si un problème est détecté dans une version plus récente.

Lorsque vous êtes certain de ne plus avoir besoin des anciens index restants dans Datastore, vous pouvez supprimer tout index non défini dans votre fichier index.yaml à l'aide de la commande suivante :

gcloud datastore indexes cleanup index.yaml

Pour en savoir plus, reportez-vous à la documentation de référence de gcloud datastore.