Questa pagina descrive come inserire, aggiornare ed eliminare i dati utilizzando le modifiche. Una modifica rappresenta una sequenza di inserimenti, aggiornamenti ed eliminazioni che Spanner applica in modo atomico a righe e tabelle diverse in un database. Le modifiche sono progettate per la scrittura dei dati. Non possono leggere i dati dalle tabelle. Molte operazioni di aggiornamento devono leggere i dati esistenti prima di eseguire le modifiche. Per questi casi d'uso, devi utilizzare una transazione di lettura/scrittura, che consente a Spanner di leggere le righe e poi applicare le modifiche all'interno della stessa operazione atomica.
Sebbene tu possa eseguire il commit delle modifiche utilizzando gRPC o REST, è più comune accedere alle API tramite le librerie client.
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 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
connection.CreateInsertCommand() metodo, che
crea un nuovo SpannerCommand per inserire le righe in una tabella. Il
SpannerCommand.ExecuteNonQueryAsync() metodo aggiunge nuove
righe alla tabella.
Questo codice mostra come inserire i dati:
Vai
Scrivi i dati utilizzando un
Mutation. Una Mutation è un contenitore per le operazioni di modifica. Una Mutation rappresenta una sequenza di inserimenti, aggiornamenti o eliminazioni che possono essere applicati 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
Mutation.Insert()
metodo per creare una mutazione INSERT, che aggiunge una nuova riga.
Client.Apply() applica le modifiche in modo atomico a un database.
Questo codice mostra come scrivere i dati:
Java
Scrivi i dati utilizzando un Mutation oggetto. Un oggetto Mutation è un contenitore per le operazioni di modifica. Una Mutation rappresenta una sequenza di inserimenti, aggiornamenti ed eliminazioni che Spanner applica in modo atomico a righe e tabelle diverse 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 mutazione INSERT_OR_UPDATE, che
aggiorna i valori delle colonne se la riga esiste già.
Il metodo write() nella classe DatabaseClient scrive
le modifiche. Tutte le modifiche in un singolo batch vengono applicate in modo atomico.
Questo codice mostra come scrivere i dati:
Node.js
Scrivi i dati utilizzando un
Table oggetto. Il
Table.insert()
metodo aggiunge nuove righe alla tabella. Tutti gli inserimenti in un singolo batch vengono applicati in modo atomico.
Questo codice mostra come scrivere i dati:
PHP
Scrivi i dati utilizzando il
Database::insertBatch
metodo. 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 Batch oggetto. Un oggetto Batch è un contenitore per le operazioni di modifica. Una modifica rappresenta una sequenza di inserimenti, aggiornamenti o eliminazioni che possono essere applicati 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ù modifiche di inserimento al batch. Tutte le modifiche in un singolo batch vengono applicate in modo atomico.
Questo codice mostra come scrivere i dati:
Ruby
Scrivi i dati utilizzando un
Client
oggetto. Il
Client#commit
metodo crea ed esegue il commit di una transazione per le scritture che vengono eseguite in modo atomico
in un singolo punto logico nel tempo tra colonne, righe e tabelle in 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 alle attese. Di conseguenza, vuoi spostare 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).
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 il framework .NET's
TransactionScope() 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 ReadWriteTransaction
tipo per eseguire un corpo di lavoro nel contesto di una transazione di lettura/scrittura.
Client.ReadWriteTransaction()
restituisce un oggetto ReadWriteTransaction.
L'esempio utilizza ReadWriteTransaction.ReadRow()
per recuperare una riga di dati.
L'esempio utilizza anche ReadWriteTransaction.BufferWrite(),
che aggiunge un elenco di modifiche all'insieme di aggiornamenti che verranno applicati
quando viene eseguito il commit della transazione.
L'esempio utilizza anche il Key
tipo, che rappresenta una chiave di riga in una tabella o in un indice Spanner.
Java
Utilizza l'TransactionRunnerinterfaccia per eseguire
un corpo di lavoro 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 nuovi tentativi, se necessario. Il
readWriteTransaction metodo della DatabaseClient
classe restituisce un TransactionRunner oggetto per l'esecuzione di una singola
transazione logica.
La TransactionRunner.TransactionCallable
classe contiene un metodo run() per eseguire un singolo tentativo di
transazione. run() accetta un
TransactionContext oggetto, che è un contesto
per una transazione.
L'esempio utilizza la classe Struct, utile per
archiviare i risultati delle chiamate readRow(). L'esempio utilizza anche la
Key classe, che rappresenta una chiave di riga in una tabella o in 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 run_in_transaction()
metodo della Database
classe per eseguire una transazione.
Ecco il codice per eseguire la transazione:
Ruby
Utilizza il transaction
metodo della Client
classe per eseguire una transazione.
Ecco il codice per eseguire la transazione:
Eliminare le righe in una tabella
Ogni libreria client fornisce diversi modi per eliminare le righe:
- Elimina 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 principali, se la tabella con interleaving include
ON DELETE CASCADEnella 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
connection.CreateDeleteCommand() metodo, che
crea un nuovo SpannerCommand per eliminare le righe. Il
SpannerCommand.ExecuteNonQueryAsync() metodo elimina le
righe dalla tabella.
Questo esempio elimina le righe della tabella Singers singolarmente. Le righe della tabella Albums vengono eliminate perché la tabella Albums è con interleaving nella tabella Singers ed è definita con ON DELETE CASCADE.
Vai
Elimina le righe utilizzando una Mutation. Utilizza il
Mutation.Delete() metodo per creare una DELETE mutazione,
che elimina una riga. Il metodo Client.Apply() applica
le modifiche in modo atomico al database.
Questo esempio elimina le righe della tabella Albums singolarmente, quindi
elimina tutte le righe della tabella Singers utilizzando un KeyRange.
Java
Elimina le righe utilizzando il Mutation.delete() metodo.
Questo esempio utilizza il metodo KeySet.all() per eliminare tutte
le righe della tabella Albums. Dopo aver eliminato le righe della Albums
tabella, l'esempio elimina le righe della Singers tabella singolarmente
utilizzando le chiavi create con il KeySet.singleKey() metodo.
Node.js
Elimina le righe utilizzando il table.deleteRows() metodo.
Questo esempio utilizza il metodo table.deleteRows() per eliminare tutte le righe della tabella Singers. Le righe della tabella Albums vengono eliminate perché
la tabella Albums è con interleaving nella tabella Singers ed è definita con ON
DELETE CASCADE.
PHP
Elimina le righe utilizzando il Database::delete() method. La pagina del metodo
Database::delete() include un esempio.
Python
Elimina le righe utilizzando il Batch.delete() metodo.
Questo esempio elimina tutte le righe delle tabelle Albums e Singers
singolarmente utilizzando un oggetto KeySet.
Ruby
Elimina le righe utilizzando il Client#delete metodo. La
Client#delete pagina include un esempio.