Tujuan
Tutorial ini memandu Anda melalui langkah-langkah berikut menggunakan library klien Spanner untuk Go:
- Membuat instance dan database Spanner.
- Menulis, membaca, dan mengeksekusi 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 komponen Google Cloud yang 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 Go lokal
Instal Go (download) di mesin pengembangan jika belum diinstal.
Konfigurasikan variabel lingkungan
GOPATH
jika belum dikonfigurasi, seperti yang dijelaskan dalam Menguji penginstalan Anda.Download sampel ke komputer Anda.
git clone https://github.com/GoogleCloudPlatform/golang-samples $GOPATH/src/github.com/GoogleCloudPlatform/golang-samples
Ubah ke direktori yang berisi kode contoh Spanner:
cd $GOPATH/src/github.com/GoogleCloudPlatform/golang-samples/spanner/spanner_snippets
Tetapkan variabel lingkungan
GCLOUD_PROJECT
ke project ID Google Cloud Anda:export GCLOUD_PROJECT=[MY_PROJECT_ID]
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, sedangkan 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.
Menelusuri file contoh
Repositori contoh berisi contoh yang menunjukkan cara menggunakan Spanner dengan Go.
Lihat filesnippet.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
GoogleSQL
go run snippet.go createdatabase projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
PostgreSQL
go run snippet.go pgcreatedatabase projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
Anda akan melihat:
Created database [example-db]
GoogleSQL
PostgreSQL
Langkah berikutnya adalah menulis data ke database Anda.
Membuat klien database
Sebelum dapat melakukan operasi baca atau tulis, Anda harus membuatClient
:
Anda dapat menganggap Client
sebagai koneksi database: semua interaksi Anda
dengan Spanner harus melalui Client
. Biasanya, Anda membuat Client
saat aplikasi dimulai, lalu Anda menggunakan kembali Client
tersebut untuk membaca, menulis,
dan menjalankan transaksi. Setiap klien menggunakan resource di
Spanner.
Jika membuat beberapa klien di aplikasi yang sama, Anda harus memanggil
Client.Close()
untuk membersihkan
resource klien, termasuk koneksi jaringan, segera setelah tidak
diperlukan lagi.
Baca selengkapnya di referensi
Client
.
Kode dalam contoh sebelumnya juga menunjukkan cara membuat
DatabaseAdminClient
,
yang digunakan untuk membuat database.
Menulis data dengan DML
Anda dapat menyisipkan data menggunakan Bahasa Manipulasi Data (DML) dalam transaksi baca-tulis.
Anda menggunakan metode Update()
untuk mengeksekusi pernyataan DML.
GoogleSQL
PostgreSQL
Jalankan contoh menggunakan argumen dmlwrite
untuk Google SQL dan argumen pgdmlwrite
untuk PostgreSQL:
GoogleSQL
go run snippet.go dmlwrite projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
PostgreSQL
go run snippet.go pgdmlwrite projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
Anda akan melihat:
4 record(s) 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.
Client.Apply()
menerapkan
mutasi secara atomik ke database.
Kode ini menunjukkan cara menulis data menggunakan mutasi:
Jalankan contoh menggunakan argumen write
:
go run snippet.go write projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
Anda akan melihat perintah berhasil dijalankan.
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 library klien Spanner untuk Go.
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 library klien Spanner untuk Go
Selain menjalankan pernyataan SQL di command line, Anda dapat mengeluarkan pernyataan SQL yang sama secara terprogram menggunakan library klien Spanner untuk Go.
Metode dan jenis berikut digunakan untuk menjalankan kueri SQL:Client.Single()
: gunakan ini untuk membaca nilai satu atau beberapa kolom dari satu atau beberapa baris dalam tabel Spanner.Client.Single
menampilkanReadOnlyTransaction
, yang digunakan untuk menjalankan pernyataan baca atau SQL.ReadOnlyTransaction.Query()
: gunakan metode ini untuk menjalankan kueri terhadap database.- Jenis
Statement
: gunakan ini untuk membuat string SQL. - Jenis
Row
: gunakan jenis ini untuk mengakses data yang ditampilkan oleh pernyataan SQL atau panggilan baca.
Berikut cara mengeluarkan kueri dan mengakses data:
Jalankan contoh menggunakan argumen query
.
go run snippet.go query projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
Anda akan melihat hasil berikut:
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
.
GoogleSQL
PostgreSQL
Jalankan contoh menggunakan argumen querywithparameter
untuk Google SQL dan argumen pgqueryparameter
untuk PostgreSQL.
GoogleSQL
go run snippet.go querywithparameter projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
PostgreSQL
go run snippet.go pgqueryparameter projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
Anda akan melihat output yang mirip dengan:
12 Melissa Garcia
Membaca data menggunakan read API
Selain antarmuka SQL Spanner, Spanner juga mendukung antarmuka baca.
GunakanReadOnlyTransaction.Read()
untuk membaca baris dari database. Gunakan KeySet
untuk menentukan kumpulan kunci dan rentang kunci yang akan dibaca.
Berikut cara membaca data:
Jalankan contoh menggunakan argumen read
.
go run snippet.go read projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
Anda akan melihat output yang mirip dengan:
1 1 Total Junk
1 2 Go, Go, Go
2 1 Green
2 2 Forever Hold Your Peace
2 3 Terrified
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 library klien Spanner untuk Go.
Di command line
Gunakan perintah ALTER TABLE
berikut untuk menambahkan kolom baru ke tabel:
GoogleSQL
gcloud spanner databases ddl update example-db --instance=test-instance \
--ddl='ALTER TABLE Albums ADD COLUMN MarketingBudget INT64'
PostgreSQL
gcloud spanner databases ddl update example-db --instance=test-instance \
--ddl='ALTER TABLE Albums ADD COLUMN MarketingBudget BIGINT'
Anda akan melihat:
Schema updating...done.
Menggunakan library klien Spanner untuk Go
GunakanDatabaseAdminClient.UpdateDatabaseDdl()
untuk mengubah skema:
GoogleSQL
PostgreSQL
Jalankan contoh menggunakan argumen addnewcolumn
untuk Google SQL dan argumen pgaddnewcolumn
untuk PostgreSQL.
GoogleSQL
go run snippet.go addnewcolumn projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
PostgreSQL
go run snippet.go pgaddnewcolumn projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
Anda akan melihat:
Added MarketingBudget column.
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 menggunakan argumen update
.
go run snippet.go update projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
Anda juga dapat menjalankan kueri SQL atau panggilan baca untuk mengambil nilai yang baru saja Anda tulis.
Berikut adalah kode untuk menjalankan kueri:
GoogleSQL
PostgreSQL
Untuk menjalankan kueri ini, jalankan contoh menggunakan argumen querynewcolumn
untuk Google SQL dan argumen pgquerynewcolumn
untuk PostgreSQL.
GoogleSQL
go run snippet.go querynewcolumn projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
PostgreSQL
go run snippet.go pgquerynewcolumn 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.
Anda menggunakan metode Update()
untuk mengeksekusi pernyataan DML.
GoogleSQL
PostgreSQL
Jalankan contoh menggunakan argumen dmlwritetxn
.
go run snippet.go dmlwritetxn projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
Anda akan melihat:
Moved 200000 from Album2's MarketingBudget to Album1's.
Menggunakan indeks sekunder
Misalnya, Anda ingin mengambil semua baris Albums
yang memiliki nilai AlbumTitle
dalam rentang tertentu. Anda dapat membaca semua nilai dari kolom AlbumTitle
menggunakan
pernyataan SQL atau panggilan baca, lalu menghapus baris yang tidak memenuhi
kriteria, tetapi melakukan pemindaian tabel lengkap ini mahal, terutama untuk tabel
dengan banyak baris. Sebagai gantinya, Anda dapat mempercepat pengambilan baris saat
menelusuri menurut kolom kunci non-utama dengan membuat
indeks sekunder pada tabel.
Menambahkan indeks sekunder ke tabel yang ada memerlukan pembaruan skema. Seperti update skema lainnya, Spanner mendukung penambahan indeks saat database terus menyalurkan traffic. Spanner otomatis mengisi ulang indeks dengan data yang ada. Pengisian ulang mungkin memerlukan waktu beberapa menit untuk selesai, tetapi Anda tidak perlu membuat database offline atau menghindari penulisan ke tabel yang diindeks selama proses ini. Untuk mengetahui detail selengkapnya, lihat Menambahkan indeks sekunder.
Setelah Anda menambahkan indeks sekunder, Spanner akan otomatis menggunakannya untuk kueri SQL yang cenderung berjalan lebih cepat dengan indeks. Jika menggunakan antarmuka baca, Anda harus menentukan indeks yang ingin digunakan.
Menambahkan indeks sekunder
Anda dapat menambahkan indeks di command line menggunakan gcloud CLI atau secara terprogram menggunakan library klien Spanner untuk Go.
Di command line
Gunakan perintah CREATE INDEX
berikut untuk menambahkan indeks ke database:
gcloud spanner databases ddl update example-db --instance=test-instance \
--ddl='CREATE INDEX AlbumsByAlbumTitle ON Albums(AlbumTitle)'
Anda akan melihat:
Schema updating...done.
Menggunakan library klien Spanner untuk Go
GunakanUpdateDatabaseDdl()
untuk menambahkan indeks:
Menambahkan indeks dapat memerlukan waktu beberapa menit. Setelah indeks ditambahkan, Anda akan melihat:
Added index
Membaca menggunakan indeks
Untuk kueri SQL, Spanner akan otomatis menggunakan indeks yang sesuai. Di antarmuka baca, Anda harus menentukan indeks dalam permintaan.
Untuk menggunakan indeks di antarmuka baca, gunakan ReadOnlyTransaction.ReadUsingIndex()
, yang membaca nol atau lebih baris dari database menggunakan indeks.
Kode berikut mengambil semua kolom AlbumId
dan AlbumTitle
dari
indeks AlbumsByAlbumTitle
.
Jalankan contoh menggunakan argumen readindex
.
go run snippet.go readindex projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
Anda akan melihat:
2 Forever Hold Your Peace
2 Go, Go, Go
1 Green
3 Terrified
1 Total Junk
Menambahkan indeks untuk pembacaan khusus indeks
Anda mungkin telah melihat bahwa contoh pembacaan sebelumnya tidak menyertakan pembacaan
kolom MarketingBudget
. Hal ini karena antarmuka baca Spanner
tidak mendukung kemampuan untuk menggabungkan indeks dengan tabel data untuk mencari nilai
yang tidak disimpan dalam indeks.
Buat definisi alternatif AlbumsByAlbumTitle
yang menyimpan salinan
MarketingBudget
dalam indeks.
Di command line
GoogleSQL
gcloud spanner databases ddl update example-db --instance=test-instance \
--ddl='CREATE INDEX AlbumsByAlbumTitle2 ON Albums(AlbumTitle) STORING (MarketingBudget)
PostgreSQL
gcloud spanner databases ddl update example-db --instance=test-instance \
--ddl='CREATE INDEX AlbumsByAlbumTitle2 ON Albums(AlbumTitle) INCLUDE (MarketingBudget)
Menambahkan indeks dapat memerlukan waktu beberapa menit. Setelah indeks ditambahkan, Anda akan melihat:
Schema updating...done.
Menggunakan library klien Spanner untuk Go
GunakanUpdateDatabaseDdl()
untuk menambahkan indeks dengan klausa STORING
untuk GoogleSQL dan klausa INCLUDE
untuk PostgreSQL:
GoogleSQL
PostgreSQL
Jalankan contoh menggunakan argumen addstoringindex
.
GoogleSQL
go run snippet.go addstoringindex projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
PostgreSQL
go run snippet.go pgaddstoringindex projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
Menambahkan indeks dapat memerlukan waktu beberapa menit. Setelah indeks ditambahkan, Anda akan melihat:
Added storing index
Sekarang Anda dapat menjalankan operasi baca yang mengambil semua kolom AlbumId
, AlbumTitle
, dan
MarketingBudget
dari indeks AlbumsByAlbumTitle2
:
Jalankan contoh menggunakan argumen readstoringindex
.
go run snippet.go readstoringindex projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
Anda akan melihat output yang mirip dengan:
2 Forever Hold Your Peace 300000
2 Go, Go, Go NULL
1 Green NULL
3 Terrified NULL
1 Total Junk 300000
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
konsisten dari histori commit transaksi, sehingga aplikasi Anda selalu mendapatkan
data yang konsisten.
Gunakan jenis ReadOnlyTransaction
untuk menjalankan transaksi hanya baca. Gunakan
Client.ReadOnlyTransaction()
untuk mendapatkan ReadOnlyTransaction
.
Berikut ini cara menjalankan kueri dan melakukan operasi baca dalam transaksi hanya baca yang sama:
Jalankan contoh menggunakan argumen readonlytransaction
.
go run snippet.go readonlytransaction projects/$GCLOUD_PROJECT/instances/test-instance/databases/example-db
Anda akan melihat output yang mirip dengan:
2 2 Forever Hold Your Peace
1 2 Go, Go, Go
2 1 Green
2 3 Terrified
1 1 Total Junk
1 1 Total Junk
1 2 Go, Go, Go
2 1 Green
2 2 Forever Hold Your Peace
2 3 Terrified
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 selanjutnya
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.