Tujuan
Tutorial ini akan memandu Anda melakukan langkah-langkah berikut menggunakan driver database/sql Spanner:
- Membuat instance dan database Spanner.
- Menulis, membaca, dan menjalankan kueri SQL pada data dalam database.
- Memperbarui skema database.
- Mengupdate data menggunakan transaksi baca-tulis.
- Menambahkan 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 Penyiapan, yang mencakup pembuatan dan penetapan project Google Cloud default, mengaktifkan penagihan, mengaktifkan Cloud Spanner API, dan menyiapkan 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 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.gitUbah ke direktori yang berisi kode contoh Spanner:
cd go-sql-spanner/snippets
Membuat instance
Saat pertama kali menggunakan Spanner, Anda harus membuat instance, yaitu alokasi resource yang digunakan oleh database Spanner. Saat membuat instance, Anda memilih konfigurasi instance, yang menentukan tempat data Anda disimpan, serta jumlah node yang akan digunakan, yang menentukan jumlah resource penyajian dan penyimpanan dalam instance Anda.
Lihat Membuat instance
untuk mempelajari cara membuat instance Spanner menggunakan salah satu
metode berikut. Anda dapat memberi nama instance Anda test-instance untuk menggunakannya dengan topik lain dalam dokumen ini yang mereferensikan instance bernama test-instance.
- Google Cloud CLI
- Konsol Google Cloud
- Library klien (C++, C#, Go, Java, Node.js, PHP, Python, Ruby, atau Rust)
Melihat contoh file
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 ini 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 contoh dengan perintah berikut:
GoogleSQL
go run getting_started_guide.go createtables projects/PROJECT_ID/instances/test-instance/databases/example-db
PostgreSQL
go run getting_started_guide.go createtablespg projects/PROJECT_ID/instances/test-instance/databases/example-db
Langkah berikutnya adalah menulis data ke database Anda.
Membuat koneksi
Sebelum dapat melakukan pembacaan atau penulisan, 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 menjalankan pernyataan DML.
GoogleSQL
PostgreSQL
Jalankan contoh dengan perintah berikut:
GoogleSQL
go run getting_started_guide.go dmlwrite projects/PROJECT_ID/instances/test-instance/databases/example-db
PostgreSQL
go run getting_started_guide.go dmlwritepg projects/PROJECT_ID/instances/test-instance/databases/example-db
Hasilnya menunjukkan:
4 records inserted.
Menulis data dengan mutasi
Anda juga dapat menyisipkan data menggunakan mutasi.
Mutation adalah container untuk operasi mutasi. Mutation mewakili urutan penyisipan, pembaruan, dan penghapusan yang diterapkan Spanner secara atomik ke berbagai baris dan tabel 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/PROJECT_ID/instances/test-instance/databases/example-db
PostgreSQL
go run getting_started_guide.go writepg projects/PROJECT_ID/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'
Sintaksis Pipe GoogleSQL
gcloud spanner databases execute-sql example-db --instance=test-instance \
--sql='FROM Albums |> SELECT SingerId, AlbumId, AlbumTitle'
PostgreSQL
gcloud spanner databases execute-sql example-db --instance=test-instance \
--sql='SELECT singer_id, album_id, album_title FROM albums'
Hasilnya menunjukkan:
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
QueryContextdalam structDB: gunakan fungsi ini untuk menjalankan pernyataan SQL yang menampilkan baris, seperti kueri atau pernyataan DML dengan klausaTHEN RETURN. - Struct
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/PROJECT_ID/instances/test-instance/databases/example-db
PostgreSQL
go run getting_started_guide.go querypg projects/PROJECT_ID/instances/test-instance/databases/example-db
Hasilnya menunjukkan:
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 membuat parameter. Kueri parametrik yang dihasilkan dapat di-cache dan digunakan kembali, sehingga 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 posisi dan bernama. ? dalam pernyataan SQL menunjukkan parameter kueri posisi. 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/PROJECT_ID/instances/test-instance/databases/example-db
PostgreSQL
go run getting_started_guide.go querywithparameterpg projects/PROJECT_ID/instances/test-instance/databases/example-db
Hasilnya menunjukkan:
12 Melissa Garcia
Memperbarui skema database
Asumsikan 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 melayani traffic. Pembaruan skema tidak memerlukan penghentian database dan tidak mengunci seluruh tabel atau kolom; Anda dapat terus menulis data ke database selama pembaruan skema. Baca selengkapnya tentang update skema yang didukung dan performa perubahan skema di Membuat update 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/PROJECT_ID/instances/test-instance/databases/example-db
PostgreSQL
go run getting_started_guide.go addcolumnpg projects/PROJECT_ID/instances/test-instance/databases/example-db
Hasilnya menunjukkan:
Added MarketingBudget column.
Menjalankan batch DDL
Sebaiknya jalankan beberapa modifikasi skema dalam satu batch. Gunakan perintah START BATCH DDL dan RUN BATCH untuk menjalankan 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/PROJECT_ID/instances/test-instance/databases/example-db
PostgreSQL
go run getting_started_guide.go ddlbatchpg projects/PROJECT_ID/instances/test-instance/databases/example-db
Hasilnya menunjukkan:
Added Venues and Concerts tables.
Menulis data ke kolom baru
Kode berikut menulis data ke kolom baru. Ini menetapkan MarketingBudget ke
100000 untuk row key Albums(1, 1) dan ke 500000 untuk row key
Albums(2, 2).
GoogleSQL
PostgreSQL
Jalankan contoh dengan perintah berikut:
GoogleSQL
go run getting_started_guide.go update projects/PROJECT_ID/instances/test-instance/databases/example-db
PostgreSQL
go run getting_started_guide.go updatepg projects/PROJECT_ID/instances/test-instance/databases/example-db
Hasilnya menunjukkan:
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/PROJECT_ID/instances/test-instance/databases/example-db
PostgreSQL
go run getting_started_guide.go querymarketingbudgetpg projects/PROJECT_ID/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/PROJECT_ID/instances/test-instance/databases/example-db
PostgreSQL
go run getting_started_guide.go writewithtransactionusingdmlpg projects/PROJECT_ID/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/PROJECT_ID/instances/test-instance/databases/example-db
PostgreSQL
go run getting_started_guide.go tagspg projects/PROJECT_ID/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 ini menunjukkan 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/PROJECT_ID/instances/test-instance/databases/example-db
PostgreSQL
go run getting_started_guide.go readonlytransactionpg projects/PROJECT_ID/instances/test-instance/databases/example-db
Hasilnya menunjukkan:
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 berpartisi dan Data Boost
API partitionQuery
membagi kueri menjadi bagian-bagian yang lebih kecil, atau partisi, dan menggunakan beberapa
mesin untuk mengambil partisi secara paralel. Setiap partisi diidentifikasi oleh 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 ke workload yang ada di instance Spanner yang disediakan. Data Boost hanya mendukung kueri berpartisi.
Contoh berikut menunjukkan cara menjalankan kueri yang dipartisi dengan Data Boost menggunakan driver database/sql:
GoogleSQL
PostgreSQL
Jalankan contoh dengan perintah berikut:
GoogleSQL
go run getting_started_guide.go databoost projects/PROJECT_ID/instances/test-instance/databases/example-db
PostgreSQL
go run getting_started_guide.go databoostpg projects/PROJECT_ID/instances/test-instance/databases/example-db
DML yang dipartisi
Bahasa Pengolahan Data (DML) yang Dipartisi 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/PROJECT_ID/instances/test-instance/databases/example-db
PostgreSQL
go run getting_started_guide.go pdmlpg projects/PROJECT_ID/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 akan tetap dikenai biaya untuk instance tersebut).
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 Anda hapus.
Di halaman Database details, klik Delete.
Konfirmasi bahwa Anda ingin menghapus database, lalu klik Delete.
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 Delete.
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.