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 dei server e per App Engine, 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 mobile e in tempo reale. Per ulteriori informazioni sulle modalità Firestore, consulta Scegliere tra la modalità Native e la modalità Datastore.

Questo documento descrive come utilizzare le librerie client di Cloud per archiviare e recuperare i dati in un database in modalità Datastore. Puoi utilizzare l'applicazione di esempio in questa guida per qualsiasi versione supportata di Python specificando la versione del runtime e il sistema operativo nel file app.yaml.

Prerequisiti e configurazione

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

Clona il repository

Scarica (clona) il sample:

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

Modificare la configurazione del progetto e impostare 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.1
gunicorn==23.0.0

Codice dell'applicazione

L'applicazione di esempio registra, recupera e mostra gli IP dei visitatori. Puoi vedere 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. Poi, le dieci visite più recenti vengono recuperate 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 più elaborate della modalità Datastore richiedono uno o più indici, che devi specificare in un file index.yaml che carichi insieme all'app. Questo file può essere creato manualmente o generato automaticamente durante il test dell'app a livello 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, incluse ottimizzazioni e concetti, consulta la documentazione di Firestore in modalità Datastore.