Utilizzo di Cloud Firestore in modalità Datastore

Firestore è un database di documenti NoSQL creato per offrire scalabilità automatica, prestazioni elevate e facilità dello sviluppo di applicazioni. Si tratta della versione più recente di Datastore e introduce diversi miglioramenti rispetto a Datastore.

Poiché Firestore in modalità Datastore è ottimizzato per casi d'uso del server e per App Engine, consigliamo di utilizzare Firestore in modalità Datastore per database che verranno utilizzati principalmente dalle app di App Engine. Firestore in modalità nativa è più utile per i casi d'uso delle notifiche su dispositivi mobili e in tempo reale. Per ulteriori informazioni sulle modalità Firestore, consulta la pagina relativa alla scelta tra la modalità nativa e la modalità Datastore.

Questo documento descrive come utilizzare la libreria client di Google Cloud per archiviare e recuperare i dati in un database in modalità Datastore.

Prerequisiti e configurazione

Segui le istruzioni in "Hello, World!" per Python su App Engine per configurare il tuo ambiente e il tuo progetto e per comprendere come sono strutturate le app Python in App Engine. Annota e salva l'ID progetto, perché ti servirà per eseguire l'applicazione di esempio descritta in questo documento.

Clonare 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 in requirements.txt. Questa è la libreria client per la modalità Datastore.

Flask==2.1.0
google-cloud-datastore==2.4.0
gunicorn==20.1.0

Codice dell'applicazione

L'applicazione di esempio registra, recupera e visualizza gli indirizzi IP dei visitatori. Come puoi vedere, una voce di log è una semplice classe a due campi che riceve il tipo visit e viene salvata in modalità Datastore utilizzando il comando put. Successivamente, 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'}

index.yaml file in uso

L'app di esempio esegue semplici query. Le query più elaborate in modalità Datastore richiedono uno o più indici, che devono essere specificati in un file index.yaml che si carica insieme all'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 in locale, puoi utilizzare l'emulatore di modalità Datastore.

Per ulteriori informazioni

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