Tujuan
Tutorial ini akan memandu Anda melalui langkah-langkah berikut menggunakan driver database/sql Spanner:
- Membuat instance dan database Spanner.
- Menulis, membaca, dan menjalankan kueri SQL pada data di database.
- Perbarui skema database.
- Perbarui data menggunakan transaksi baca-tulis.
- Tambahkan indeks sekunder ke database.
- Gunakan indeks untuk membaca dan menjalankan kueri SQL pada data.
- Ambil data menggunakan transaksi hanya baca.
Biaya
Tutorial ini menggunakan Spanner, yang merupakan komponenGoogle Cloudyang dapat ditagih. Untuk mengetahui informasi tentang biaya penggunaan Spanner, lihat Harga.
Sebelum memulai
Selesaikan langkah-langkah yang dijelaskan di bagian Menyiapkan, yang mencakup pembuatan dan penetapan project Google Cloud default, pengaktifan penagihan, pengaktifan Cloud Spanner API, dan penyiapan OAuth 2.0 untuk mendapatkan kredensial autentikasi guna menggunakan Cloud Spanner API.
Secara khusus, pastikan Anda menjalankan gcloud auth
application-default login
untuk menyiapkan lingkungan pengembangan lokal dengan kredensial
autentikasi.
Menyiapkan lingkungan database/sql lokal
Download dan instal Go di mesin pengembangan jika belum diinstal.
Clone repositori contoh ke komputer lokal Anda:
git clone https://github.com/googleapis/go-sql-spanner.git
Ubah ke direktori yang berisi kode contoh Spanner:
cd go-sql-spanner/snippets
Membuat instance
Saat pertama kali menggunakan Spanner, Anda harus membuat instance, yang merupakan alokasi resource yang digunakan oleh database Spanner. Saat membuat instance, Anda memilih konfigurasi instance, yang menentukan tempat data Anda disimpan, dan juga jumlah node yang akan digunakan, yang menentukan jumlah resource penyimpanan dan penayangan di instance Anda.
Jalankan perintah berikut untuk membuat instance Spanner di region us-central1
dengan 1 node:
gcloud spanner instances create test-instance --config=regional-us-central1 \
--description="Test Instance" --nodes=1
Perhatikan bahwa tindakan ini akan membuat instance dengan karakteristik berikut:
- ID Instance
test-instance
- Nama tampilan
Test Instance
- Konfigurasi instance
regional-us-central1
(Konfigurasi regional menyimpan data di satu region, sementara konfigurasi multi-region mendistribusikan data di beberapa region. Untuk mengetahui informasi selengkapnya, lihat Tentang instance.) - Jumlah node 1 (
node_count
sesuai dengan jumlah resource penyimpanan dan penayangan yang tersedia untuk database dalam instance. Pelajari lebih lanjut di Node dan unit pemrosesan.)
Anda akan melihat:
Creating instance...done.
Mencari file contoh
Repositori contoh berisi contoh yang menunjukkan cara menggunakan Spanner dengan database/sql.
Lihat filegetting_started_guide.go
, yang menunjukkan cara menggunakan
Spanner. Kode ini menunjukkan cara membuat dan menggunakan database baru. Data
menggunakan contoh skema yang ditampilkan di
halaman Skema dan model data.
Buat database
gcloud spanner databases create example-db --instance=test-instance
Anda akan melihat:
Creating database...done.
Membuat tabel
Kode berikut membuat dua tabel dalam database.
Jalankan contoh dengan perintah berikut:
go run getting_started_guide.go createtables projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
Langkah berikutnya adalah menulis data ke database Anda.
Membuat koneksi
Sebelum dapat melakukan operasi baca atau tulis, Anda harus membuatsql.DB
. sql.DB
berisi kumpulan koneksi
yang dapat digunakan untuk berinteraksi dengan Spanner. Nama database dan
properti koneksi lainnya ditentukan dalam nama sumber data database/sql.
Menulis data dengan DML
Anda dapat menyisipkan data menggunakan Bahasa Manipulasi Data (DML) dalam transaksi baca-tulis.
Anda menggunakan fungsi ExecContext
untuk mengeksekusi pernyataan DML.
Jalankan contoh dengan perintah berikut:
go run getting_started_guide.go dmlwrite projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
Hasilnya menampilkan:
4 records inserted.
Menulis data dengan mutasi
Anda juga dapat menyisipkan data menggunakan mutasi.
Mutation
adalah penampung untuk operasi mutasi. Mutation
mewakili urutan
penyisipan, pembaruan, dan penghapusan yang diterapkan Spanner 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.
conn.Raw
untuk mendapatkan referensi ke koneksi Spanner yang mendasarinya. Fungsi SpannerConn.Apply
menerapkan
mutasi secara atomik ke database.
Kode berikut menunjukkan cara menulis data menggunakan mutasi:
Jalankan contoh berikut menggunakan argumen write
:
go run getting_started_guide.go write projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
Membuat kueri data menggunakan SQL
Spanner mendukung antarmuka SQL untuk membaca data, yang dapat Anda akses di command line menggunakan Google Cloud CLI atau secara terprogram menggunakan driver database/sql Spanner.
Di command line
Jalankan pernyataan SQL berikut untuk membaca nilai semua kolom dari
tabel Albums
:
gcloud spanner databases execute-sql example-db --instance=test-instance \
--sql='SELECT SingerId, AlbumId, AlbumTitle FROM Albums'
Hasilnya akan menjadi:
SingerId AlbumId AlbumTitle
1 1 Total Junk
1 2 Go, Go, Go
2 1 Green
2 2 Forever Hold Your Peace
2 3 Terrified
Menggunakan driver database/sql Spanner
Selain menjalankan pernyataan SQL di command line, Anda dapat mengeluarkan pernyataan SQL yang sama secara terprogram menggunakan driver database/sql Spanner.
Fungsi dan struct berikut digunakan untuk menjalankan kueri SQL:- Fungsi
QueryContext
dalam structDB
: gunakan ini untuk mengeksekusi pernyataan SQL yang menampilkan baris, seperti kueri atau pernyataan DML dengan klausaTHEN RETURN
. - Struktur
Rows
: gunakan ini untuk mengakses data yang ditampilkan oleh pernyataan SQL.
Contoh berikut menggunakan fungsi QueryContext
:
Jalankan contoh dengan perintah berikut:
go run getting_started_guide.go query projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
Hasilnya menampilkan:
1 1 Total Junk
1 2 Go, Go, Go
2 1 Green
2 2 Forever Hold Your Peace
2 3 Terrified
Membuat kueri menggunakan parameter SQL
Jika aplikasi Anda memiliki kueri yang sering dieksekusi, Anda dapat meningkatkan performanya dengan memparametrisasi kueri tersebut. Kueri berparameter yang dihasilkan dapat di-cache dan digunakan kembali, yang mengurangi biaya kompilasi. Untuk informasi selengkapnya, lihat Menggunakan parameter kueri untuk mempercepat kueri yang sering dieksekusi.
Berikut adalah contoh penggunaan parameter dalam klausa WHERE
untuk
mengkueri kumpulan data yang berisi nilai tertentu untuk LastName
.
Driver database/sql Spanner mendukung parameter kueri posisional dan bernama. ?
dalam pernyataan SQL menunjukkan parameter kueri posisional. Teruskan nilai parameter kueri sebagai argumen tambahan ke fungsi QueryContext
. Contoh:
Jalankan contoh dengan perintah berikut:
go run getting_started_guide.go querywithparameter projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
Hasilnya menampilkan:
12 Melissa Garcia
Memperbarui skema database
Anggaplah Anda perlu menambahkan kolom baru bernama MarketingBudget
ke tabel
Albums
. Menambahkan kolom baru ke tabel yang ada memerlukan pembaruan pada skema database Anda. Spanner mendukung pembaruan skema ke database saat
database terus menyalurkan traffic. Pembaruan skema tidak memerlukan database
offline dan tidak mengunci seluruh tabel atau kolom; Anda dapat terus
menulis data ke database selama pembaruan skema. Baca selengkapnya tentang pembaruan skema yang didukung dan performa perubahan skema di Melakukan pembaruan skema.
Menambahkan kolom
Anda dapat menambahkan kolom di command line menggunakan Google Cloud CLI atau secara terprogram menggunakan driver database/sql Spanner.
Di command line
Gunakan perintah ALTER TABLE
berikut untuk menambahkan kolom baru ke tabel:
gcloud spanner databases ddl update example-db --instance=test-instance \
--ddl='ALTER TABLE Albums ADD COLUMN MarketingBudget INT64'
Anda akan melihat:
Schema updating...done.
Menggunakan driver database/sql Spanner
Gunakan fungsiExecContext
untuk
mengubah skema:
Jalankan contoh dengan perintah berikut:
go run getting_started_guide.go addcolumn projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
Hasilnya menampilkan:
Added MarketingBudget column.
Menjalankan batch DDL
Sebaiknya jalankan beberapa modifikasi skema dalam satu batch. Gunakan perintah START BATCH DDL
dan RUN BATCH
untuk mengeksekusi batch DDL. Contoh
berikut membuat dua tabel dalam satu batch:
Jalankan contoh dengan perintah berikut:
go run getting_started_guide.go ddlbatch projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
Hasilnya menampilkan:
Added Venues and Concerts tables.
Menulis data ke kolom baru
Kode berikut menulis data ke kolom baru. Fungsi ini menetapkan MarketingBudget
ke
100000
untuk baris yang diberi kunci oleh Albums(1, 1)
dan ke 500000
untuk baris yang diberi kunci
oleh Albums(2, 2)
.
Jalankan contoh dengan perintah berikut:
go run getting_started_guide.go update projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
Hasilnya menampilkan:
Updated 2 albums
Anda juga dapat menjalankan kueri SQL untuk mengambil nilai yang baru saja Anda tulis.
Contoh berikut menggunakan fungsi QueryContext
untuk menjalankan kueri:
Untuk menjalankan kueri ini, jalankan perintah berikut:
go run getting_started_guide.go querymarketingbudget projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
Anda akan melihat:
1 1 100000
1 2 null
2 1 null
2 2 500000
2 3 null
Memperbarui data
Anda dapat memperbarui data menggunakan DML dalam transaksi baca-tulis.
Panggil DB.BeginTx
untuk menjalankan transaksi
baca-tulis di database/sql.
Jalankan contoh dengan perintah berikut:
go run getting_started_guide.go writewithtransactionusingdml projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
Tag transaksi dan tag permintaan
Gunakan tag transaksi dan tag permintaan untuk memecahkan masalah transaksi dan kueri di Spanner. Anda dapat meneruskan
opsi transaksi tambahan ke fungsi
spannerdriver.BeginReadWriteTransaction
.
Gunakan spannerdriver.ExecOptions
untuk meneruskan opsi kueri tambahan untuk pernyataan SQL. Contoh:
Jalankan contoh dengan perintah berikut:
go run getting_started_guide.go tags projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
Mengambil data menggunakan transaksi hanya baca
Misalkan Anda ingin menjalankan lebih dari satu operasi baca pada stempel waktu yang sama. Transaksi
hanya baca mengamati awalan histori commit transaksi yang konsisten, sehingga aplikasi Anda selalu mendapatkan
data yang konsisten.
Tetapkan kolom TxOptions.ReadOnly
ke
true
untuk menjalankan transaksi hanya baca.
Berikut ini cara menjalankan kueri dan melakukan operasi baca dalam transaksi hanya baca yang sama:
Jalankan contoh dengan perintah berikut:
go run getting_started_guide.go readonlytransaction projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
Hasilnya menampilkan:
1 1 Total Junk
1 2 Go, Go, Go
2 1 Green
2 2 Forever Hold Your Peace
2 3 Terrified
2 2 Forever Hold Your Peace
1 2 Go, Go, Go
2 1 Green
2 3 Terrified
1 1 Total Junk
Kueri yang dipartisi dan Data Boost
partitionQuery
API
membagi kueri menjadi bagian-bagian yang lebih kecil, atau partisi, dan menggunakan beberapa
komputer untuk mengambil partisi secara paralel. Setiap partisi diidentifikasi dengan
token partisi. partitionQuery API memiliki latensi yang lebih tinggi daripada query API standar, karena hanya ditujukan untuk operasi massal seperti mengekspor atau memindai seluruh database.
Dengan Data Boost, Anda dapat menjalankan kueri analisis dan ekspor data dengan dampak yang nyaris nol terhadap workload yang ada di instance Spanner yang disediakan. Peningkatan Data hanya mendukung kueri yang dipartisi.
Contoh berikut menunjukkan cara menjalankan kueri yang dipartisi dengan Data Boost dengan driver database/sql:
Jalankan contoh dengan perintah berikut:
go run getting_started_guide.go databoost projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
DML yang dipartisi
Bahasa Manipulasi Data (DML) Terpartisi dirancang untuk jenis pembaruan dan penghapusan massal berikut:
- Pembersihan dan pembersihan sampah memori secara berkala.
- Mengisi ulang kolom baru dengan nilai default.
Jalankan contoh dengan perintah berikut:
go run getting_started_guide.go pdml projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
Pembersihan
Agar tidak menimbulkan biaya tambahan pada akun Penagihan Cloud untuk resource yang digunakan dalam tutorial ini, hapus database dan instance yang Anda buat.
Menghapus database
Jika Anda menghapus instance, semua database di dalamnya akan otomatis dihapus. Langkah ini menunjukkan cara menghapus database tanpa menghapus instance (Anda akan tetap dikenai biaya untuk instance).
Di command line
gcloud spanner databases delete example-db --instance=test-instance
Menggunakan konsol Google Cloud
Buka halaman Spanner Instances di konsol Google Cloud.
Klik instance.
Klik database yang ingin dihapus.
Di halaman Database details, klik Delete.
Konfirmasi bahwa Anda ingin menghapus database, lalu klik Hapus.
Menghapus instance
Menghapus instance akan otomatis menghapus semua database yang dibuat di instance tersebut.
Di command line
gcloud spanner instances delete test-instance
Menggunakan konsol Google Cloud
Buka halaman Spanner Instances di konsol Google Cloud.
Klik instance Anda.
Klik Hapus.
Konfirmasi bahwa Anda ingin menghapus instance, lalu klik Hapus.
Langkah berikutnya
Pelajari cara mengakses Spanner dengan instance virtual machine.
Pelajari kredensial otorisasi dan autentikasi di Mengautentikasi ke layanan Cloud menggunakan library klien.
Pelajari Praktik terbaik desain skema Spanner lebih lanjut.