Una transazione è un insieme di operazioni su una o più entità. Ogni transazione sono garantiti come atomici, il che significa che le transazioni non sono mai applicati. Vengono applicate tutte le operazioni della transazione o nessuna delle vengono applicate.
Utilizzo delle transazioni
Le transazioni scadono dopo 270 secondi o se sono inattive per 60 secondi.
Un'operazione potrebbe non riuscire quando:
- Sono state tentate troppe modifiche simultanee sulla stessa entità.
- La transazione supera un limite di risorse.
- Il database in modalità Datastore rileva un errore interno.
In tutti questi casi, l'API Datastore restituisce un errore.
Le transazioni sono una funzionalità facoltativa. Non è necessario utilizzare le transazioni per eseguire operazioni di database.
Un'applicazione può eseguire un insieme di istruzioni e operazioni in una transazione, in modo tale che se una qualsiasi istruzione o operazione genera un'eccezione, nessuna delle operazioni di database nel set. L'applicazione definisce azioni da eseguire nella transazione.
Il seguente snippet mostra come eseguire una transazione. Trasferisce denaro da un account all'altro.
C#
Per informazioni su come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per ulteriori informazioni, consulta API Cloud Datastore C# documentazione di riferimento.
Per eseguire l'autenticazione su Cloud Datastore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Go
Per informazioni su come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per ulteriori informazioni, consulta API Cloud Datastore Go documentazione di riferimento.
Per eseguire l'autenticazione su Cloud Datastore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Java
Per informazioni su come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per ulteriori informazioni, consulta API Cloud Datastore Java documentazione di riferimento.
Per eseguire l'autenticazione su Cloud Datastore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Node.js
Per informazioni su come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per ulteriori informazioni, consulta API Cloud Datastore Node.js documentazione di riferimento.
Per eseguire l'autenticazione su Cloud Datastore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
PHP
Per informazioni su come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per ulteriori informazioni, consulta API Cloud Datastore PHP documentazione di riferimento.
Per eseguire l'autenticazione su Cloud Datastore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Python
Per informazioni su come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per ulteriori informazioni, consulta API Cloud Datastore Python documentazione di riferimento.
Per eseguire l'autenticazione su Cloud Datastore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Ruby
Per informazioni su come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per ulteriori informazioni, consulta API Cloud Datastore Ruby documentazione di riferimento.
Per eseguire l'autenticazione su Cloud Datastore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Tieni presente che, per mantenere i nostri esempi più concisi, a volte omettiamo rollback
se la transazione non va a buon fine. Nel codice di produzione, è importante garantire che per ogni transazione venga eseguito esplicitamente il commit o il rollback.
Operazioni consentite in una transazione
Le transazioni possono eseguire query o cercare un numero qualsiasi di entità. La dimensione massima di un transazione è 10 MiB. Puoi utilizzare una transazione di lettura/scrittura o un transazione di sola lettura.
Isolamento e coerenza
Applicazione forzata dei database in modalità Datastore l'isolamento serializzabile. Dati letti o modificati da una transazione non possono essere modificati contemporaneamente.
Le query e le ricerche in una transazione visualizzano un'istantanea coerente dello stato del database. È garantito che questo snapshot contenga l'effetto di tutti transazioni e scritture completate prima dell'inizio della transazione.
Questa visualizzazione istantanea coerente si estende anche alle letture dopo le scritture all'interno transazioni. A differenza della maggior parte dei database, le query e le ricerche all'interno di un Le transazioni in modalità Datastore non vedono i risultati delle scritture precedenti all'interno della transazione. Nello specifico, se un'entità viene modificata o eliminata in una transazione, una query o una ricerca restituisce la versione originale dell'entità all'inizio della transazione o nulla in caso contrario esistono in quel momento.
Oltre alle transazioni, anche le query e le ricerche prevedono l'isolamento serializzabile.
Modalità di contemporaneità
Firestore in modalità Datastore supporta tre modalità di contemporaneità. La modalità di contemporaneità è che determina l'interazione delle transazioni simultanee. Puoi scegli una delle seguenti modalità di contemporaneità:
Pessimismo
Le transazioni di lettura/scrittura utilizzano blocchi del lettore/scrittura per applicare l'isolamento e serializzabilità. Quando due o più transazioni di lettura/scrittura simultanee leggono o gli stessi dati, il blocco di una transazione può ritardare l'altra transazioni. Se la transazione non richiede operazioni di scrittura, puoi migliorare il rendimento ed evitare conflitti con altre transazioni utilizzando transazione di sola lettura. Le transazioni di sola lettura non non richiedono alcun blocco.
I database di Firestore in modalità Datastore utilizzano la modalità di contemporaneità pessimistica per impostazione predefinita.
Ottimista
Quando due o più transazioni di lettura/scrittura simultanee leggono o scrivono gli stessi dati, solo la prima transazione a cui eseguire il commit delle modifiche . Le altre transazioni che eseguono scritture non vanno a buon fine al momento del commit.
Ottimista con i gruppi di entità
Utilizza questa modalità di contemporaneità solo se La tua app dipende dalla semantica transazionale del gruppo di entità della versione precedente di Cloud Datastore. Questa modalità di contemporaneità pone limiti aggiuntivi transazioni:
- Le transazioni sono limitate a 25 gruppi di entità.
- Le scritture a un gruppo di entità sono limitate a 1 al secondo.
- Le query nelle transazioni devono essere query predecessore.
Visualizza modalità di contemporaneità
Utilizza Firestore projects.databases Risorsa REST per visualizzare la modalità di contemporaneità del database:
curl -X GET -H "Authorization: Bearer "$(gcloud auth print-access-token) \
"https://firestore.googleapis.com/v1/projects/PROJECT_ID/databases"
Modifica la modalità di contemporaneità
Per modificare la modalità di contemporaneità del database, invia una richiesta PATCH
a Firestore
projects.databases
Risorsa REST:
curl --request PATCH \
--header "Authorization: Bearer "$(gcloud auth print-access-token) \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"concurrencyMode":"CONCURRENCY_MODE"}' \
"https://firestore.googleapis.com/v1/projects/PROJECT_ID/databases/(default)?updateMask=concurrencyMode"
dove:
- CONCURRENCY_MODE è
PESSIMISTIC
,OPTIMISTIC
oOPTIMISTIC_WITH_ENTITY_GROUPS
. - PROJECT_ID è l'ID del tuo progetto Google Cloud.
Utilizzi delle transazioni
Un utilizzo delle transazioni è l'aggiornamento di un'entità con un nuovo valore relativo alla proprietà
al valore attuale. L'esempio precedente transferFunds
lo fa per due
persone giuridiche, prelevando denaro da un account e trasferendolo a un altro.
L'API Datastore non ritenta automaticamente le transazioni,
puoi aggiungere la tua logica per riprovare, ad esempio per gestire i conflitti quando
un'altra richiesta aggiorna contemporaneamente la stessa entità.
C#
Per informazioni su come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per ulteriori informazioni, consulta API Cloud Datastore C# documentazione di riferimento.
Per eseguire l'autenticazione su Cloud Datastore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Go
Per informazioni su come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per ulteriori informazioni, consulta API Cloud Datastore Go documentazione di riferimento.
Per eseguire l'autenticazione su Cloud Datastore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Java
Per informazioni su come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per ulteriori informazioni, consulta API Cloud Datastore Java documentazione di riferimento.
Per eseguire l'autenticazione su Cloud Datastore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Node.js
Per informazioni su come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per ulteriori informazioni, consulta API Cloud Datastore Node.js documentazione di riferimento.
Per eseguire l'autenticazione su Cloud Datastore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
PHP
Per informazioni su come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per ulteriori informazioni, consulta API Cloud Datastore PHP documentazione di riferimento.
Per eseguire l'autenticazione su Cloud Datastore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Python
Per informazioni su come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per ulteriori informazioni, consulta API Cloud Datastore Python documentazione di riferimento.
Per eseguire l'autenticazione su Cloud Datastore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Ruby
Per informazioni su come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per ulteriori informazioni, consulta API Cloud Datastore Ruby documentazione di riferimento.
Per eseguire l'autenticazione su Cloud Datastore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Questa operazione richiede una transazione perché il valore di balance
in un'entità potrebbe essere aggiornato da un altro utente dopo che questo codice ha recuperato l'oggetto, ma prima di salvare l'oggetto modificato. Senza una transazione, la richiesta dell'utente utilizza il valore di balance
prima dell'aggiornamento dell'altro utente e il salvataggio sovrascrive il nuovo valore. Con un
transazione, all'applicazione viene comunicato l'aggiornamento dell'altro utente.
Un altro uso comune delle transazioni è recuperare un'entità con una chiave denominata o crearla se non esiste ancora (questo esempio si basa sull'esempio di TaskList per la creazione di un'entità):
C#
Per informazioni su come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per ulteriori informazioni, consulta API Cloud Datastore C# documentazione di riferimento.
Per eseguire l'autenticazione su Cloud Datastore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Go
Per informazioni su come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per ulteriori informazioni, consulta API Cloud Datastore Go documentazione di riferimento.
Per eseguire l'autenticazione su Cloud Datastore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Java
Per informazioni su come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per ulteriori informazioni, consulta API Cloud Datastore Java documentazione di riferimento.
Per eseguire l'autenticazione su Cloud Datastore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Node.js
Per informazioni su come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per ulteriori informazioni, consulta API Cloud Datastore Node.js documentazione di riferimento.
Per eseguire l'autenticazione su Cloud Datastore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
PHP
Per informazioni su come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per ulteriori informazioni, consulta API Cloud Datastore PHP documentazione di riferimento.
Per eseguire l'autenticazione su Cloud Datastore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Python
Per informazioni su come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per ulteriori informazioni, consulta API Cloud Datastore Python documentazione di riferimento.
Per eseguire l'autenticazione su Cloud Datastore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Ruby
Per informazioni su come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per ulteriori informazioni, consulta API Cloud Datastore Ruby documentazione di riferimento.
Per eseguire l'autenticazione su Cloud Datastore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Come in precedenza, è necessaria una transazione per gestire il caso in cui un altro utente stia tentando di creare o aggiornare un'entità con lo stesso ID stringa. Senza una transazione, se l'entità non esiste e due utenti tentano di crearla, il secondo sovrascrive la prima senza sapere che è successo.
Quando una transazione non va a buon fine, puoi chiedere all'app di riprovare la transazione fino a quando non viene completata correttamente oppure puoi consentire agli utenti di gestire l'errore propagando il problema a livello di interfaccia utente dell'app. Non è necessario creare un ciclo di nuovi tentativi intorno a ogni transazione.
Transazioni di sola lettura
Infine, puoi utilizzare una transazione per leggere uno snapshot coerente per configurare un database. Ciò può essere utile quando hai bisogno di più letture per eseguire il rendering di una pagina o esportare dati che devono essere coerenti. Puoi creare transazioni di sola lettura per questi casi.
Le transazioni di sola lettura non possono modificare le entità, ma in cambio non sono in contrasto con altre transazioni e non devono essere riprovati. Se eseguire solo letture in una normale transazione di lettura/scrittura, poi la transazione potrebbero competere con transazioni che modificano gli stessi dati.
C#
Per informazioni su come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per ulteriori informazioni, consulta API Cloud Datastore C# documentazione di riferimento.
Per eseguire l'autenticazione su Cloud Datastore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Go
Per informazioni su come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per ulteriori informazioni, consulta API Cloud Datastore Go documentazione di riferimento.
Per eseguire l'autenticazione su Cloud Datastore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Java
Per informazioni su come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per ulteriori informazioni, consulta API Cloud Datastore Java documentazione di riferimento.
Per eseguire l'autenticazione su Cloud Datastore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Node.js
Per informazioni su come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per ulteriori informazioni, consulta API Cloud Datastore Node.js documentazione di riferimento.
Per eseguire l'autenticazione su Cloud Datastore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
PHP
Per informazioni su come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per ulteriori informazioni, consulta API Cloud Datastore PHP documentazione di riferimento.
Per eseguire l'autenticazione su Cloud Datastore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Python
Per informazioni su come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per ulteriori informazioni, consulta API Cloud Datastore Python documentazione di riferimento.
Per eseguire l'autenticazione su Cloud Datastore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Ruby
Per informazioni su come installare e utilizzare la libreria client per Cloud Datastore, consulta Librerie client di Cloud Datastore. Per ulteriori informazioni, consulta API Cloud Datastore Ruby documentazione di riferimento.
Per eseguire l'autenticazione su Cloud Datastore, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Passaggi successivi
- Scopri di più sulle query.