uuid_short()
произвежда побитов конгломерат от идентификатора на сървъра, сравнително статичен компонент на времето и последователно нарастващо 24-битово цяло число. Тези битове са напълнени в 8 байтово цяло число. Компонентът за време се основава на времето за зареждане на сървъра.
uuid()
произвежда шестнадесетичен низ, който представлява 16 байтов UUID на версия 1. UUID от версия 1 са побитов конгломерат от идентификатора на сървъра, текущата времева марка, няколко байта, които влизат в игра, ако генерирате идентификатори с хиперскорост, и няколко полезни бита.
За да отговорите на въпроса си:uuid_short
осигуряват уникалност във времето и пространството, която съперничи на uuid
? Отговорът е не. Примерен пример, идентификационният номер на сървъра в uuid_short
е само един байт. Така че, ако имате 256 или повече сървъра, поне няколко от тях ще имат същия идентификатор на възел, което означава, че губите уникалност на пространството. За сравнение, идентификационният номер на сървъра във версия 1 UUID е дълъг 6 байта, което ефективно унищожава вероятността от дубликати за всички, освен за най-големите ферми на корпоративни сървъри :)
По-добър въпрос е дали uuid_short
е достатъчно добър. Може да видите сблъсъци с идентификатори, ако:
- Генерирайте повече от 16 милиона IDS от същия сървър за кратко време. ***
- Стартирайте сървърите с един и същ сървърен идентификатор по едно и също време и споделяйте данни между тях.
- Разбърквайте се със системния часовник и след това рестартирайте сървъра си.
Вторият проблем изглежда малко вероятен за повечето хора, но първият си струва да се проучи, преди да се ангажирате да направите uuid_short
основата на вашите ключове.
*** Въз основа на mysql документи за uuid_short
, изглежда, че ще видите сблъсъци, ако генерирате повече от 16 милиона идентификатори по време на работа на един сървър. Но това би било глупаво. Документите на mysql продължават да казват, че сте добре, стига да не генерирате 16 милиона ID в секунда. Това означава, че те трябва да ударят някои от битовете във времевата марка, ако изчерпите 16 милиона последователни идентификатори. Не съм тествал това.