Tujuan
Tutorial ini memandu Anda melalui langkah-langkah berikut menggunakan library klien Spanner untuk PHP:
- 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.
Secara khusus, pastikan Anda menjalankan gcloud auth
application-default login
untuk menyiapkan lingkungan pengembangan lokal dengan kredensial
autentikasi.
Menyiapkan lingkungan PHP lokal Anda
Ikuti langkah-langkah di Akun layanan untuk menyiapkan akun layanan sebagai Kredensial Default Aplikasi Anda. Dengan mengikuti langkah-langkah tersebut, Anda akan mendapatkan file kunci akun layanan (dalam JSON) dan variabel lingkungan
GOOGLE_APPLICATION_CREDENTIALSyang akan memungkinkan Anda mengautentikasi ke Spanner API.Instal komponen berikut di mesin pengembangan Anda jika belum diinstal:
Clone repositori aplikasi contoh ke komputer lokal Anda:
git clone https://github.com/GoogleCloudPlatform/php-docs-samplesAtau, Anda dapat mendownload sampel sebagai file ZIP dan mengekstraknya.
Ubah ke direktori yang berisi kode contoh Spanner:
cd php-docs-samples/spannerInstal dependensi:
composer installTindakan ini akan menginstal library klien Spanner untuk PHP, yang dapat Anda tambahkan ke project apa pun dengan menjalankan
composer require google/cloud-spanner.
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 dalam 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
- Konsol Google Cloud
- 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 PHP.
Lihat fungsi di src/create_database.php dan
src/add_column.php, yang menunjukkan cara membuat database dan mengubah skema database. Data menggunakan contoh skema yang ditampilkan di halaman
Skema dan model data.
Buat database
GoogleSQL
php src/create_database.php test-instance example-db
PostgreSQL
php src/pg_create_database.php test-instance example-db
Anda akan melihat:
Created database example-db on instance test-instance
GoogleSQL
PostgreSQL
Langkah selanjutnya adalah menulis data ke database Anda.
Membuat klien database
Untuk melakukan operasi baca dan tulis, Anda perlu mendapatkan instanceGoogle\Cloud\Spanner\Database.
Anda dapat menganggap Database sebagai koneksi database: semua interaksi Anda dengan Spanner harus melalui Database. Biasanya Anda membuat Database
saat aplikasi Anda dimulai, lalu Anda menggunakan kembali Database tersebut untuk membaca, menulis,
dan mengeksekusi transaksi. Setiap klien menggunakan resource di Spanner.
Jika Anda membuat beberapa klien di aplikasi yang sama, Anda harus memanggil
Database::close
untuk membersihkan resource klien, termasuk koneksi jaringan, segera setelah
tidak lagi diperlukan.
Baca selengkapnya dalam referensi Database.
Menulis data dengan DML
Anda dapat menyisipkan data menggunakan Bahasa Pengolahan Data (DML) dalam transaksi baca-tulis.
Anda menggunakan metode executeUpdate() untuk mengeksekusi pernyataan DML.
Jalankan file contoh src/write_data_with_dml.php.
php src/write_data_with_dml.php test-instance example-db
Anda akan melihat:
Inserted 4 row(s).
Menulis data dengan mutasi
Anda juga dapat memasukkan data menggunakan mutasi.
Anda menulis data menggunakan
metode Database::insertBatch. insertBatch menambahkan baris baru ke tabel. Semua penyisipan dalam satu batch diterapkan secara atomik.
Kode ini menunjukkan cara menulis data menggunakan mutasi:
Jalankan file contoh src/insert_data.php.
php src/insert_data.php test-instance example-db
Anda akan melihat:
Inserted data.
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 PHP.
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 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 library klien Spanner untuk PHP
Selain menjalankan pernyataan SQL di command line, Anda dapat mengeluarkan pernyataan SQL yang sama secara terprogram menggunakan library klien Spanner untuk PHP.
GunakanDatabase::execute()
untuk menjalankan kueri SQL.
Berikut cara mengeluarkan kueri dan mengakses data:
Jalankan file contoh src/query_data.php.
php src/query_data.php test-instance example-db
Anda akan melihat hasil berikut:
SingerId: 2, AlbumId: 2, AlbumTitle: Forever Hold Your Peace
SingerId: 1, AlbumId: 2, AlbumTitle: Go, Go, Go
SingerId: 2, AlbumId: 1, AlbumTitle: Green
SingerId: 2, AlbumId: 3, AlbumTitle: Terrified
SingerId: 1, AlbumId: 1, AlbumTitle: Total Junk
Hasil Anda tidak harus dalam urutan ini. Jika Anda perlu memastikan
pengurutan hasil, gunakan klausa ORDER BY, seperti yang didokumentasikan dalam
praktik terbaik SQL.
Membuat kueri menggunakan parameter SQL
Jika aplikasi Anda memiliki kueri yang sering dieksekusi, 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.
Jalankan file contoh src/query_data_with_parameter.php.
php src/query_data_with_parameter.php test-instance example-db
Anda akan melihat hasil berikut:
SingerId: 12, FirstName: Melissa, LastName: Garcia
Membaca data menggunakan read API
Selain antarmuka SQL Spanner, Spanner juga mendukung antarmuka baca.
Gunakan Database::read()
untuk membaca baris dari database. Gunakan objek KeySet untuk menentukan kumpulan
kunci dan rentang kunci yang akan dibaca.
Berikut cara membaca data:
Jalankan sampel di file read_data.php.
php read_data.php test-instance example-db
Anda akan melihat output yang mirip dengan:
SingerId: 1, AlbumId: 1, AlbumTitle: Total Junk
SingerId: 1, AlbumId: 2, AlbumTitle: Go, Go, Go
SingerId: 2, AlbumId: 1, AlbumTitle: Green
SingerId: 2, AlbumId: 2, AlbumTitle: Forever Hold your Peace
SingerId: 2, AlbumId: 3, AlbumTitle: Terrified
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. Update skema tidak memerlukan database
offline dan tidak mengunci seluruh tabel atau kolom; Anda dapat terus
menulis data ke database selama update 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 Spanner client library untuk PHP.
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 PHP
Gunakan Database::updateDdl
untuk mengubah skema:
Jalankan file contoh src/add_column.php.
php src/add_column.php test-instance example-db
Anda akan melihat:
Added the MarketingBudget column.
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).
Jalankan file contoh src/update_data.php.
php src/update_data.php test-instance example-db
Anda akan melihat:
Updated data.
Anda juga dapat menjalankan kueri SQL atau panggilan baca untuk mengambil nilai yang baru saja Anda tulis.
Berikut kode untuk menjalankan kueri:
Untuk menjalankan kueri ini, jalankan file contoh src/query-data-with-new-column.php.
php src/query_data_with_new_column.php test-instance example-db
Anda akan melihat:
SingerId: 1, AlbumId: 1, MarketingBudget: 100000
SingerId: 1, AlbumId: 2, MarketingBudget: 0
SingerId: 2, AlbumId: 1, MarketingBudget: 0
SingerId: 2, AlbumId: 2, MarketingBudget: 500000
SingerId: 2, AlbumId: 3, MarketingBudget: 0
Memperbarui data
Anda dapat memperbarui data menggunakan DML dalam transaksi baca-tulis.
Anda menggunakan metode executeUpdate() untuk mengeksekusi pernyataan DML.
Jalankan file contoh src/write_data_with_dml_transaction.php.
php src/write_data_with_dml_transaction.php test-instance example-db
Anda akan melihat:
Transaction complete.
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 pemindaian tabel lengkap ini mahal, terutama untuk tabel
dengan banyak baris. Sebagai gantinya, Anda dapat mempercepat pengambilan baris saat
mencari menurut kolom kunci non-primer 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 melayani traffic. Spanner akan otomatis mengisi ulang indeks dengan data yang ada. Pengisian ulang mungkin memerlukan waktu beberapa menit untuk diselesaikan, tetapi Anda tidak perlu menghentikan database 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 kemungkinan akan berjalan lebih cepat dengan indeks tersebut. 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 PHP.
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 PHP
Gunakan Database::updateDdl
untuk menambahkan indeks:
Jalankan file contoh src/create_index.php.
php src/create_index.php test-instance example-db
Menambahkan indeks dapat memerlukan waktu beberapa menit. Setelah indeks ditambahkan, Anda akan melihat:
Added the AlbumsByAlbumTitle index.
Membaca menggunakan indeks
Untuk kueri SQL, Spanner otomatis menggunakan indeks yang sesuai. Di antarmuka baca, Anda harus menentukan indeks dalam permintaan.
Untuk menggunakan indeks di antarmuka baca, gunakan metode
Database::read.
Jalankan file contoh src/read_data_with_index.php.
php src/read_data_with_index.php test-instance example-db
Anda akan melihat:
AlbumId: 2, AlbumTitle: Forever Hold your Peace
AlbumId: 2, AlbumTitle: Go, Go, Go
AlbumId: 1, AlbumTitle: Green
AlbumId: 3, AlbumTitle: Terrified
AlbumId: 1, AlbumTitle: Total Junk
Menambahkan indeks untuk pembacaan khusus indeks
Anda mungkin telah memperhatikan bahwa contoh baca sebelumnya tidak menyertakan pembacaan
kolom MarketingBudget. Hal ini karena antarmuka baca Spanner
tidak mendukung kemampuan untuk menggabungkan indeks dengan tabel data guna 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 PHP
GunakanDatabase::updateDdl
untuk menambahkan indeks dengan klausa STORING:
Jalankan file contoh src/create_storing_index.php.
php src/create_storing_index.php test-instance example-db
Anda akan melihat:
Added the AlbumsByAlbumTitle2 index.
Sekarang Anda dapat menjalankan pembacaan yang mengambil semua kolom AlbumId, AlbumTitle, dan MarketingBudget dari indeks AlbumsByAlbumTitle2:
Jalankan file contoh src/read_data_with_storing_index.php.
php src/read_data_with_storing_index.php test-instance example-db
Anda akan melihat output yang mirip dengan:
AlbumId: 2, AlbumTitle: Forever Hold your Peace, MarketingBudget: 300000
AlbumId: 2, AlbumTitle: Go, Go, Go, MarketingBudget: 0
AlbumId: 1, AlbumTitle: Green, MarketingBudget: 0
AlbumId: 3, AlbumTitle: Terrified, MarketingBudget: 0
AlbumId: 1, AlbumTitle: Total Junk, MarketingBudget: 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
yang konsisten dari histori commit transaksi, sehingga aplikasi Anda selalu mendapatkan
data yang konsisten.
Gunakan objek Snapshot
untuk menjalankan transaksi hanya baca. Gunakan metode
Database::snapshot
untuk mendapatkan objek Snapshot.
Berikut cara menjalankan kueri dan melakukan pembacaan dalam transaksi hanya baca yang sama:
Jalankan file contoh src/read_only_transaction.php.
php src/read_only_transaction.php test-instance example-db
Anda akan melihat output yang mirip dengan:
Results from first read:
SingerId: 2, AlbumId: 2, AlbumTitle: Forever Hold Your Peace
SingerId: 1, AlbumId: 2, AlbumTitle: Go, Go, Go
SingerId: 2, AlbumId: 1, AlbumTitle: Green
SingerId: 2, AlbumId: 3, AlbumTitle: Terrified
SingerId: 1, AlbumId: 1, AlbumTitle: Total Junk
Results from second read:
SingerId: 1, AlbumId: 1, AlbumTitle: Total Junk
SingerId: 1, AlbumId: 2, AlbumTitle: Go, Go, Go
SingerId: 2, AlbumId: 1, AlbumTitle: Green
SingerId: 2, AlbumId: 2, AlbumTitle: Forever Hold Your Peace
SingerId: 2, AlbumId: 3, AlbumTitle: Terrified
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 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 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 lebih lanjut Praktik terbaik desain skema Spanner.