Cloud Firestore im Datastore-Modus verwenden

Firestore ist eine NoSQL-Dokumentdatenbank, die auf Autoscaling, hohe Leistung und einfache Anwendungsentwicklung ausgelegt ist. Es ist die neueste Version von Datastore und bietet einige Verbesserungen.

Da Firestore im Datastore-Modus für Serveranwendungsfälle und für App Engine optimiert ist, empfehlen wir die Verwendung von Firestore im Datastore-Modus für Datenbanken, die hauptsächlich von App Engine-Anwendungen verwendet werden. Firestore im nativen Modus ist besonders nützlich für mobile und Echtzeit-Benachrichtigungs-Anwendungsfälle. Weitere Informationen zu Firestore-Modi finden Sie unter Zwischen nativem Modus und Datastore-Modus wechseln.

In diesem Dokument wird beschrieben, wie Sie mit der Google Cloud-Clientbibliothek Daten in einer Datenbank im Datastore-Modus speichern und abrufen können.

Voraussetzungen und Einrichtung

Folgen Sie der Anleitung unter "Hello, World!" für Python in App Engine, um Ihre Umgebung und Ihr Projekt einzurichten und mehr über die Strukturierung von Python-Anwendungen in App Engine zu erfahren. Notieren Sie sich Ihre Projekt-ID und bewahren Sie sie auf. Sie brauchen diese ID, um die in diesem Dokument beschriebene Beispielanwendung auszuführen.

Repository klonen

Laden Sie das Beispiel herunter bzw. klonen Sie es:

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

Projektkonfiguration bearbeiten und Abhängigkeiten festlegen

Fügen Sie die google-cloud-datastore-Bibliothek in requirements.txt ein. Dies ist die Clientbibliothek für den Datastore-Modus.

Flask==2.1.0; python_version > '3.6'
Flask==2.0.3; python_version < '3.7'
google-cloud-datastore==2.7.1
gunicorn==20.1.0

Anwendungscode

Mit der Beispielanwendung werden Besucher-IPs geloggt, abgerufen und angezeigt. Ein Logeintrag ist eine einfache Zweifeldklasse, die den Typ visit erhält und mit dem Befehl put im Datastore-Modus gespeichert wird. Die zehn zuletzt erfolgten Besuche werden mit dem Befehl query() in absteigender Reihenfolge abgerufen:

@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.now(tz=datetime.timezone.utc)
    })

    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'}

index.yaml-Dateien verwenden

Mit der Beispielanwendung werden einfache Abfragen durchgeführt. Für komplexere Abfragen im Datastore-Modus sind ein oder mehrere Indexe erforderlich. Diese müssen Sie in der Datei index.yaml festlegen, die Sie zusammen mit der Anwendung hochladen. Diese Datei kann manuell erstellt oder automatisch generiert werden, wenn Sie Ihre Anwendung lokal testen.

Lokales Testen

Wenn Sie Ihre Anwendung lokal entwickeln und testen müssen, können Sie den Cloud Datastore-Emulator verwenden.

Weitere Informationen

Umfassende Informationen zum Datastore-Modus, einschließlich Optimierungen und Konzepte, finden Sie in der Dokumentation zu Firestore im Datastore-Modus.