Upgrade automatico a Firestore

Questa pagina descrive il percorso di upgrade da Cloud Datastore legacy a Firestore in modalità Datastore.

Firestore può funzionare in modalità Datastore, pertanto è compatibile con le versioni precedenti di Cloud Datastore. Con Firestore in modalità Datastore, puoi accedere al livello di archiviazione migliorato di Firestore mantenendo il comportamento del sistema Datastore. Firestore in modalità Datastore rimuove le seguenti limitazioni di Cloud Datastore legacy:

  • Le query non sono più coerenti alla fine. ma sono a elevata coerenza, a meno che non ne richiedi esplicitamente l'eventuale coerenza.
  • Le query nelle transazioni non sono più necessarie come query dei predecessori.1
  • Le transazioni non sono più limitate a 25 gruppi di entità1.
  • Le scritture in un gruppo di entità non sono più limitate a 1 al secondo.1

Per ulteriori informazioni sulla modalità Datastore, consulta Firestore in modalità Datastore.

A partire da giugno 2021, sono iniziate le migrazioni da Cloud Datastore legacy a Firestore in modalità Datastore. Le migrazioni iniziano da database a traffico molto ridotto per estendersi a database a traffico più elevato nei prossimi mesi.

1 I database che eseguono la migrazione alla modalità di contemporaneità dei gruppi di entità ottimali con i gruppi di entità sono ancora soggetti al limite di transazioni di 25 gruppi di entità e al limite di 1 scrittura al secondo in Firestore in modalità Datastore. Le query nelle transazioni devono essere query dei predecessori. Per ulteriori informazioni, consulta la sezione Ottimista con modalità di contemporaneità dei gruppi di entità.

Upgrade automatico a Firestore in modalità Datastore

Se gestisci un'applicazione che utilizza la versione legacy di Cloud Datastore, non dovrai aggiornare il codice dell'applicazione. Ti invieremo una notifica relativa alla pianificazione dell'upgrade della tua applicazione a Firestore in modalità Datastore. L'upgrade non richiede tempi di inattività.

Per ulteriori domande sulla procedura di upgrade automatico, contatta uno dei nostri canali di assistenza.

Visualizza il tipo di database

Puoi utilizzare il comando gcloud alpha firestore databases describe per visualizzare il tuo tipo di database. Cerca la presenza del campo type nell'output:

  • type: DATASTORE_MODE

    Il tipo di database è Firestore in modalità Datastore. Non è necessario un upgrade o l'upgrade è già stato completato.

  • type non presente nell'output

    Il tipo di database è Cloud Datastore precedente. Verrà eseguito l'upgrade del database a Firestore in modalità Datastore.

  • type: FIRESTORE_NATIVE

    Il tipo di database è Firestore in modalità Native.

Fasi di upgrade

A livello generale, seguiamo questa procedura per eseguire l'upgrade del tuo database Cloud Datastore legacy a Firestore in modalità Datastore. Questa procedura non richiede tempi di inattività delle applicazioni:

  1. Aggiungi una nuova replica dei dati Firestore in modalità Datastore al tuo database Cloud Datastore legacy esistente. Operazioni di scrittura entità duplicate in modo asincrono in Firestore in modalità Datastore.

  2. Copia le voci di indice e dati esistenti da Cloud Datastore legacy a Firestore in modalità Datastore. Dopo la copia, verifica i dati.

  3. L'entità di reindirizzamento legge direttamente a Firestore in modalità Datastore. Prima reindirizza le letture coerenti, quindi reindirizzi le letture altamente coerenti.

  4. Reindirizza le scritture di entità e le letture transazionali direttamente a Firestore in modalità Datastore.

Questa procedura prevede le seguenti fasi.

1. Applica scritture in modo sincrono

Durante questa fase, le scritture vengono applicate in modo sincrono a Cloud Datastore precedente e non riporteranno il successo finché tutte le modifiche a entità e indici non saranno state applicate ad almeno una replica. Questo simula il comportamento di Firestore in modalità Datastore, che applica anche le scritture in modo sincrono (e differisce dal comportamento predefinito della versione precedente di Cloud Datastore, in cui le scritture vengono applicate in modo asincrono dopo il commit).

Questa fase ha lo scopo di evidenziare l'eventuale impatto sulla latenza delle applicazioni sincrone in Firestore in modalità Datastore prima dell'upgrade. L'applicazione sincrona delle scritture continua durante e dopo la migrazione.

I database con pochissima attività salteranno questa fase. Per determinare se questa fase è stata inclusa nell'upgrade del database, controlla i [log] per la fase APPLY_WRITES_SYNCHRONOUSLY.

2. Copia e verifica

Questa fase rappresenta l'inizio della migrazione. Introduce una replica di Firestore in modalità Datastore ed esegue i seguenti passaggi:

  1. Diario

    Anche le operazioni di scrittura delle entità in Cloud Datastore legacy iniziano a essere eseguite attraverso un canale laterale verso la replica di Firestore in modalità Datastore. Ciò avviene nell'ambito del sistema di replica esistente di Cloud Datastore. Queste operazioni di scrittura non influiscono sulla latenza di scrittura. La replica Firestore in modalità Datastore esegue il buffer di queste operazioni di scrittura per applicarle dopo il passaggio della copia.

  2. Copia

    Nella replica di Firestore in modalità Datastore, crea una copia offline dei dati e delle voci di indice esistenti. Il passaggio della copia non influisce sulle operazioni legacy di Cloud Datastore. Questo passaggio potrebbe durare diversi giorni.

  3. Diario di drenaggio

    Applica le scritture del passaggio del journal ai dati della copia offline.

  4. Verifica dati

    Verifica di nuovo i dati in Firestore in modalità Datastore confrontando i dati con i dati nella versione legacy di Cloud Datastore.

3. Reindirizza le letture coerenti alla fine

Pubblica letture coerenti alla fine (query senza filtro dei predecessori) da Firestore in modalità Datastore. La semantica legacy di Cloud Datastore per le letture si applica a questo punto:

  • Le query predecessore sono a elevata coerenza.
  • Le query non sui predecessori sono coerenti alla fine.
  • Le ricerche sono a elevata coerenza (tranne quelle configurate in modo esplicito per la coerenza finale).

Firestore in modalità Datastore continua a fungere da replica dei dati Cloud Datastore legacy.

4. Reindirizza le letture a elevata coerenza

Gestisci letture a elevata coerenza (non transazionali) da Firestore in modalità Datastore. Tieni presente che la semantica precedente di Cloud Datastore per le letture continua a essere applicata. Anche se ora le letture provengono direttamente da Firestore, Firestore si basa ancora sulla versione legacy di Cloud Datastore per garantire che sia aggiornato per letture a elevata coerenza.

5. Operazioni di scrittura reindirizzamento

Reindirizza le scritture di entità e le letture transazionali a Firestore in modalità Datastore. Le modifiche simultanee alla stessa entità continuano a causare l'interruzione delle transazioni. Le modifiche simultanee a entità diverse all'interno dello stesso gruppo di entità non comportano più l'interruzione delle transazioni.

All'inizio di questa fase, Firestore in modalità Datastore si basa ancora sulla versione legacy di Cloud Datastore per garantire che sia aggiornato prima di ogni scrittura. Dopo un passaggio finale che garantisce l'applicazione di tutte le scritture precedenti, Firestore in modalità Datastore smette di consultare la versione legacy di Cloud Datastore.

6. Migrazione completa

Ora si applica la semantica di Firestore in modalità Datastore per le letture: tutte le query sono a elevata coerenza.

I prezzi rimangono invariati, ma nella fatturazione ora sono elencati gli SKU Firestore. La pagina Quote di App Engine inizia a mostrare l'utilizzo di Firestore anziché l'utilizzo legacy di Cloud Datastore.

Transazioni

Firestore in modalità Datastore supporta tre modalità di contemporaneità:

  • Ottimista

    La maggior parte dei database Cloud Datastore legacy utilizzerà la contemporaneità ottimistica per le transazioni in Firestore in modalità Datastore. La contemporaneità ottimistica conserva i comportamenti esistenti delle transazioni nella versione legacy di Cloud Datastore.

  • Ottimista con i gruppi di entità

    I database che dipendono dalla semantica transazionale del gruppo di entità verranno migrati a questa modalità di contemporaneità. Per ulteriori informazioni, consulta la sezione "Modalità di contemporaneità ottimale con gruppi di entità".

  • Pessimista

    È stata eseguita la migrazione di alcuni database di cui è stata eseguita la migrazione in precedenza con pochissima attività con blocchi pessimistici per le transazioni in Firestore in modalità Datastore.

La modalità di contemporaneità è accessibile tramite la risorsa REST Firestore projects.databases:

curl -X GET -H "Authorization: Bearer "$(gcloud auth print-access-token) \
"https://firestore.googleapis.com/v1/projects/PROJECT_ID/databases"

La modalità di contemporaneità è reperibile anche ispezionando i log per la fase PREPARE.

Ottimista con la modalità di contemporaneità dei gruppi di entità

Per rimuovere le limitazioni di velocità effettiva di query, transazioni e scrittura di "Ottimista con gruppi di entità", modifica la modalità di contemporaneità del progetto in Ottimista. Per assicurarti che questa modifica sia compatibile con il tuo progetto:

  1. Crea un progetto di test in Firestore in modalità Datastore.

  2. Cambia la modalità di contemporaneità del progetto di test su OPTIMISTIC. Emetti una richiesta HTTP PATCH, come mostrato di seguito.

  3. Esegui test sul progetto di test per assicurarti che il carico di lavoro funzioni come previsto senza gruppi di entità.

  4. Cambia la modalità di contemporaneità del progetto principale da OPTIMISTIC_WITH_ENTITY_GROUPS a OPTIMISTIC.

Richiesta HTTP PATCH per modificare la modalità di contemporaneità del database:

curl --request PATCH \
--header "Authorization: Bearer "$(gcloud auth print-access-token) \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"concurrencyMode":"OPTIMISTIC"}' \
"https://firestore.googleapis.com/v1/projects/PROJECT_ID/databases/(default)?updateMask=concurrencyMode"

Notifiche di logging e avanzamento

Il processo di upgrade utilizza Cloud Logging per pubblicare gli aggiornamenti di avanzamento. Per visualizzare i log, utilizza Esplora log, l'API Cloud Logging o Google Cloud CLI.

Gli aggiornamenti vengono pubblicati in due log con il nome del servizio di logging datastore.googleapis.com:

Nome log Risorsa monitorata Payload
migration_state datastore_database type.googleapis.com/google.datastore.admin.v1.MigrazioneStateEvent
migration_progress datastore_database type.googleapis.com/google.datastore.admin.v1.migrationProgressEvent

Il log migration_state viene aggiornato quando lo stato generale dell'upgrade cambia (RUNNING e COMPLETE).

Il log migration_progress viene aggiornato ogni volta che l'upgrade passa a una nuova fase (PREPARE, START, APPLY_WRITES_SYNCHRONOUSLY, COPY_AND_VERIFY, REDIRECT_EVENTUALLY_CONSISTENT_READS, REDIRECT_STRONGLY_CONSISTENT_READS e REDIRECT_WRITES).

Per ricevere notifiche man mano che l'upgrade procede, puoi creare metriche basate su log basate sui due log e creare avvisi basati su queste metriche.

Banner della migrazione nella console Google Cloud

Mentre il database Cloud Datastore precedente è in fase di migrazione, nella pagina Datastore Studio della console Google Cloud verrà visualizzato un banner informativo. Questo banner include un link per aprire Cloud Logging e filtrare per gli aggiornamenti della migrazione.

  1. Nella console Google Cloud, vai alla pagina Database.

    Vai a Database

  2. Seleziona il database richiesto dall'elenco dei database.

  3. Nel menu di navigazione, fai clic su Datastore Studio.

Visualizzazione dello stato attuale su un'interfaccia a riga di comando

Per visualizzare rapidamente lo stato attuale di una migrazione, utilizza il seguente comando gcloud:

gcloud datastore operations describe datastore-firestore-migration

Sospensione della migrazione

Le migrazioni di database di grandi dimensioni possono essere messe in pausa e riprese. La messa in pausa di una migrazione ne impedisce il passaggio alla fase successiva fino a quando non viene ripristinata. La sospensione di una migrazione può aiutarti a determinare se un cambiamento osservato nel comportamento o nelle prestazioni è il risultato del processo di migrazione o di un fattore non correlato.

Dopo aver ricevuto la notifica via email sulla migrazione del database, puoi verificare se il database può essere messo in pausa e ripreso eseguendo il comando di pausa riportato di seguito. Se la migrazione non è idonea, verrà restituito un errore che indica che la funzionalità non è disponibile.

Se la migrazione del tuo database è idonea per essere messa in pausa e ripresa, i comandi riportati di seguito inizieranno a funzionare una volta che la migrazione raggiunge la fase START.

Per mettere in pausa una migrazione:

curl --request POST \
--header "Authorization: Bearer "$(gcloud auth print-access-token) \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{}' \
"https://datastore.googleapis.com/v1/projects/PROJECT_ID:pauseMigration"

Per riprendere una migrazione:

curl --request POST \
--header "Authorization: Bearer "$(gcloud auth print-access-token) \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{}' \
"https://datastore.googleapis.com/v1/projects/PROJECT_ID:resumeMigration"

Questi comandi non funzionano al termine della migrazione.

Se devi tenere in pausa la migrazione per più di una settimana, contatta un canale di assistenza. Dopo due settimane, la migrazione potrebbe essere ripresa automaticamente.

Metriche di Cloud Monitoring

Le metriche di Cloud Monitoring disponibili per il tuo database Datastore rimangono invariate durante il processo di upgrade, consulta le metriche di Datastore disponibili.