Firestore im Datastore-Modus (Datastore) 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 (Datastore) für Serveranwendungsfälle und App Engine optimiert ist, empfehlen wir die Verwendung von Datastore 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 den Cloud-Clientbibliotheken Daten in einer Datenbank im Datastore-Modus speichern und abrufen können. Sie können die Beispielanwendung in dieser Anleitung für jede unterstützte Python-Version verwenden. Geben Sie dazu die Laufzeitversion und das Betriebssystem in der Datei app.yaml an.

Voraussetzungen und Einrichtung

  • Richten Sie Ihre Umgebung und Ihr Projekt ein, um zu verstehen, wie Anwendungen in App Engine strukturiert sind. 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 die Datei requirements.txt ein. Dies ist die Clientbibliothek für den Datastore-Modus.

Flask==3.0.3
google-cloud-datastore==2.20.1
gunicorn==23.0.0

Anwendungscode

Mit der Beispielanwendung werden Besucher-IPs geloggt, abgerufen und angezeigt. Ein Logeintrag ist eine 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 Abfragen durchgeführt. Für komplexere Abfragen im Datastore-Modus sind ein oder mehrere Indexe, erforderlich, die Sie in einer index.yaml-Datei angeben, die Sie zusammen mit Ihrer App hochladen. Diese Datei kann manuell oder bei einem lokalen Test der Anwendung automatisch generiert werden.

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.