Questa pagina descrive come inserire, aggiornare ed eliminare i dati utilizzando le mutazioni. Una mutazione rappresenta una sequenza di inserimenti, aggiornamenti ed eliminazioni che Spanner applica in modo atomico a righe e tabelle diverse in un database Spanner.
Sebbene sia possibile eseguire il commit delle mutazioni utilizzando gRPC o REST, è più comune accedere alle API tramite le librerie client.
Questa pagina mostra le attività di base di inserimento, aggiornamento ed eliminazione. Puoi trovare altri esempi nei tutorial introduttivi.
Se devi eseguire il commit di un numero elevato di scritture cieche, ma non hai bisogno di una transazione atomica, puoi modificare collettivamente le tabelle Spanner utilizzando la scrittura batch. Per ulteriori informazioni, consulta Modificare i dati utilizzando le scritture batch.
Inserire nuove righe in una tabella
C++
Scrivi i dati utilizzando la funzione InsertMutationBuilder()
.
Client::Commit()
aggiunge nuove righe a una tabella. Tutti gli inserimenti in un singolo batch vengono applicati in modo atomico.
Questo codice mostra come scrivere i dati:
C#
Puoi inserire i dati utilizzando il metodo connection.CreateInsertCommand()
, che crea un nuovo SpannerCommand
per inserire righe in una tabella. Il metodo
SpannerCommand.ExecuteNonQueryAsync()
aggiunge nuove
rigae alla tabella.
Questo codice mostra come inserire i dati:
Vai
Scrivi i dati utilizzando un
Mutation
. Un Mutation
è un contenitore per le operazioni di mutazione. Un Mutation
rappresenta una sequenza di inserimenti, aggiornamenti, eliminazioni e così via che può essere applicata in modo atomico a righe e tabelle diverse in un database Spanner.
Utilizza Mutation.InsertOrUpdate()
per creare una mutazione INSERT_OR_UPDATE
, che aggiunge una nuova riga o aggiorna
i valori delle colonne se la riga esiste già. In alternativa, utilizza il metodo
Mutation.Insert()
per creare una mutazione INSERT
, che aggiunge una nuova riga.
Client.Apply()
applica
le mutazioni in modo atomico a un database.
Questo codice mostra come scrivere i dati:
Java
Scrivi i dati utilizzando un oggetto Mutation
. Un oggetto Mutation
è un contenitore per le operazioni di mutazione. Un Mutation
rappresenta una
sequenza di inserimenti, aggiornamenti ed eliminazioni che Spanner applica
atomicamente a righe e tabelle diverse in un database Spanner.
Il metodo newInsertBuilder()
nella classe Mutation
costruisce una mutazione INSERT
, che inserisce una nuova
riga in una tabella. Se la riga esiste già, la scrittura non va a buon fine. In alternativa, puoi utilizzare il metodo newInsertOrUpdateBuilder
per creare una mutazione INSERT_OR_UPDATE
, che aggiorna i valori delle colonne se la riga esiste già.
Il metodo write()
nella classe DatabaseClient
scrive
le mutazioni. Tutte le mutazioni in un singolo batch vengono applicate in modo atomico.
Questo codice mostra come scrivere i dati:
Node.js
Scrivi i dati utilizzando un oggetto
Table
. Il metodo
Table.insert()
aggiunge nuove righe alla tabella. Tutti gli insert in un singolo batch vengono applicati
anatomicamente.
Questo codice mostra come scrivere i dati:
PHP
Scrivi i dati utilizzando il metodo
Database::insertBatch
. insertBatch
aggiunge nuove righe a una tabella. Tutti gli inserimenti in un singolo
batch vengono applicati in modo atomico.
Questo codice mostra come scrivere i dati:
Python
Scrivi i dati utilizzando un oggetto Batch
. Un oggetto Batch
è un contenitore per le operazioni di mutazione. Una mutazione rappresenta una sequenza di inserimenti, aggiornamenti, eliminazioni e così via che può essere applicata in modo atomico a righe e tabelle diverse in un database Spanner.
Il metodo insert()
nella classe Batch
viene utilizzato per
aggiungere una o più mutazioni di inserimento al batch. Tutte le mutazioni in un singolo
batch vengono applicate in modo atomico.
Questo codice mostra come scrivere i dati:
Ruby
Scrivi i dati utilizzando un oggetto
Client
. Il metodo
Client#commit
crea e conferma una transazione per le scritture che vengono eseguite in modo atomico
in un singolo punto logico nel tempo su colonne, righe e tabelle di un
database.
Questo codice mostra come scrivere i dati:
Aggiornare le righe di una tabella
Supponiamo che le vendite di Albums(1, 1)
siano inferiori alle aspettative. Di conseguenza, vuoi trasferire 200.000 $dal budget di marketing di Albums(2, 2)
a Albums(1, 1)
, ma solo se i fondi sono disponibili nel budget di Albums(2, 2)
.
Poiché devi leggere i dati nelle tabelle per determinare se scrivere nuovi valori, devi utilizzare una transazione di lettura/scrittura per eseguire le letture e le scritture in modo atomico.
C++
Utilizza la funzione Transaction()
per eseguire una transazione per un cliente.
Ecco il codice per eseguire la transazione:
C#
Per .NET Standard 2.0 (o .NET 4.5) e versioni successive, puoi utilizzare
TransactionScope()
di .NET Framework per eseguire una transazione. Per tutte le versioni supportate di .NET, puoi creare una transazione impostando il risultato di SpannerConnection.BeginTransactionAsync
come proprietà Transaction
di SpannerCommand
.
Ecco i due modi per eseguire la transazione:
.NET Standard 2.0
.NET Standard 1.5
Vai
Utilizza il tipo ReadWriteTransaction
per eseguire un insieme di attività nel contesto di una transazione di lettura/scrittura.
Client.ReadWriteTransaction()
restituisce un oggetto ReadWriteTransaction
.
Il sample utilizza ReadWriteTransaction.ReadRow()
per recuperare una riga di dati.
Il sample utilizza anche ReadWriteTransaction.BufferWrite()
,
che aggiunge un elenco di mutazioni all'insieme di aggiornamenti che verranno applicati
quando la transazione viene confermata.
Il sample utilizza anche il tipo Key
, che rappresenta una chiave di riga in un indice o una tabella Spanner.
Java
Utilizza l'interfaccia TransactionRunner
per eseguire un insieme di attività nel contesto di una transazione di lettura/scrittura. Questa interfaccia contiene il metodo run()
, che viene utilizzato per eseguire una transazione di lettura/scrittura, con i tentativi di nuovo invio necessari. Il metodo
readWriteTransaction
della classe DatabaseClient
restituisce un oggetto TransactionRunner
per l'esecuzione di una singola
transazione logica.
La classe TransactionRunner.TransactionCallable
contiene un metodo run()
per eseguire un singolo tentativo di transazione. run()
prende un oggetto
TransactionContext
, che è un contesto
per una transazione.
Il sample utilizza la classe Struct
, che è utile per memorizzare i risultati delle chiamate readRow()
. Il sample utilizza anche la classe
Key
, che rappresenta una chiave di riga in una tabella o un indice Spanner.
Ecco il codice per eseguire la transazione:
Node.js
Utilizza Database.runTransaction()
per eseguire una transazione.
Ecco il codice per eseguire la transazione:
PHP
Utilizza Database::runTransaction
per eseguire una transazione.
Ecco il codice per eseguire la transazione:
Python
Utilizza il metodo run_in_transaction()
della classe Database
per eseguire una transazione.
Ecco il codice per eseguire la transazione:
Ruby
Utilizza il metodo transaction
della classe Client
per eseguire una transazione.
Ecco il codice per eseguire la transazione:
Eliminare righe in una tabella
Ogni libreria client offre più modi per eliminare le righe:
- Elimina tutte le righe di una tabella.
- Elimina una singola riga specificando i valori delle colonne chiave per la riga.
- Elimina un gruppo di righe creando un intervallo di chiavi.
- Elimina le righe di una tabella con interfoliazione eliminando le righe principali, se la tabella con interfoliazione include
ON DELETE CASCADE
nella definizione dello schema.
C++
Elimina le righe utilizzando la funzione DeleteMutationBuilder()
per un cliente.
Questo codice mostra come eliminare i dati:
C#
Elimina le righe utilizzando il metodo connection.CreateDeleteCommand()
, che crea un nuovo SpannerCommand
per eliminare le righe. Il metodo SpannerCommand.ExecuteNonQueryAsync()
elimina le righe dalla tabella.
Questo esempio elimina le righe della tabella Singers
singolarmente. Le righe
nella tabella Albums
vengono eliminate perché la tabella Albums
è interlacciata
nella tabella Singers
ed è definita con ON DELETE CASCADE
.
Vai
Elimina le righe utilizzando un Mutation
. Utilizza il metodo
Mutation.Delete()
per creare una mutazione DELETE
,
che elimina una riga. Il metodo Client.Apply()
applica le mutazioni in modo atomico al database.
Questo esempio elimina le righe della tabella Albums
singolarmente, quindi elimina tutte le righe della tabella Singers
utilizzando un intervallo di chiavi.
Java
Elimina le righe utilizzando il metodo Mutation.delete()
.
Questo esempio utilizza il metodo KeySet.all()
per eliminare tutte le righe della tabella Albums
. Dopo aver eliminato le righe della tabella Albums
, l'esempio elimina le righe della tabella Singers
singolarmente utilizzando le chiavi create con il metodo KeySet.singleKey()
.
Node.js
Elimina le righe utilizzando il metodo table.deleteRows()
.
Questo esempio utilizza il metodo table.deleteRows()
per eliminare tutte le righe dalla tabella Singers
. Le righe nella tabella Albums
vengono eliminate perché la tabella Albums
è interlacciata nella tabella Singers
ed è definita con ON
DELETE CASCADE
.
PHP
Elimina le righe utilizzando Database::delete() method
. La pagina del
metodo Database::delete()
include un esempio.
Python
Elimina le righe utilizzando il metodo Batch.delete()
.
Questo esempio elimina tutte le righe delle tabelle Albums
e Singers
individualmente utilizzando un oggetto KeySet
.
Ruby
Elimina le righe utilizzando il metodo Client#delete
. La pagina
Client#delete
include un esempio.