Halaman ini menjelaskan cara kerja Spanner dengan kunci utama dan menawarkan 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 transisi langsung
- Memigrasikan database kunci berurutan dengan dependensi logika aplikasi
Pendekatan umum untuk kunci utama adalah menggunakan kunci pengganti seperti angka penambahan otomatis. Kunci utama tersebut memberikan fleksibilitas untuk mengoptimalkan kunci Anda sekarang dan di masa mendatang, meskipun logika bisnis Anda berubah. Dalam database instance tunggal dengan volume rendah, kunci 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 grup baris, yang disebut bagian, di seluruh node komputasi dalam instance Spanner. Hal ini disebut sharding rentang dan memungkinkan Spanner memparalelkan kueri dan menskalakan.
Jika Anda memiliki baris dengan kunci utama yang nilainya berdekatan, seperti kunci penambahan otomatis monoton, baris tersebut cenderung berada di bagian yang sama. Hal ini dapat membuat hotspot, tempat pemisahan dapat menggunakan semua resource komputasi dan memori yang tersedia. Hotspot dapat menyebabkan peningkatan latensi, yang berpotensi menyebabkan waktu tunggu habis dan transaksi dibatalkan.
Untuk memanfaatkan skalabilitas Spanner dan menghindari hotspot, Spanner menawarkan solusi bawaan sebagai alternatif untuk kunci utama yang bertambah otomatis.
Rekomendasi kunci utama
Rekomendasi default untuk kunci utama di Spanner adalah menggunakan 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 bersifat unik secara efektif, terlepas dari tempat nilai tersebut dibuat. Hal ini menjadikannya kandidat yang baik untuk kunci utama non-hotspotting di Spanner.
Sebaiknya gunakan kunci utama bilangan bulat karena memerlukan lebih sedikit ruang dan mengurangi kompleksitas perubahan aplikasi yang harus Anda lakukan. Anda dapat menggunakan urutan bit terbalik positif untuk menghasilkan nilai kunci utama unik yang didistribusikan secara merata di seluruh ruang bilangan bulat 64-bit positif.
Untuk mengetahui informasi selengkapnya tentang cara memilih kunci utama untuk mencegah hotspot, lihat Praktik terbaik desain skema.
Strategi migrasi
Bergantung pada kasus penggunaan dan kebutuhan aplikasi, Anda dapat men-deploy strategi migrasi kunci utama. Setiap strategi migrasi ini:
- Pastikan fidelitas dan kebenaran kunci utama yang dimigrasikan.
- Minimalkan perubahan aplikasi downstream, seperti mengubah jenis atau nilai kunci utama.
- Terapkan praktik terbaik Spanner untuk performa dan skalabilitas.
- Spanner hanya mengubah metode cara data baru dibuat, dan tidak memengaruhi data yang ada.
Memigrasikan database kunci UUID
Pertimbangkan bahwa Anda bermigrasi dari database yang menggunakan kunci utama UUID ke Spanner. Konfigurasikan kunci UUID yang ada sebagai string di database sumber Anda dan impor ke Spanner apa adanya. Nilai UUID, khususnya v4, secara efektif unik, terlepas dari tempat pembuatannya.
Anda dapat menggunakan fungsi GENERATE_UUID()
(GoogleSQL, PostgreSQL) di Spanner untuk memigrasikan database kunci UUID.
Untuk petunjuk tentang cara memigrasikan 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 jenis
IDENTITY
standar di SQL Server atau Oracle.
Konfigurasikan objek SEQUENCE
Spanner untuk melewati nilai dalam rentang
kunci yang ada dan membuat kunci baru yang dibalik bitnya. Kunci yang dibalik bit yang dihasilkan
oleh objek SEQUENCE
Spanner selalu lebih besar dari nol,
dan didistribusikan secara merata di seluruh ruang bilangan bulat 64-bit positif.
Untuk petunjuk tentang cara memigrasikan database yang memiliki kunci berurutan, lihat Memigrasikan kunci utama berurutan yang dibuat otomatis.
Memigrasikan database kunci berurutan yang memiliki dukungan cutover langsung
Pertimbangkan bahwa Anda bermigrasi dari satu database instance yang menggunakan kunci monoton berurutan ke Spanner dan mendukung skenario replikasi,misalnya, Anda ingin melakukan cutover langsung di antara sistem database.
Konfigurasikan objek SEQUENCE
Spanner untuk melewati seluruh rentang nilai
kunci yang ada di database sumber Anda dan membuat kunci baru yang dibalik bitnya
di Spanner. Kunci yang dibalik bit yang dihasilkan oleh objek SEQUENCE
Spanner selalu lebih besar dari nol, tetapi tidak diurutkan.
Untuk mengetahui petunjuk tentang cara memigrasikan database yang memiliki dukungan migrasi sistem langsung, lihat Menggunakan Spanner dan database sumber Anda.
Memigrasikan database kunci berurutan yang memiliki dependensi logika aplikasi
Pertimbangkan bahwa Anda bermigrasi dari database yang menggunakan kunci monoton berurutan dan logika aplikasi Anda bergantung pada urutan kunci utama untuk menentukan keaktualan atau untuk mengurutkan data yang baru dibuat.
Buat kunci komposit yang menggabungkan nilai yang didistribusikan secara merata, seperti ID shard atau hash, sebagai komponen pertama dan angka berurutan sebagai komponen kedua. Tindakan ini mempertahankan nilai kunci yang diurutkan, tanpa menyebabkan hotspot dalam skala besar.
Untuk petunjuk tentang cara memigrasikan database kunci berurutan dengan dependensi logika aplikasi, lihat Memigrasikan kunci utama Anda sendiri.
Langkah selanjutnya
- Untuk melihat alur kerja migrasi mendetail, lihat Memigrasikan kunci utama.