UUID nei database

UUID (Identificatori di ID universalmente univoci) sono valori a 128 bit che vengono utilizzati nei database, tra le altre cose, per identificare in modo univoco le voci della tabella. Sono rappresentati come una stringa esadecimale divisa in cinque gruppi separati da trattini (Esempio: 09fe49b3-4d2b-471c-ac04-36c9e706b85f). C'è numerose Discussioni sui vantaggi e gli svantaggi degli UUID nei database: sono indispensabili nei sistemi distribuiti.


Nei microservizi e nelle applicazioni multi-tenancy, vale quindi la pena considerare l'introduzione degli UUID. Il passaggio dal tipo di dati BigInteger a UUID (una variante ordinabile dell'UUID versione 4 dalla specifica RFC 4122 ) nel framework PHP Laravel avviene rapidamente: in primo luogo, creiamo un nuovo tratto:

2aa7136d977617159be1834eaf40e871

Quindi aggiungiamo tutti i nostri modelli:

2aa7136d977617159be1834eaf40e871

In Laravel 9⁺ è ancora più semplice: qui abbiamo già il tratto HasUuids pronto all'uso. In alternativa, il framework offre anche supporto per il tipo di dati correlato, ma ancora piuttosto sconosciuto, ULID , che potrebbe essere interessante grazie alla migliore leggibilità e ordinabilità.

La parte difficile è la migrazione dei dati esistenti. Approssimativamente si potrebbe procedere come segue:

  1. Aggiungi nuove colonne UUID con valori vuoti a tutte le tabelle
    (ciascuno basato su tutte le colonne chiave primaria ed esterna)
  2. Scrivi i valori UUID nelle nuove colonne
    (con chiavi primarie ascendenti più chiavi esterne aggiornate)
  3. Elimina le colonne originali
  4. Rinomina nuove colonne

Ci sono diverse sfide qui: il processo di migrazione richiede molto tempo e nuove colonne vengono aggiunte alla fine della tabella (possibile soluzione: colonne resort ). Un modo molto più diretto è trasformare direttamente le colonne.

Se lo metti PostgreSQL uno, puoi (dopo un backup precedente, ovviamente) eseguire la seguente query, ad esempio (prima di poter eliminare tutte le tabelle che escludi in Z. 19/31 sostituire, nonché proprie regole speciali in Z. 37/39 add) e copia tutte le query generate da esso:

2aa7136d977617159be1834eaf40e871

Se ora esegui insieme le query generate, hai migrato il database in breve tempo. Sebbene gli UUID così generati non siano conformi alla specifica v4, sono lessicalmente nello stesso ordine delle voci precedenti, non entrano in collisione con i nuovi UUID (nel 3° gruppo in v4 c'è sempre un 4, sempre uno nella variante migrata 0), il che significa anche che i nuovi UUID sono sempre più grandi degli UUID migrati.

Successivamente si consiglia di eliminare tutte le cache di Laravel (php artisan cache:clear && php artisan route:clear && php artisan config:clear && php artisan view:clear && composer dump-autoload && rm -rf bootstrap/cache/*/*) e sessioni di corsa (rm -f storage/framework/sessions/*) svuotare. Naturalmente, il tutto può essere implementato anche all'interno di una migrazione Laravel:

2aa7136d977617159be1834eaf40e871

Dopo la conversione si utilizza invece nelle migrazioni future bigIncrements o. bigInteger poi uuid:

2aa7136d977617159be1834eaf40e871

Indietro