Questa pagina descrive come inserire, aggiornare ed eliminare i dati utilizzando le mutazioni. Una mutazione rappresenta una sequenza di inserti, aggiornamenti ed eliminazioni che Spanner applica a livello atomico a diverse righe e tabelle in un database di Spanner.
Anche se puoi eseguire il commit delle mutazioni utilizzando gRPC o REST, è più comune accedere alle API tramite le librerie client.
In questa pagina vengono mostrate 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 in blocco le tabelle Spanner utilizzando la scrittura batch. Per ulteriori informazioni, consulta Modificare i dati tramite scritture batch.
Inserimento di nuove righe in una tabella
C++
Puoi scrivere i dati utilizzando la funzione InsertMutationBuilder()
.
Client::Commit()
aggiunge nuove righe a una tabella. Tutti gli inserti in un singolo batch
vengono applicati a livello 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 righe alla tabella.
Questo codice mostra come inserire i dati:
Go
Puoi scrivere i dati utilizzando Mutation
. Un Mutation
è un container per operazioni di mutazione. Un Mutation
rappresenta una sequenza di
inserti, aggiornamenti, eliminazioni e così via, che può essere applicata a livello atomico a
diverse righe e tabelle in un database Spanner.
Usa Mutation.InsertOrUpdate()
per creare una mutazione INSERT_OR_UPDATE
, che aggiunge una nuova riga o aggiorna i valori della colonna se la riga esiste già. In alternativa, usa il metodo
Mutation.Insert()
per creare una mutazione INSERT
, che aggiunge una nuova riga.
Client.Apply()
applica
le mutazioni a livello atomico a un database.
Questo codice mostra come scrivere i dati:
Java
Puoi scrivere i dati utilizzando un oggetto Mutation
. Un oggetto Mutation
è un contenitore per le operazioni di mutazione. Un Mutation
rappresenta una sequenza di inserti, aggiornamenti ed eliminazioni che Spanner applica a livello atomico a diverse righe e tabelle in un database Spanner.
Il metodo newInsertBuilder()
nella classe Mutation
crea una mutazione INSERT
, che inserisce una nuova riga
in una tabella. Se la riga esiste già, la scrittura non riesce. In alternativa, puoi utilizzare il metodo newInsertOrUpdateBuilder
per creare una modifica INSERT_OR_UPDATE
, che aggiorna i valori della colonna se la riga esiste già.
Il metodo write()
nella classe DatabaseClient
scrive
le mutazioni. Tutte le mutazioni in un singolo lotto vengono applicate a livello atomico.
Questo codice mostra come scrivere i dati:
Node.js
Puoi scrivere i dati utilizzando un
oggetto Table
. Il metodo Table.insert()
aggiunge nuove righe alla tabella. Tutti gli inserti in un singolo batch
vengono applicati a livello atomico.
Questo codice mostra come scrivere i dati:
PHP
Puoi scrivere i dati utilizzando il metodo Database::insertBatch
. insertBatch
aggiunge nuove righe a una tabella. Tutti gli inserti in un singolo
batch vengono applicati a livello atomico.
Questo codice mostra come scrivere i dati:
Python
Puoi scrivere i dati utilizzando un oggetto Batch
. Un oggetto Batch
è un container per le operazioni di mutazione. Una mutazione rappresenta una sequenza di inserti, aggiornamenti, eliminazioni e così via che può essere applicata a livello atomico a diverse righe e tabelle 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 a livello atomico.
Questo codice mostra come scrivere i dati:
Ruby
Puoi scrivere i dati utilizzando un oggetto Client
. Il metodo Client#commit
crea ed esegue il commit di una transazione per le scritture eseguite a livello atomico in un unico momento logico su colonne, righe e tabelle di un database.
Questo codice mostra come scrivere i dati:
Aggiornare le righe in una tabella
Supponiamo che le vendite di Albums(1, 1)
siano inferiori al previsto. Di conseguenza,
vuoi spostare 200.000 $dal budget di marketing di Albums(2, 2)
a
Albums(1, 1)
, ma solo se il denaro è disponibile 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 e scrittura per eseguire le letture e le scritture a livello atomico.
C++
Utilizza la funzione Transaction()
per eseguire una transazione per un client.
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
Go
Utilizza il tipo ReadWriteTransaction
per eseguire una parte del lavoro nel contesto di una transazione di lettura e scrittura.
Client.ReadWriteTransaction()
restituisce un oggetto ReadWriteTransaction
.
Nell'esempio viene utilizzato ReadWriteTransaction.ReadRow()
per recuperare una riga di dati.
L'esempio utilizza anche ReadWriteTransaction.BufferWrite()
,
che aggiunge un elenco di mutazioni al set di aggiornamenti che verranno applicati
quando viene eseguito il commit della transazione.
L'esempio utilizza anche il tipo Key
, che rappresenta una chiave di riga in una tabella o un indice Spanner.
Java
Utilizza l'interfaccia TransactionRunner
per eseguire
una parte del lavoro nel contesto di una transazione di lettura-scrittura. Questa interfaccia
contiene il metodo run()
, che viene utilizzato per eseguire una transazione di lettura
e scrittura, con nuovi tentativi, se 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.
Nell'esempio viene utilizzata la classe Struct
, utile per archiviare i risultati delle chiamate readRow()
. L'esempio 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 diversi modi per eliminare le righe:
- Eliminare tutte le righe di una tabella.
- Elimina una singola riga specificando i valori della colonna chiave per la riga.
- Elimina un gruppo di righe creando un intervallo di chiavi.
- Elimina le righe in una tabella con interleaving eliminando le righe padre, se la tabella con interleaving include
ON DELETE CASCADE
nella definizione dello schema.
C++
Elimina le righe utilizzando la funzione DeleteMutationBuilder()
per un client.
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 singolarmente le righe della tabella Singers
. Le righe nella tabella Albums
vengono eliminate perché la tabella Albums
ha un interleaving nella tabella Singers
ed è definita con ON DELETE CASCADE
.
Go
Eliminare le righe utilizzando una Mutation
. Usa il metodo Mutation.Delete()
per creare una mutazione DELETE
, che elimina una riga. Il metodo Client.Apply()
applica
le mutazioni a livello atomico al database.
Questo esempio elimina singolarmente le righe nella tabella Albums
e poi tutte le righe nella tabella Singers
utilizzando un KeyRange.
Java
Eliminare le righe utilizzando il metodo Mutation.delete()
.
In questo esempio viene utilizzato il metodo KeySet.all()
per eliminare tutte
le righe nella tabella Albums
. Dopo aver eliminato le righe nella tabella Albums
, nell'esempio vengono eliminate singolarmente le righe della tabella Singers
utilizzando le chiavi create con il metodo KeySet.singleKey()
.
Node.js
Eliminare le righe utilizzando il metodo table.deleteRows()
.
In questo esempio viene utilizzato il metodo table.deleteRows()
per eliminare tutte le righe
dalla tabella Singers
. Le righe nella tabella Albums
vengono eliminate perché
la tabella Albums
è con interleaving nella tabella Singers
ed è definita con ON
DELETE CASCADE
.
PHP
Eliminare le righe utilizzando Database::delete() method
. La pagina Metodo Database::delete()
include un esempio.
Python
Eliminare le righe utilizzando il metodo Batch.delete()
.
Questo esempio elimina tutte le righe nelle tabelle Albums
e Singers
singolarmente utilizzando un oggetto KeySet
.
Ruby
Eliminare le righe utilizzando il metodo Client#delete
. La pagina Client#delete
include un esempio.