Halaman ini menjelaskan cara melakukan pembacaan di Spanner di luar konteks transaksi hanya baca dan baca-tulis. Jika salah satu hal berikut berlaku, Anda harus membaca halaman Transaksi:
Jika Anda perlu menulis, bergantung pada nilai satu atau beberapa pembacaan, Anda harus menjalankan pembacaan sebagai bagian dari transaksi baca-tulis. Untuk mengetahui informasi selengkapnya, lihat transaksi baca-tulis.
Jika Anda melakukan beberapa panggilan baca yang memerlukan tampilan data yang konsisten, Anda harus menjalankan pembacaan sebagai bagian dari transaksi hanya baca. Untuk mengetahui informasi selengkapnya, lihat transaksi hanya baca.
Jenis bacaan
Spanner memungkinkan Anda menentukan seberapa baru data yang harus ada saat Anda membaca data dengan menawarkan dua jenis pembacaan:
- Pembacaan yang andal adalah pembacaan pada stempel waktu saat ini dan dijamin akan melihat semua data yang telah di-commit hingga awal pembacaan ini. Spanner secara default menggunakan operasi baca yang kuat untuk melayani permintaan baca.
- Pembacaan basi dibaca pada stempel waktu di masa lalu. Jika aplikasi Anda sensitif terhadap latensi tetapi toleran terhadap data yang sudah tidak berlaku, maka pembacaan data yang sudah tidak berlaku dapat memberikan manfaat performa.
Untuk memilih jenis pembacaan yang Anda inginkan, tetapkan batas stempel waktu pada permintaan pembacaan. Gunakan praktik terbaik berikut saat memilih batas stempel waktu:
Pilih bacaan yang kuat jika memungkinkan. Ini adalah batas stempel waktu default untuk pembacaan Spanner, termasuk transaksi hanya baca. Pembacaan kuat dijamin akan mengamati efek semua transaksi yang di-commit sebelum dimulainya operasi, terlepas dari replika mana yang menerima pembacaan. Oleh karena itu, pembacaan kuat membuat kode aplikasi lebih sederhana dan aplikasi lebih tepercaya. Baca selengkapnya tentang properti konsistensi Spanner di TrueTime and External Consistency.
Secara opsional, untuk mengurangi latensi baca untuk transaksi hanya baca yang memerlukan konsistensi kuat, Anda dapat memberikan status region sewa baca kepada region non-leader, baca-tulis, atau hanya baca. Untuk melakukannya, gunakan lease baca Spanner. Region sewa baca membantu database Anda mengurangi latensi operasi baca yang kuat di instance dual-region atau multi-region. Namun, penulisan mengalami latensi yang lebih tinggi saat Anda menggunakan sewa baca.
Jika latensi membuat pembacaan kuat tidak dapat dilakukan dalam beberapa situasi, gunakan pembacaan tidak berlaku (keterbatasan tidak berlaku atau tidak berlaku persis) untuk meningkatkan performa di tempat yang tidak memerlukan pembacaan yang seakurat mungkin. Seperti yang dijelaskan di halaman Replikasi, 15 detik adalah nilai tidak berlaku yang wajar untuk digunakan agar performa baik.
Membaca data dengan peran database
Jika Anda adalah pengguna kontrol akses terperinci, Anda harus memilih peran database untuk menjalankan pernyataan dan kueri SQL, serta melakukan operasi baris pada database. Pilihan peran Anda akan tetap ada selama sesi Anda hingga Anda mengubah peran.
Untuk mengetahui petunjuk tentang cara melakukan pembacaan dengan peran database, lihat Mengakses database dengan kontrol akses terperinci.
Metode baca tunggal
Spanner mendukung metode baca tunggal (yaitu, baca di luar konteks transaksi) di database untuk:
- Mengeksekusi pembacaan sebagai pernyataan kueri SQL atau menggunakan read API Spanner.
- Melakukan pembacaan yang kuat dari satu baris atau beberapa baris dalam tabel.
- Melakukan pembacaan basi dari satu baris atau beberapa baris dalam tabel.
- Membaca dari satu baris atau beberapa baris dalam indeks sekunder.
Jika Anda ingin merutekan pembacaan tunggal ke replika atau region tertentu dalam konfigurasi instance multi-region atau konfigurasi regional kustom dengan region hanya baca opsional, lihat Pembacaan terarah.
Bagian berikut menjelaskan cara menggunakan metode baca menggunakan library klien Spanner.
Menjalankan kueri
Berikut ini menunjukkan cara menjalankan pernyataan kueri SQL terhadap database.
GoogleSQL
C++
Gunakan ExecuteQuery() untuk menjalankan pernyataan kueri SQL terhadap database.
C#
Gunakan ExecuteReaderAsync() untuk membuat kueri database.
Go
Gunakan Client.Single().Query untuk membuat kueri database.
Java
Gunakan ReadContext.executeQuery untuk membuat kueri database.
Node.js
Gunakan Database.run untuk membuat kueri database.
PHP
Gunakan Database::execute untuk membuat kueri database.
Python
Gunakan Database.execute_sql untuk membuat kueri database.
Ruby
Gunakan Client#execute untuk membuat kueri database.
Lihat referensi Sintaksis Kueri dan Fungsi dan Operator SQL saat membuat pernyataan SQL.
Lakukan pembacaan yang kuat
Berikut ini menunjukkan cara melakukan pembacaan kuat nol atau beberapa baris dari database.
GoogleSQL
C++
Kode untuk membaca data sama dengan contoh sebelumnya untuk mengkueri Spanner dengan menjalankan kueri SQL.
C#
Kode untuk membaca data sama dengan contoh sebelumnya untuk mengkueri Spanner dengan menjalankan kueri SQL.
Go
Gunakan Client.Single().Read untuk membaca baris dari database.
Contoh ini menggunakan AllKeys untuk menentukan kumpulan kunci atau rentang kunci yang akan dibaca.
Java
Gunakan ReadContext.read untuk membaca baris dari database.
Contoh ini menggunakan KeySet untuk menentukan kumpulan kunci atau rentang kunci yang akan dibaca.
Node.js
Gunakan Table.read untuk membaca baris dari database.
Contoh ini menggunakan keySet untuk menentukan kumpulan kunci atau rentang kunci yang akan dibaca.
PHP
Gunakan Database::read untuk membaca baris dari database.
Contoh ini menggunakan keySet untuk menentukan kumpulan kunci atau rentang kunci yang akan dibaca.
Python
Gunakan Database.read untuk membaca baris dari database.
Contoh ini menggunakan KeySet untuk menentukan kumpulan kunci atau rentang kunci yang akan dibaca.
Ruby
Gunakan Client#read untuk membaca baris dari database.
Melakukan pembacaan yang tidak berlaku
Kode contoh berikut menunjukkan cara melakukan stale read nol atau lebih baris dari database menggunakan batas stempel waktu exact-staleness. Untuk mengetahui petunjuk tentang cara melakukan stale read menggunakan batas stempel waktu bounded-staleness, lihat catatan setelah kode contoh. Lihat Batas stempel waktu untuk mengetahui informasi selengkapnya tentang berbagai jenis batas stempel waktu yang tersedia.
GoogleSQL
C++
Gunakan ExecuteQuery() dengan MakeReadOnlyTransaction() dan
Transaction::ReadOnlyOptions() untuk melakukan pembacaan yang tidak terbaru.
C#
Gunakan metode BeginReadOnlyTransactionAsync pada connection dengan nilai TimestampBound.OfExactStaleness() yang ditentukan untuk mengkueri database.