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 default Google Cloud , 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.
Lihat Membuat instance
untuk mempelajari cara membuat instance Spanner menggunakan salah satu
metode berikut. Anda dapat memberi nama instance test-instance
untuk menggunakannya dengan
topik lain dalam dokumen ini yang mereferensikan instance bernama test-instance
.
- Google Cloud CLI
- Google Cloud console
- Library klien (C++, C#, Go, Java, Node.js, PHP, Python, atau Ruby)
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
GoogleSQL
gcloud spanner databases create example-db --instance=test-instance
PostgreSQL
gcloud spanner databases create example-db --instance=test-instance \
--database-dialect=POSTGRESQL
Anda akan melihat:
Creating database...done.
Buat tabel
Kode berikut membuat dua tabel dalam database.
GoogleSQL
PostgreSQL
Jalankan sampel dengan perintah berikut:
GoogleSQL
go run getting_started_guide.go createtables projects/GCLOUD_PROJECT/instances/test-instance/databases/example-db
PostgreSQL
go run getting_started_guide.go createtablespg projects/GCLOUD_PROJECT/instances/test-instance/databases/example-db
Langkah selanjutnya 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.
GoogleSQL
PostgreSQL
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.
GoogleSQL
PostgreSQL
Jalankan sampel dengan perintah berikut:
GoogleSQL
go run getting_started_guide.go dmlwrite projects/GCLOUD_PROJECT/instances/test-instance/databases/example-db
PostgreSQL
go run getting_started_guide.go dmlwritepg projects/GCLOUD_PROJECT/instances/test-instance/databases/example-db
Hasilnya menampilkan:
4 records inserted.
Menulis data dengan mutasi
Anda juga dapat memasukkan 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:
GoogleSQL
PostgreSQL
Jalankan contoh berikut menggunakan argumen write
:
GoogleSQL
go run getting_started_guide.go write projects/GCLOUD_PROJECT/instances/test-instance/databases/example-db
PostgreSQL
go run getting_started_guide.go writepg 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
:
GoogleSQL
gcloud spanner databases execute-sql example-db --instance=test-instance \
--sql='SELECT SingerId, AlbumId, AlbumTitle FROM Albums'
PostgreSQL
gcloud spanner databases execute-sql example-db --instance=test-instance \
--sql='SELECT singer_id, album_id, album_title FROM albums'
Hasilnya menampilkan:
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
:
GoogleSQL
PostgreSQL
Jalankan contoh dengan perintah berikut:
GoogleSQL
go run getting_started_guide.go query projects/GCLOUD_PROJECT/instances/test-instance/databases/example-db
PostgreSQL
go run getting_started_guide.go querypg 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:
GoogleSQL
PostgreSQL
Jalankan contoh dengan perintah berikut:
GoogleSQL
go run getting_started_guide.go querywithparameter projects/GCLOUD_PROJECT/instances/test-instance/databases/example-db
PostgreSQL
go run getting_started_guide.go querywithparameterpg 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 penonaktifan database 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:
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 marketing_budget bigint'
Anda akan melihat:
Schema updating...done.
Menggunakan driver database/SQL Spanner
Gunakan fungsiExecContext
untuk
mengubah skema:
GoogleSQL
PostgreSQL
Jalankan contoh dengan perintah berikut:
GoogleSQL
go run getting_started_guide.go addcolumn projects/GCLOUD_PROJECT/instances/test-instance/databases/example-db
PostgreSQL
go run getting_started_guide.go addcolumnpg 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:
GoogleSQL
PostgreSQL
Jalankan contoh dengan perintah berikut:
GoogleSQL
go run getting_started_guide.go ddlbatch projects/GCLOUD_PROJECT/instances/test-instance/databases/example-db
PostgreSQL
go run getting_started_guide.go ddlbatchpg 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 menyetel MarketingBudget
ke
100000
untuk baris yang dikunci oleh Albums(1, 1)
dan ke 500000
untuk baris yang dikunci
oleh Albums(2, 2)
.
GoogleSQL
PostgreSQL
Jalankan contoh dengan perintah berikut:
GoogleSQL
go run getting_started_guide.go update projects/GCLOUD_PROJECT/instances/test-instance/databases/example-db
PostgreSQL
go run getting_started_guide.go updatepg 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:
GoogleSQL
PostgreSQL
Untuk menjalankan kueri ini, jalankan perintah berikut:
GoogleSQL
go run getting_started_guide.go querymarketingbudget projects/GCLOUD_PROJECT/instances/test-instance/databases/example-db
PostgreSQL
go run getting_started_guide.go querymarketingbudgetpg 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.
GoogleSQL
PostgreSQL
Jalankan contoh dengan perintah berikut:
GoogleSQL
go run getting_started_guide.go writewithtransactionusingdml projects/GCLOUD_PROJECT/instances/test-instance/databases/example-db
PostgreSQL
go run getting_started_guide.go writewithtransactionusingdmlpg 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:
GoogleSQL
PostgreSQL
Jalankan contoh dengan perintah berikut:
GoogleSQL
go run getting_started_guide.go tags projects/GCLOUD_PROJECT/instances/test-instance/databases/example-db
PostgreSQL
go run getting_started_guide.go tagspg 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
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:
GoogleSQL
PostgreSQL
Jalankan contoh dengan perintah berikut:
GoogleSQL
go run getting_started_guide.go readonlytransaction projects/GCLOUD_PROJECT/instances/test-instance/databases/example-db
PostgreSQL
go run getting_started_guide.go readonlytransactionpg 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:
GoogleSQL
PostgreSQL
Jalankan contoh dengan perintah berikut:
GoogleSQL
go run getting_started_guide.go databoost projects/GCLOUD_PROJECT/instances/test-instance/databases/example-db
PostgreSQL
go run getting_started_guide.go databoostpg 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.
GoogleSQL
PostgreSQL
Jalankan contoh dengan perintah berikut:
GoogleSQL
go run getting_started_guide.go pdml projects/GCLOUD_PROJECT/instances/test-instance/databases/example-db
PostgreSQL
go run getting_started_guide.go pdmlpg 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 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.