> Почему использовать UUID вместо int для идентификаторов (Go)

Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы

Компании: Ozon

Стек: Go

> Пример ответа

Использование UUID вместо целочисленных идентификаторов (int) в Go-проектах оправдано в нескольких сценариях. Основные причины:

  1. Глобальная уникальность - UUID не требуют централизованной генерации или синхронизации между сервисами. В распределённых системах (микросервисы, шардирование БД) это исключает коллизии при объединении данных.

  2. Безопасность - последовательные int-идентификаторы легко угадать (например, /users/1, /users/2). UUID не раскрывают количество сущностей и сложнее поддаются перебору.

  3. Миграции и репликация - при переносе данных между базами или слиянии таблиц int-ключи могут конфликтовать. UUID гарантируют уникальность без перегенерации.

  4. Кэширование - UUID равномерно распределяются по хеш-таблицам, избегая "горячих точек" в распределённых кэшах (в отличие от автоинкремента, который концентрируется на последних записях).

Недостатки в Go:

  • Размер: UUID (16 байт) больше int64 (8 байт), что увеличивает размер индексов и замедляет JOIN.
  • Производительность: сравнение UUID медленнее, чем int. Для высоконагруженных систем с миллиардами записей это критично.
  • Человекочитаемость: UUID сложнее отлаживать в логах.

Рекомендация: Используйте UUID для публичных API, распределённых систем и долгоживущих сущностей. Для внутренних ключей с высокой нагрузкой - int64 с автоинкрементом. В Go для работы с UUID удобна библиотека github.com/google/uuid.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью