Utilizzare Firestore in modalità Datastore (Datastore)

Firestore è un database di documenti NoSQL creato per offrire scalabilità automatica, prestazioni elevate e facilità di sviluppo delle applicazioni. È la versione più recente di Datastore e introduce diversi miglioramenti rispetto a Datastore. Poiché Firestore in modalità Datastore (Datastore) è ottimizzato per i casi d'uso del server e per App Engine, ti consigliamo di utilizzare Datastore per i database che verranno utilizzati principalmente dalle app App Engine. Firestore in modalità Native è più utile per i casi d'uso di notifiche mobili e in tempo reale. Per ulteriori informazioni sulle modalità di Firestore, consulta la sezione Scegliere tra la modalità Native e la modalità Datastore.

Questo documento descrive come utilizzare le librerie client Cloud per archiviare e recuperare dati in un database in modalità Datastore.

Prerequisiti e configurazione

  • Configura il tuo ambiente e il tuo progetto per capire come sono strutturate le app in App Engine. Annota e salva l'ID progetto, perché ti servirà per eseguire l'applicazione di esempio descritta in questo documento.

Clona il repository

Scarica (clona) il campione:

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

Modifica la configurazione del progetto e imposta le dipendenze

Includi la libreria google-cloud-datastore nel file requirements.txt. Questa è la libreria client per la modalità Datastore.

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

Codice dell'applicazione

L'applicazione di esempio registra, recupera e mostra gli IP dei visitatori. Puoi notare che una voce di log è una classe a due campi a cui viene assegnato il tipo visit e viene salvata in modalità Datastore utilizzando il comando put. Vengono quindi recuperate le dieci visite più recenti in ordine decrescente utilizzando il comando 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.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"}

Utilizzo di file index.yaml

L'app di esempio esegue query. Le query in modalità Datastore più elaborate richiedono uno o più indici, che devi specificare in un index.yamlfile che carichi insieme alla tua app. Questo file può essere creato manualmente o generato automaticamente durante il test dell'app in locale.

Test locale

Se devi sviluppare e testare la tua applicazione localmente, puoi utilizzare l'emulatore della modalità Datastore.

Per ulteriori informazioni

Per informazioni complete sulla modalità Datastore, inclusi ottimizzazioni e concetti, consulta la documentazione di Firestore in modalità Datastore.