Veritabanlarındaki UUID'ler

UUID'ler (Evrensel Benzersiz Kimlik tanımlayıcıları) ​​diğer şeylerin yanı sıra veritabanlarında tablo girişlerini benzersiz bir şekilde tanımlamak için kullanılan 128 bitlik değerlerdir. Kısa çizgilerle ayrılmış beş gruba bölünmüş onaltılık bir dize olarak temsil edilirler (Örnek: 09fe49b3-4d2b-471c-ac04-36c9e706b85f). Var sayısız Tartışmalar UUID'lerin veritabanlarındaki avantajları ve dezavantajları hakkında - bunlar dağıtılmış sistemlerde vazgeçilmezdir.


Bu nedenle mikro hizmetlerde ve çok kiracılı uygulamalarda UUID'leri tanıtmaya değer. PHP çerçevesinde Laravel'de BigInteger veri türünden UUID'ye ( RFC 4122 belirtiminden UUID sürüm 4'ün sıralanabilir bir varyantı) geçiş hızla yapılır: İlk olarak, yeni bir özellik oluşturuyoruz:

2aa7136d977617159be1834eaf40e871

Daha sonra tüm modellerimizi ekliyoruz.:

2aa7136d977617159be1834eaf40e871

Laravel 9⁺'da bu daha da kolay: burada zaten kullanıma hazır HasUuids özelliğimiz var. Alternatif olarak, çerçeve, daha iyi okunabilirlik ve sıralanabilirlik nedeniyle ilginç olabilecek ilgili, ancak yine de oldukça bilinmeyen veri türü ULID için de destek sunar.

Zor kısım, mevcut verilerin taşınmasıdır. Kabaca aşağıdaki gibi devam edilebilir:

  1. Tüm tablolara boş değerlere sahip yeni UUID sütunları ekleyin
    (her biri tüm birincil ve yabancı anahtar sütunlarına dayalıdır)
  2. UUID değerlerini yeni sütunlara yazın
    (artan birincil anahtarlar ve güncellenmiş yabancı anahtarlar ile)
  3. Orijinal sütunları sil
  4. Yeni sütunları yeniden adlandır

Burada birkaç zorluk vardır: Taşıma işlemi uzun zaman alır ve tablonun sonuna yeni sütunlar eklenir (olası çözüm: resort sütunları ). Çok daha doğrudan bir yol, sütunları doğrudan dönüştürmektir.

Eğer bunu koyarsan PostgreSQL bir, (elbette önceki bir yedeklemeden sonra) aşağıdaki sorguyu çalıştırabilirsiniz, örneğin (bundan önce Z'de hariç tuttuğunuz tüm tabloları silebilirsiniz. 19/31 Z'deki kendi özel kurallarının yanı sıra değiştirin. 37/39 ekle) ve ondan oluşturulan tüm sorguları kopyalar:

2aa7136d977617159be1834eaf40e871

Şimdi oluşturulan sorguları birlikte çalıştırırsanız, veritabanını kısa sürede taşımış olursunuz. Bu şekilde oluşturulan UUID'ler v4 belirtimine uymasa da, sözlüksel olarak önceki girişlerle aynı sıradadır, yeni UUID'lerle çakışmaz (v4'teki 3. grupta her zaman bir 4, her zaman taşınan varyantta bir 0), bu da yeni UUID'lerin her zaman taşınan UUID'lerden daha büyük olduğu anlamına gelir.

Bundan sonra tüm Laravel önbelleklerini silmeniz önerilir (php artisan cache:clear && php artisan route:clear && php artisan config:clear && php artisan view:clear && composer dump-autoload && rm -rf bootstrap/cache/*/*) ve koşu seansları (rm -f storage/framework/sessions/*) boşaltmak için. Tabii ki, her şey bir Laravel göçü içinde de uygulanabilir.:

2aa7136d977617159be1834eaf40e871

Dönüşümden sonra, bunun yerine gelecekteki geçişlerde kullanılır bigIncrements veya. bigInteger sonra uuid:

2aa7136d977617159be1834eaf40e871

Geri