Identifiers

Идентификаторы в разных языках и БД

Идентификаторы в разных языках и БД

Как одна задача — сгенерировать UUIDv7/ULID/Snowflake — решается в Go, Java и Rust (и почему ops/sec между языками сравнивать нельзя), как типы колонок PostgreSQL (uuid/bytea/text) обходятся с этими значениями и как ::text-каст ломает индекс, и как согласовать идентификатор с ключом шардирования, чтобы монотонный ключ не устроил горячий узел.

Идентификаторы и производительность: локальность, bloat, WAL

Идентификаторы и производительность: локальность, bloat, WAL

Случайный ID (UUIDv4) деградирует вставку в PostgreSQL: ниже плотность листьев B-tree, больше WAL, крупнее первичный индекс — измерено на стенде против bigint и монотонного UUIDv7. Плюс кросс-движковый разбор: миф «UUID-PK раздувает вторичные индексы» верен для MySQL/InnoDB и неверен для PostgreSQL; и когда монотонный ключ создаёт горячий шард (MongoDB ranged), а когда нет (ScyllaDB и Mongo hashed).

Выбор идентификатора: bigint, UUID, ULID, Snowflake

Выбор идентификатора: bigint, UUID, ULID, Snowflake

Идентификатор — проектное решение с отложенной ценой. Разбор bigint, UUIDv4, UUIDv7/ULID, Snowflake, ObjectId по осям, которые реально влияют на систему: кто генерирует, монотонность и сортируемость, размер ключа, что утекает наружу, вероятность коллизий. Главная ось — не «UUID или число», а случайный против монотонного; дерево выбора и разбор мифов.