Halaman ini menjelaskan cara menyisipkan, memperbarui, dan menghapus data menggunakan mutasi. Mutasi mewakili urutan penyisipan, pembaruan, dan penghapusan yang diterapkan secara atomik ke berbagai baris dan tabel dalam database Spanner.
Meskipun Anda dapat melakukan mutasi menggunakan gRPC atau REST, mengakses API melalui library klien lebih umum.
Halaman ini menunjukkan tugas dasar menyisipkan, memperbarui, dan menghapus. Anda dapat menemukan contoh lainnya di Tutorial memulai.
Jika Anda perlu melakukan commit dalam jumlah besar blind write, tetapi tidak memerlukan transaksi atomik, Anda dapat mengubah tabel Spanner secara massal menggunakan batch operasi tulis. Untuk mengetahui informasi selengkapnya, lihat artikel Mengubah data menggunakan batch operasi tulis.
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
berbagai baris dan tabel di 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 atomik ke berbagai baris dan tabel di database Spanner.
Metode newInsertBuilder()
di class Mutation
membuat mutasi INSERT
, yang menyisipkan baris baru
dalam tabel. Jika baris sudah ada, penulisan 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 atomik.
Kode ini menunjukkan cara menulis data:
PHP
Anda menulis data menggunakan metode Database::insertBatch
. insertBatch
menambahkan baris baru ke tabel. Semua penyisipan dalam satu
tumpukan 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
berbagai baris dan tabel di database Spanner.
Metode insert()
di class Batch
digunakan untuk
menambahkan satu atau beberapa mutasi penyisipan ke batch. Semua mutasi dalam satu tumpukan diterapkan secara atomik.
Kode ini menunjukkan cara menulis data:
Ruby
Anda menulis data menggunakan
objek
Client
. Metode Client#commit
membuat dan meng-commit transaksi untuk penulisan 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 diharapkan. Akibatnya, Anda
ingin memindahkan $200.000 dari anggaran pemasaran sebesar Albums(2, 2)
ke
Albums(1, 1)
, tetapi hanya jika uang tersebut tersedia dalam anggaran sebesar
Albums(2, 2)
.
Karena Anda perlu membaca data dalam tabel untuk menentukan apakah akan menulis nilai baru atau tidak, Anda harus menggunakan transaksi baca-tulis untuk melakukan operasi baca dan tulis secara atomik.
C++
Gunakan fungsi Transaction()
untuk menjalankan transaksi untuk klien.
Berikut adalah 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 mengeksekusi isi tugas dalam konteks transaksi baca-tulis.
Client.ReadWriteTransaction()
menampilkan objek ReadWriteTransaction
.
Contoh ini menggunakan ReadWriteTransaction.ReadRow()
untuk mengambil baris data.
Contoh tersebut juga menggunakan ReadWriteTransaction.BufferWrite()
, yang menambahkan daftar mutasi ke kumpulan update yang akan diterapkan saat transaksi di-commit.
Contoh tersebut juga menggunakan jenis Key
, yang mewakili kunci baris dalam tabel atau indeks Spanner.
Java
Gunakan antarmuka TransactionRunner
untuk mengeksekusi
isi tugas 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 percobaan
transaksi. run()
mengambil
objek TransactionContext
, yang merupakan konteks
untuk transaksi.
Contoh ini menggunakan class Struct
, yang berguna untuk
menyimpan hasil panggilan readRow()
. Contoh tersebut juga menggunakan
class Key
, yang mewakili kunci baris dalam tabel
atau indeks Spanner.
Berikut adalah kode untuk menjalankan transaksi:
Node.js
Gunakan Database.runTransaction()
untuk menjalankan transaksi.
Berikut adalah kode untuk menjalankan transaksi:
PHP
Gunakan Database::runTransaction
untuk menjalankan transaksi.
Berikut adalah kode untuk menjalankan transaksi:
Python
Gunakan metode run_in_transaction()
dari class Database
untuk menjalankan transaksi.
Berikut adalah kode untuk menjalankan transaksi:
Ruby
Gunakan metode transaction
dari class Client
untuk menjalankan transaksi.
Berikut adalah 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 utama untuk baris tersebut.
- Hapus grup baris dengan membuat rentang kunci.
- Hapus baris dalam tabel sisipan dengan menghapus baris induk, jika tabel sisipan menyertakan
ON DELETE CASCADE
dalam definisi skemanya.
C++
Hapus 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
disisipkan
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 dalam tabel Albums
, contoh ini akan menghapus baris dalam 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
disisipkan 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
satu per satu menggunakan objek KeySet
.
Ruby
Hapus baris menggunakan metode Client#delete
. Halaman
Client#delete
menyertakan contoh.