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

ПЪРВИЧНИ КЛЮЧЕВЕ MySQL:UUID / GUID срещу BIGINT (времево клеймо + произволен)

Сблъсках се с този проблем в професионалния си живот. Използвахме времево клеймо + произволно число и се сблъскахме със сериозни проблеми, когато приложенията ни се увеличиха (повече клиенти, повече сървъри, повече заявки). Разбира се, ние (глупаво) използвахме само 4 цифри и след това променихме на 6, но ще се изненадате колко често грешките все още се случват.

За достатъчно дълъг период от време сте гарантирани за да получите дублиращи се ключови грешки. Нашето приложение е критично за мисията и следователно дори и най-малкият шанс да се провали поради присъщо произволно поведение е неприемлив. Започнахме да използваме UUID, за да избегнем този проблем, и внимателно управлявахме създаването им.

Използвайки UUID, размерът на вашия индекс ще се увеличи, а по-големият индекс ще доведе до по-лоша производителност (може би незабележимо, но все пак по-лошо). Въпреки това MySQL поддържа роден тип UUID (никога не използвайте varchar като първичен ключ!!) и може да се справи с индексирането, търсенето и т.н. доста ефективно дори в сравнение с bigint. Най-големият удар на производителността във вашия индекс почти винаги е броят на индексираните редове, а не размерът на елемента, който е индекс (освен ако не искате да индексирате в дълъг текст или нещо нелепо подобно).

За да ви отговоря на въпроса:Bigint (с прикачени произволни числа) ще бъде добре, ако не планирате значително да мащабирате приложението/услугата си. Ако кодът ви може да се справи с промяната без много промени и приложението ви няма да експлодира, ако възникне грешка с дублиран ключ, продължете с него. В противен случай ухапете куршума и изберете по-съществената опция.

Винаги можете да приложите по-голяма промяна по-късно, като например превключване към изцяло различен бекенд (с който сега сме изправени... :P)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL DATETIME DIFF заявка

  2. Възможно ли е промяна на записи в таблицата от LibreOffice Base?

  3. Изчисляване на ранг в PHP/MySQL

  4. Схема на база данни за ACL

  5. Как да нулирате първичния ключ на таблица?