Ringkasan migrasi kunci utama

Halaman ini menjelaskan cara kerja Spanner dengan kunci utama dan penawaran strategi migrasi kunci utama untuk kasus penggunaan berikut:

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