Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Postgres: UUID, sharding, database, primary key, distribution

Почему при шардировании лучше использовать UUID вместо числового ID?

Проверяет понимание преимуществ UUID перед числовыми идентификаторами при шардировании баз данных.

Короткий ответ

UUID (универсальный уникальный идентификатор) лучше подходит для шардирования, потому что он генерируется независимо на каждом узле без централизованного счетчика. Это исключает конфликты и узкие места при вставке данных. Числовые автоинкрементные ID требуют синхронизации между шардами, что снижает производительность и усложняет масштабирование.

Длинный ответ

Проблема числовых ID при шардировании

При использовании автоинкрементных числовых идентификаторов в шардированной базе данных возникает проблема централизованной генерации. Если каждый шард генерирует ID независимо, возможны коллизии. Решение — выделение диапазонов или использование глобального счетчика, но это создает узкое место и снижает производительность при высоких нагрузках.

Преимущества UUID

UUID (например, версии 4) генерируется случайным образом на клиенте или сервере без обращения к общему ресурсу. Это позволяет каждому шарду вставлять данные независимо, что критично для горизонтального масштабирования. UUID также равномерно распределяет нагрузку по индексам, избегая «горячих точек» на последних страницах B-дерева, как у последовательных ID.

Пример кода

// Генерация UUID на клиенте (JavaScript)
const uuid = crypto.randomUUID();
// Вставка в любой шард без синхронизации
await db.shard1.insert({ id: uuid, name: 'Alice' });
await db.shard2.insert({ id: crypto.randomUUID(), name: 'Bob' });

Недостатки UUID

  • Больший размер (16 байт против 4-8 у int), что увеличивает объем индексов и замедляет операции.
  • Случайные UUID (v4) не упорядочены, что может снизить производительность кэширования.
  • Для упорядоченных сценариев можно использовать UUID v7 с временной меткой.

Вывод

UUID предпочтителен для систем с высокой нагрузкой на запись и необходимостью независимой генерации ID на каждом узле. Однако для небольших проектов или при жестких требованиях к размеру данных числовые ID с централизованным счетчиком могут быть проще и эффективнее.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • Postgres

    Postgres

  • SQL

Ключевые слова

#UUID

#sharding

#database

#primary key

#distribution

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.