Memoria / presentazione UUID MySQL

2

Sto osservando il modo in cui gli UUID sono archiviati in MySQL. MySQL 8 non ha ancora un tipo di dati UUID, e non ha ancora tipi personalizzati, quindi ci sono due opzioni: memorizzarlo come stringa o come binario.

Il modulo binario risparmia il 30% di spazio e funziona molto meglio, secondo la mia esperienza.

Sfortunatamente la forma binaria è molto più problematica per lo sviluppo / manutenzione / supporto, dal momento che non è leggibile / copiabile / incollabile. Al punto che rende inaccettabile la forma binaria.

MySQL 8 ha nuove funzioni che dovrebbero rendere un po 'più facile la vita con gli UUID binari, ma non vedo come qualcuno che ha a che fare con DB su base giornaliera possa felicemente digitare BIN_TO_UUID(some_id) per visualizzare l'ID effettivo e UUID_TO_BIN('...') ogni volta che desidera vedere / aggiornare alcuni record.

Sto cercando di capire quale sarebbe il modo accettabile (non doloroso) di gestire gli UUID binari nella vita di tutti i giorni? Un modo in cui potevo pensare era creare una funzione alias, come U(some_id) , ma MySQL non ha ancora funzioni globali.

Ci sono altre opzioni? Come impostare un qualche tipo di filtro trasparente tra DB e client, all'interno di un client o qualcosa del genere?

    
posta Oleg Mikheev 14.07.2017 - 17:38
fonte

1 risposta

2

Come hai giustamente osservato, MySQL sembra mancare di un adeguato supporto di visualizzazione per UUID come gli altri sistemi di database.

Molte persone sembrano preferire la memorizzazione degli UUID come un campo TEXT di 36 caratteri. Come hai giustamente ipotizzato, ci sono importanti implicazioni sulle prestazioni e sullo storage con questo approccio, descritto in dettaglio a questo post del blog .

La mia preferenza? Crea una BIGINT colonna per la tua chiave primaria e genera le chiavi per utilizza la funzione UUID_SHORT () . Questa funzione, nelle giuste condizioni, garantisce valori univoci, a differenza di un normale UUID generato, che presuppone solo che il valore sarà unico con un grado molto alto di probabilità. I BIGINT sono facilmente indicizzati e occupano metà dello spazio di un UUID basato sui caratteri.

Questo approccio ti offre il meglio di tutti i mondi possibili; I tasti numerici BIGINT, a 20 cifre, sono probabilmente più leggibili dei 36 caratteri di un UUID esadecimale. Se hai ancora voglia di visualizzarli come UUID, puoi avvolgerli in una funzione HEX (anche se senza visualizzare i trattini). In pratica, la maggior parte delle persone non legge comunque l'intero UUID; vedono i primi caratteri per scopi di corrispondenza e verificano l'intero valore quando vedono una corrispondenza.

Ho lavorato in aziende che si occupano molto degli UUID. La verità è che se il tuo sistema è architettato in modo corretto, dovresti raramente lavorare con questi numeri direttamente, a meno che tu non stia facendo una sorta di lavoro diagnostico.

    
risposta data 15.07.2017 - 20:45
fonte

Leggi altre domande sui tag