Mysql
 sql >> база данни >  >> RDS >> Mysql

Mysql UUID_SHORT() е сравним с UUID()

uuid_short() произвежда побитов конгломерат от идентификатора на сървъра, сравнително статичен компонент на времето и последователно нарастващо 24-битово цяло число. Тези битове са напълнени в 8 байтово цяло число. Компонентът за време се основава на времето за зареждане на сървъра.

uuid() произвежда шестнадесетичен низ, който представлява 16 байтов UUID на версия 1. UUID от версия 1 са побитов конгломерат от идентификатора на сървъра, текущата времева марка, няколко байта, които влизат в игра, ако генерирате идентификатори с хиперскорост, и няколко полезни бита.

За да отговорите на въпроса си:uuid_short осигуряват уникалност във времето и пространството, която съперничи на uuid ? Отговорът е не. Примерен пример, идентификационният номер на сървъра в uuid_short е само един байт. Така че, ако имате 256 или повече сървъра, поне няколко от тях ще имат същия идентификатор на възел, което означава, че губите уникалност на пространството. За сравнение, идентификационният номер на сървъра във версия 1 UUID е дълъг 6 байта, което ефективно унищожава вероятността от дубликати за всички, освен за най-големите ферми на корпоративни сървъри :)

По-добър въпрос е дали uuid_short е достатъчно добър. Може да видите сблъсъци с идентификатори, ако:

  1. Генерирайте повече от 16 милиона IDS от същия сървър за кратко време. ***
  2. Стартирайте сървърите с един и същ сървърен идентификатор по едно и също време и споделяйте данни между тях.
  3. Разбърквайте се със системния часовник и след това рестартирайте сървъра си.

Вторият проблем изглежда малко вероятен за повечето хора, но първият си струва да се проучи, преди да се ангажирате да направите uuid_short основата на вашите ключове.

*** Въз основа на mysql документи за uuid_short , изглежда, че ще видите сблъсъци, ако генерирате повече от 16 милиона идентификатори по време на работа на един сървър. Но това би било глупаво. Документите на mysql продължават да казват, че сте добре, стига да не генерирате 16 милиона ID в секунда. Това означава, че те трябва да ударят някои от битовете във времевата марка, ако изчерпите 16 милиона последователни идентификатори. Не съм тествал това.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. по подразбиране колона с празен низ

  2. Не може да се зареди приставката за удостоверяване 'caching_sha2_password'

  3. mysql условно вмъкване - ако не съществува, вмъкнете

  4. Следващата заявка отнема твърде много време за изпълнение. Как да го оптимизираме

  5. PHP &MYSQL:използване на bcrypt хеш и проверка на парола с база данни