Tujuan
Tutorial ini akan memandu Anda melalui langkah-langkah berikut menggunakan driver database/sql Spanner:
- Buat 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.
- Mengambil 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 dalam 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.
Khususnya, pastikan Anda menjalankan gcloud auth
application-default login
untuk menyiapkan lingkungan pengembangan lokal dengan kredensial
autentikasi.
Siapkan lingkungan database/SQL lokal Anda
Download dan instal Go di mesin pengembangan Anda 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 penyimpanan data Anda, dan juga jumlah node yang akan digunakan, yang menentukan jumlah resource penayangan dan penyimpanan 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 perintah ini 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 serving dan penyimpanan yang tersedia untuk database di instance. Pelajari lebih lanjut di Node dan unit pemrosesan.)
Anda akan melihat:
Creating instance...done.
Melihat-lihat 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.
Buat tabel
Kode berikut membuat dua tabel dalam database.
Jalankan sampel 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 Pengolahan Data (DML) dalam transaksi baca-tulis.
Anda menggunakan fungsi ExecContext
untuk mengeksekusi pernyataan DML.
Jalankan sampel 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 adalah:
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 dijalankan, Anda dapat meningkatkan performanya dengan memparameterisasinya. Kueri parametrik yang dihasilkan dapat di-cache dan digunakan kembali, yang mengurangi biaya kompilasi. Untuk mengetahui informasi selengkapnya, lihat Menggunakan parameter kueri untuk mempercepat kueri yang sering dijalankan.
Berikut adalah contoh penggunaan parameter dalam klausa WHERE
untuk
mengkueri 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
Misalkan Anda perlu menambahkan kolom baru bernama MarketingBudget
ke tabel Albums
. Menambahkan kolom baru ke tabel yang sudah ada memerlukan pembaruan pada
skema database Anda. Spanner mendukung update skema ke database saat
database terus melayani 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 Anda menjalankan 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. Tindakan ini menetapkan MarketingBudget
ke
100000
untuk baris yang dikunci oleh Albums(1, 1)
dan ke 500000
untuk baris yang dikunci
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 mengeksekusi 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 pembacaan pada stempel waktu yang sama. Transaksi hanya baca mengamati awalan
yang konsisten dari histori commit transaksi, sehingga aplikasi Anda selalu mendapatkan
data yang konsisten.
Tetapkan kolom TxOptions.ReadOnly
ke true
untuk menjalankan transaksi hanya baca.
Berikut cara menjalankan kueri dan melakukan pembacaan 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
mesin 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.
Data Boost memungkinkan Anda menjalankan kueri analisis dan ekspor data dengan dampak yang hampir tidak ada 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 Peningkatan Data 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 Pengolahan Data (DML) Terpartisi dirancang untuk jenis update dan penghapusan massal berikut:
- Pembersihan berkala dan pembersihan sampah memori.
- 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 Anda untuk resource yang digunakan dalam tutorial ini, hapus database dan hapus 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 tetap dikenai biaya untuk instance tersebut).
Di command line
gcloud spanner databases delete example-db --instance=test-instance
Menggunakan Google Cloud console
Buka halaman Spanner Instances di konsol Google Cloud .
Klik instance.
Klik database yang ingin Anda hapus.
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 Google Cloud console
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 lebih lanjut Praktik terbaik desain skema Spanner.