Zastąp funkcję UUID wersji 1 MySQL?
Kontekst
Aplikacja internetowa, PHP 5, MySQL 5.0.91
Problem
Niedawno przełączyłem się z automatycznej inkrementacji liczby całkowitej na UUID jako klucz podstawowy dla niektórych moich tabel. Podczas generowania identyfikatorów UUID za pośrednictwem MySQLUUID()
funkcja, są bardzo podobne do siebie:
| uuid |
----------------------------------------
| 1e5988da-afec-11e1-9877-5464f7aa6d24 |
| 408092aa-afad-11e1-9877-5464f7aa6d24 |
^------^ ^^
1 8 11-12
Jak widać, tylko 8 pierwszych postaci i 11 i 12 są różne. Rozumiem, że UUID wersja 1 używa znacznika czasu i sprzętowego adresu MAC do wygenerowania identyfikatora UUID. Waham się jednak w używaniu wersji 1 z powodu tych podobieństw (i faktu, że w moim przypadku adres MAC nigdy się nie zmieni). Ponadto, jeśli adres MAC nigdy się nie zmieni, większość UUID jest bezużyteczna i marnuje przestrzeń.
Moja niestandardowa funkcja UUID
Jako eksperyment napisałem niestandardowy generator UUID w PHP:
public static function GenerateUUID()
{
return
substr(sha1(Account::GetUsername() . Account::GetUserID()), 18, 8) . "-" .
substr(md5(time()), rand() % 28, 4) . "-" .
substr(md5(date("Y")), rand() % 28, 4) . "-" .
substr(sha1(rand()), 20, 4) . "-" .
substr(sha1(rand() % PHP_INT_MAX), 17, 12);
}
Próbka wyników:
| uuid |
----------------------------------------
| 574d18c2-5080-bac9-5597-45435f363ea1 |
| 574d18c2-30d4-8b5b-4ffd-001744d3d287 |
Tutaj pierwszych 8 znaków jest identycznych dla tego samego użytkownika. To było zamierzone, ale nie potrzebne.
Pytanie
Czy istnieje preferowany / zalecany sposób generowania UUID w wersji 4 lub wersji 5. \ tw ramach zapytania MySQL?
Jeśli nie, czy dopuszczalne jest wygenerowanie niestandardowego identyfikatora UUID w PHP (jak powyżej), który nie jest zgodny ze specyfikacją?
Ograniczenia
Korzystam z udostępnionego planu hostingu z dostępem z linii poleceń, ale nie mogę modyfikować istniejącej instalacji MySQL.Wolałbym unikać pakietów / bibliotek innych firm.Uwagi
Nie wykonuję scalania, synchronizacji ani innych operacji wymagających identyfikatora GUID zawierającego adres MAC. Tu nie ma problemu.