Halaman ini menjelaskan cara kerja Spanner dengan kunci utama dan penawaran strategi migrasi kunci utama untuk kasus penggunaan berikut:
- Memigrasikan database kunci UUID
- Memigrasikan database instance tunggal dengan kunci berurutan
- Memigrasikan database kunci berurutan dengan dukungan cutover live
- Memigrasikan database kunci berurutan dengan dependensi logika aplikasi
Pendekatan umum untuk kunci utama adalah menggunakan kunci surrogate seperti penambahan otomatis angka. Kunci utama tersebut memberikan fleksibilitas untuk mengoptimalkan kunci Anda saat ini dan di masa mendatang, meskipun logika bisnis Anda berubah. Dalam database instance tunggal di bervolume rendah, tombol berurutan berperforma baik. Namun, dalam sistem terdistribusi, kunci berurutan tidak diskalakan dengan baik.
Kunci utama berurutan di Spanner
Di Spanner, setiap tabel memiliki kunci utama yang terdiri dari satu atau beberapa kolom tabel. Kunci utama tabel Anda mengidentifikasi setiap baris secara unik dalam tabel. Spanner menggunakan kunci utama untuk mendistribusikan kelompok baris, yang disebut bagian, di seluruh node komputasi dalam instance Spanner. Ini adalah yang disebut sharding rentang dan memungkinkan Spanner untuk memparalelkan kueri dan penskalaan.
Saat Anda memiliki baris dengan {i>primary key <i}yang nilainya berdekatan, seperti kunci inkremental otomatis monotonik, mereka cenderung mendarat di bagian yang sama. Ini dapat membuat hotspot, tempat pemisahan dapat menggunakan semua komputasi dan memori yang tersedia Google Cloud Platform. {i>Hotspot<i} dapat menyebabkan peningkatan latensi, yang berpotensi menyebabkan waktu tunggu habis dan transaksi yang dibatalkan.
Untuk memanfaatkan skalabilitas Spanner dan menghindari hotspot, Spanner menawarkan solusi bawaan sebagai alternatif untuk penambahan kunci utama secara otomatis.
Rekomendasi {i>primary key<i}
Rekomendasi default untuk kunci utama di Spanner adalah penggunaan Nilai Universally Unique Identifier Versi 4 (UUIDv4). UUID adalah ID 128-bit yang menggunakan data acak 122 bit. Nilai UUIDv4 memiliki rentang nilai yang sangat besar dan secara efektif unik di mana pun mereka dihasilkan. Hal ini membuat mereka kandidat yang baik untuk kunci utama non-{i>hotspotting<i} di Spanner.
Anda mungkin ingin menggunakan kunci utama integer karena mereka mengambil lebih sedikit ruang dan mengurangi kompleksitas perubahan aplikasi yang harus Anda lakukan. Anda dapat menggunakan urutan bit-reversed untuk menghasilkan nilai kunci utama unik yang secara seragam didistribusikan ke seluruh ruang bilangan bulat 64-bit positif.
Untuk informasi selengkapnya tentang memilih untuk mencegah hotspot, lihat Praktik terbaik desain skema.
Strategi migrasi
Bergantung pada kasus penggunaan dan kebutuhan aplikasi, Anda dapat men-deploy kunci utama strategi migrasi. Setiap strategi migrasi berikut:
- Pastikan fidelitas dan ketepatan kunci utama yang dimigrasikan.
- Minimalkan perubahan aplikasi downstream, seperti perubahan jenis atau nilai kunci utama.
- Implementasikan praktik terbaik Spanner untuk performa dan skalabilitas.
- Spanner hanya mengubah metode terkait cara data baru dibuat, dan tidak memengaruhi data yang sudah ada.
Memigrasikan database kunci UUID
Pertimbangkan bahwa Anda bermigrasi dari {i>database<i} yang menggunakan Kunci utama UUID ke Spanner. Mengonfigurasi kunci UUID yang ada sebagai string dalam database sumber, lalu mengimpornya ke Spanner sebagaimana adanya. Nilai UUID, khususnya v4, secara efektif unik di mana pun mereka dihasilkan.
Anda dapat menggunakan
Fungsi GENERATE_UUID()
(GoogleSQL,
PostgreSQL)
di Spanner untuk memigrasikan database kunci UUID.
Untuk mendapatkan petunjuk tentang migrasi database kunci UUID, lihat Memigrasikan kolom kunci UUID.
Memigrasikan database instance tunggal yang memiliki kunci berurutan
Pertimbangkan bahwa Anda bermigrasi dari database instance tunggal yang menggunakan kunci monoton berurutan,
seperti
AUTO_INCREMENT
di MySQL,
SERIAL
di PostgreSQL, atau standar
Ketik IDENTITY
di SQL Server atau Oracle.
Konfigurasi objek SEQUENCE
Spanner untuk melewati nilai dalam rentang
kunci yang ada dan membuat
kunci baru yang {i>reversed<i}. Kunci yang dibalikkan bit dibuat
oleh objek SEQUENCE
Spanner selalu lebih besar dari nol,
dan didistribusikan secara seragam ke seluruh ruang bilangan bulat 64-bit positif.
Untuk mendapatkan petunjuk tentang cara memigrasikan database yang memiliki kunci berurutan, lihat Migrasi kunci utama berurutan yang dibuat otomatis.
Memigrasikan database kunci berurutan yang memiliki dukungan cutover live
Pertimbangkan bahwa Anda bermigrasi dari database instance tunggal yang menggunakan kunci monoton berurutan ke Spanner dan mendukung skenario replikasi, Anda ingin melakukan migrasi sistem {i>database<i} secara langsung.
Mengonfigurasi objek SEQUENCE
Spanner untuk melewati seluruh rentang nilai
kunci yang ada di database sumber Anda dan membuat kunci baru yang dibalik
di Spanner. Kunci yang dibalik bit yang dibuat oleh Spanner
Objek SEQUENCE
selalu lebih besar dari nol, tetapi tidak diurutkan.
Untuk mendapatkan petunjuk tentang cara memigrasikan database yang memiliki dukungan migrasi langsung, lihat Gunakan Spanner dan database sumber Anda.
Memigrasikan database kunci berurutan yang memiliki dependensi logika aplikasi
Pertimbangkan bahwa Anda bermigrasi dari database yang menggunakan kunci monotonik berurutan dan aplikasi Anda logika bergantung pada urutan kunci utama untuk menentukan keterkinian atau urutan data yang baru dibuat.
Buat kunci komposit yang menggabungkan nilai yang didistribusikan secara seragam, seperti ID shard atau hash, sebagai komponen pertama dan nomor urut sebagai komponen kedua. Cara ini akan mempertahankan nilai kunci yang diurutkan, tanpa menyebabkan {i>hotspot<i} dalam skala besar.
Untuk petunjuk tentang cara memigrasikan database kunci berurutan dengan logika aplikasi dependensi, lihat Memigrasikan kunci utama Anda sendiri.
Langkah selanjutnya
- Untuk melihat alur kerja migrasi yang mendetail, lihat Memigrasikan kunci utama.