UUID'ler (Evrensel Benzersiz Kimlik tanımlayıcıları), diğer şeylerin yanı sıra, tablo girişlerini benzersiz şekilde tanımlamak için veritabanlarında 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:
- 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) - UUID değerlerini yeni sütunlara yazın.
(artan sıradaki birincil anahtarlar ve güncellenmiş yabancı anahtarlarla) - Orijinal sütunları sil
- 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 koyarsanız PostgreSQL Bunu yapmak için (elbette yedekleme yaptıktan sonra) örneğin aşağıdaki sorguyu çalıştırabilirsiniz (önceden Z'de hariç tutmak istediğiniz tüm tabloları listeleyebilirsiniz). 19/31 Z'deki kendi özel kurallarınızın yanı sıra değiştirin. 37/39 ekle) ve ondan oluşturulan tüm sorguları kopyalar:
2aa7136d977617159be1834eaf40e871
Artık oluşturulan sorguları toplu olarak çalıştırırsanız kısa sürede veritabanını taşımış olacaksınız. Bu şekilde oluşturulan UUID'ler v4 spesifikasyonuna uymamaktadır ancak sözlüksel olarak önceki girişlerle aynı sıradadırlar, yeni UUID'lerle çakışmazlar (v4'te her zaman 3. grupta bir tane bulunur) 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 bulmanız ö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