Halaman ini menjelaskan cara menyisipkan, memperbarui, dan menghapus data menggunakan mutasi. Mutasi mewakili urutan penyisipan, pembaruan, dan penghapusan yang diterapkan secara atomik oleh Spanner ke berbagai baris dan tabel dalam database Spanner.
Meskipun Anda dapat melakukan mutasi menggunakan gRPC atau REST, lebih umum untuk mengakses API melalui library klien.
Halaman ini menampilkan tugas dasar penyisipan, pembaruan, dan penghapusan. Anda dapat menemukan contoh lainnya di Tutorial memulai.
Jika perlu melakukan operasi tulis buta dalam jumlah besar, tetapi tidak memerlukan transaksi atomik, Anda dapat mengubah tabel Spanner secara massal menggunakan operasi tulis batch. Untuk mengetahui informasi selengkapnya, lihat Mengubah data menggunakan operasi tulis batch.
Menyisipkan baris baru dalam tabel
C++
Anda menulis data menggunakan fungsi InsertMutationBuilder()
.
Client::Commit()
menambahkan baris baru ke tabel. Semua penyisipan dalam
satu batch diterapkan secara atomik.
Kode ini menunjukkan cara menulis data:
C#
Anda dapat menyisipkan data menggunakan metode connection.CreateInsertCommand()
, yang membuat SpannerCommand
baru untuk menyisipkan baris ke dalam tabel. Metode
SpannerCommand.ExecuteNonQueryAsync()
menambahkan baris
baru ke tabel.
Kode ini menunjukkan cara menyisipkan data:
Go
Anda menulis data menggunakan
Mutation
. Mutation
adalah penampung untuk operasi mutasi. Mutation
mewakili urutan
penyisipan, pembaruan, penghapusan, dan sebagainya yang dapat diterapkan secara atomik ke
baris dan tabel yang berbeda dalam database Spanner.
Gunakan Mutation.InsertOrUpdate()
untuk membuat mutasi INSERT_OR_UPDATE
, yang menambahkan baris baru atau memperbarui
nilai kolom jika baris sudah ada. Atau, gunakan metode Mutation.Insert()
untuk membuat mutasi INSERT
, yang menambahkan baris baru.
Client.Apply()
menerapkan
mutasi secara atomik ke database.
Kode ini menunjukkan cara menulis data:
Java
Anda menulis data menggunakan objek Mutation
. Objek Mutation
adalah penampung untuk operasi mutasi. Mutation
mewakili
urutan penyisipan, pembaruan, dan penghapusan yang diterapkan Spanner secara
atomis ke baris dan tabel yang berbeda dalam database Spanner.
Metode newInsertBuilder()
di class Mutation
membuat mutasi INSERT
, yang menyisipkan baris
baru dalam tabel. Jika baris sudah ada, operasi tulis akan gagal. Atau,
Anda dapat menggunakan metode newInsertOrUpdateBuilder
untuk membuat mutasi INSERT_OR_UPDATE
, yang
memperbarui nilai kolom jika baris sudah ada.
Metode write()
di class DatabaseClient
menulis
mutasi. Semua mutasi dalam satu batch diterapkan secara atomik.
Kode ini menunjukkan cara menulis data:
Node.js
Anda menulis data menggunakan objek Table
. Metode
Table.insert()
menambahkan baris baru ke tabel. Semua penyisipan dalam satu batch diterapkan secara acak.
Kode ini menunjukkan cara menulis data:
PHP
Anda menulis data menggunakan metode
Database::insertBatch
. insertBatch
menambahkan baris baru ke tabel. Semua penyisipan dalam satu
batch diterapkan secara atomik.
Kode ini menunjukkan cara menulis data:
Python
Anda menulis data menggunakan objek Batch
. Objek Batch
adalah penampung untuk operasi mutasi. Mutasi mewakili urutan
penyisipan, pembaruan, penghapusan, dan sebagainya yang dapat diterapkan secara atomik ke
baris dan tabel yang berbeda dalam database Spanner.
Metode insert()
di class Batch
digunakan untuk
menambahkan satu atau beberapa mutasi penyisipan ke batch. Semua mutasi dalam satu
batch diterapkan secara atomik.
Kode ini menunjukkan cara menulis data:
Ruby
Anda menulis data menggunakan objek Client
. Metode
Client#commit
membuat dan melakukan transaksi untuk operasi tulis yang dieksekusi secara atomik
pada satu titik waktu logis di seluruh kolom, baris, dan tabel dalam
database.
Kode ini menunjukkan cara menulis data:
Memperbarui baris dalam tabel
Misalkan penjualan Albums(1, 1)
lebih rendah dari yang diperkirakan. Akibatnya, Anda
ingin memindahkan Rp2.000.000 dari anggaran pemasaran Albums(2, 2)
ke
Albums(1, 1)
, tetapi hanya jika uang tersebut tersedia dalam anggaran
Albums(2, 2)
.
Karena Anda perlu membaca data dalam tabel untuk menentukan apakah akan menulis nilai baru, Anda harus menggunakan transaksi baca-tulis untuk melakukan operasi baca dan tulis secara atomik.
C++
Gunakan fungsi Transaction()
untuk menjalankan transaksi bagi klien.
Berikut kode untuk menjalankan transaksi:
C#
Untuk .NET Standard 2.0 (atau .NET 4.5) dan yang lebih baru, Anda dapat menggunakan
TransactionScope()
framework .NET untuk menjalankan transaksi. Untuk semua versi .NET
yang didukung, Anda dapat membuat transaksi dengan menetapkan hasil
SpannerConnection.BeginTransactionAsync
sebagai properti Transaction
dari
SpannerCommand
.
Berikut adalah dua cara untuk menjalankan transaksi:
.NET Standard 2.0
.NET Standard 1.5
Go
Gunakan jenis ReadWriteTransaction
untuk menjalankan isi pekerjaan dalam konteks transaksi baca-tulis.
Client.ReadWriteTransaction()
menampilkan objek ReadWriteTransaction
.
Contoh ini menggunakan ReadWriteTransaction.ReadRow()
untuk mengambil baris data.
Contoh ini juga menggunakan ReadWriteTransaction.BufferWrite()
,
yang menambahkan daftar mutasi ke kumpulan update yang akan diterapkan
saat transaksi di-commit.
Contoh ini juga menggunakan jenis Key
, yang mewakili kunci baris dalam tabel atau indeks Spanner.
Java
Gunakan antarmuka TransactionRunner
untuk menjalankan
kumpulan pekerjaan dalam konteks transaksi baca-tulis. Antarmuka ini
berisi metode run()
, yang digunakan untuk menjalankan transaksi
baca-tulis, dengan percobaan ulang sesuai kebutuhan. Metode
readWriteTransaction
dari class
DatabaseClient
menampilkan objek TransactionRunner
untuk mengeksekusi satu transaksi
logis.
Class TransactionRunner.TransactionCallable
berisi metode run()
untuk melakukan satu upaya transaksi. run()
menggunakan
objek TransactionContext
, yang merupakan konteks
untuk transaksi.
Contoh ini menggunakan class Struct
, yang berguna untuk
menyimpan hasil panggilan readRow()
. Contoh ini juga menggunakan
class Key
, yang mewakili kunci baris dalam tabel atau indeks
Spanner.
Berikut kode untuk menjalankan transaksi:
Node.js
Gunakan Database.runTransaction()
untuk menjalankan transaksi.
Berikut kode untuk menjalankan transaksi:
PHP
Gunakan Database::runTransaction
untuk menjalankan transaksi.
Berikut kode untuk menjalankan transaksi:
Python
Gunakan metode run_in_transaction()
dari class Database
untuk menjalankan transaksi.
Berikut kode untuk menjalankan transaksi:
Ruby
Gunakan metode transaction
dari class Client
untuk menjalankan transaksi.
Berikut kode untuk menjalankan transaksi:
Menghapus baris dalam tabel
Setiap library klien menyediakan beberapa cara untuk menghapus baris:
- Menghapus semua baris dalam tabel.
- Menghapus satu baris dengan menentukan nilai kolom kunci untuk baris tersebut.
- Menghapus grup baris dengan membuat rentang kunci.
- Menghapus baris dalam tabel yang diselingi dengan menghapus baris induk, jika
tabel yang diselingi menyertakan
ON DELETE CASCADE
dalam definisi skemanya.
C++
Menghapus baris menggunakan fungsi DeleteMutationBuilder()
untuk klien.
Kode ini menunjukkan cara menghapus data:
C#
Hapus baris menggunakan
metode connection.CreateDeleteCommand()
, yang
membuat SpannerCommand
baru untuk menghapus baris. Metode
SpannerCommand.ExecuteNonQueryAsync()
menghapus
baris dari tabel.
Contoh ini menghapus baris dalam tabel Singers
satu per satu. Baris
dalam tabel Albums
dihapus karena tabel Albums
diselang-seling
dalam tabel Singers
dan ditentukan dengan ON DELETE CASCADE
.
Go
Hapus baris menggunakan Mutation
. Gunakan metode
Mutation.Delete()
untuk membuat mutasi DELETE
,
yang menghapus baris. Metode Client.Apply()
menerapkan mutasi secara atomik ke database.
Contoh ini menghapus baris dalam tabel Albums
satu per satu, lalu menghapus semua baris dalam tabel Singers
menggunakan KeyRange.
Java
Hapus baris menggunakan metode Mutation.delete()
.
Contoh ini menggunakan metode KeySet.all()
untuk menghapus semua
baris dalam tabel Albums
. Setelah menghapus baris di tabel Albums
, contoh ini akan menghapus baris di tabel Singers
satu per satu menggunakan kunci yang dibuat dengan metode KeySet.singleKey()
.
Node.js
Hapus baris menggunakan metode table.deleteRows()
.
Contoh ini menggunakan metode table.deleteRows()
untuk menghapus semua baris
dari tabel Singers
. Baris dalam tabel Albums
dihapus karena
tabel Albums
diselingi dalam tabel Singers
dan ditentukan dengan ON
DELETE CASCADE
.
PHP
Hapus baris menggunakan Database::delete() method
. Halaman
metode Database::delete()
menyertakan contoh.
Python
Hapus baris menggunakan metode Batch.delete()
.
Contoh ini menghapus semua baris dalam tabel Albums
dan Singers
secara terpisah menggunakan objek KeySet
.
Ruby
Hapus baris menggunakan metode Client#delete
. Halaman
Client#delete
menyertakan contoh.