Utiliser Cloud Firestore en mode Datastore

Conçue pour le scaling automatique et les hautes performances, Firestore est une base de données de documents NoSQL qui simplifie le développement d'applications. Il s'agit de la dernière version de Datastore, qui introduit plusieurs améliorations.

Nous vous recommandons d'utiliser Firestore en mode Datastore pour les bases de données qui sont principalement utilisées par les applications App Engine. Pour en savoir plus sur les modes de Firestore, consultez la page Choisir entre le mode natif et le mode Datastore.

Ce document décrit comment utiliser la bibliothèque cliente Google Cloud pour stocker et récupérer des données dans une base de données en mode Datastore.

Prérequis et configuration

Suivez les instructions de la section "Hello, World!" pour Python sur App Engine pour configurer votre environnement et votre projet, et comprendre la structure des applications Python dans App Engine. Notez et enregistrez l'ID de votre projet. Vous en aurez besoin pour exécuter l'exemple d'application décrit dans ce document.

Cloner le dépôt

Téléchargez (clonez) l'exemple suivant :

git clone https://github.com/GoogleCloudPlatform/python-docs-samples
cd python-docs-samples/appengine/flexible/datastore

Modifier la configuration du projet et définir les dépendances

Incluez la bibliothèque google-cloud-datastore dans requirements.txt. Il s'agit de la bibliothèque cliente pour le mode Datastore.

Flask==1.1.2
google-cloud-datastore==1.15.3
gunicorn==20.0.4

Code d'application

L'exemple d'application enregistre, récupère et affiche les adresses IP des visiteurs. Une entrée de journal est une classe simple à deux champs à laquelle est attribué le type visit et qui est enregistrée en mode Datastore à l'aide de la commande put. Ensuite, les dix visites les plus récentes sont extraites par ordre décroissant à l'aide de la commande query().

@app.route('/')
def index():
    ds = datastore.Client()

    user_ip = request.remote_addr

    # Keep only the first two octets of the IP address.
    if is_ipv6(user_ip):
        user_ip = ':'.join(user_ip.split(':')[:2])
    else:
        user_ip = '.'.join(user_ip.split('.')[:2])

    entity = datastore.Entity(key=ds.key('visit'))
    entity.update({
        'user_ip': user_ip,
        'timestamp': datetime.datetime.utcnow()
    })

    ds.put(entity)
    query = ds.query(kind='visit', order=('-timestamp',))

    results = []
    for x in query.fetch(limit=10):
        try:
            results.append('Time: {timestamp} Addr: {user_ip}'.format(**x))
        except KeyError:
            print("Error with result format, skipping entry.")

    output = 'Last 10 visits:\n{}'.format('\n'.join(results))

    return output, 200, {'Content-Type': 'text/plain; charset=utf-8'}

Utiliser des fichiers index.yaml

L'exemple d'application effectue des requêtes simples. Les requêtes Datastore plus élaborées nécessitent un ou plusieurs index, que vous devez spécifier dans un fichier index.yaml à importer avec l'application. Ce fichier peut être créé manuellement ou généré automatiquement lors du test en local de votre application.

Tester en local

Si vous devez développer et tester votre application en local, vous pouvez utiliser l'émulateur en mode Datastore.

Pour en savoir plus

Pour obtenir des informations complètes sur le mode Datastore, y compris sur les optimisations et les concepts, consultez la documentation sur Cloud Firestore en mode Datastore.