Каковы недостатки с использованием UUID или GUID в качестве первичного ключа?

dba.stackexchange https://dba.stackexchange.com/questions/322

Вопрос

Я хотел бы построить распределенную систему. Мне нужно хранить данные в базах данных, и было бы полезно использовать Uuid или Гидо в качестве основного ключа на некоторых таблицах. Я предполагаю, что это недостатки с этим дизайном, так как UUID/GUID довольно велики, и они почти случайны. Альтернативой является использование автоматического интриптурированного Int или Long.

Каковы недостатки с использованием UUID или GUID в качестве основного ключа для моих таблиц?

Я, вероятно, буду использовать Derby/Javadb (для клиентов) и PostgreSQL (на сервере) в качестве СУБД.

Это было полезно?

Решение

Это зависит от вашей функции генерации и размера окончательных таблиц

Гиды предназначены для глобально уникальный идентификаторы. Как обсуждалось в Postgres 8.3 Документация Нет никаких методологий, которые общеприняты для создания этих идентификаторов, но PostgreSQL поставляется с несколькими более полезными кандидатами.

Из объема вашей проблемы и необходимости в не в сети пишет, что вы вполне аккуратно выделили использование чего -либо, кроме GUID, и поэтому нет компенсационных преимуществ других схем.

С функциональной точки зрения длина ключа, как правило, не является проблемой в любой современной системе, в зависимости от количества чтения и размера таблицы. В качестве альтернативной методологии, офлайн -клиенты могут выровнять новые записи без первичный ключ и просто вставьте их при повторном подключении. Поскольку PostgreSQL предлагает «серийный» дат данных, клиентам никогда не нужно будет определять идентификатор, если они смогут выполнить простую запись в базу данных.

Другие советы

Еще один совет - никогда не используйте гииды как часть кластерного индекса. Гииды не являются последовательными, поэтому, если они являются частью кластерного индекса, каждый раз, когда вы вставляете новую запись, база данных должна была бы перестроить все свои страницы памяти, чтобы найти правильное место для вставки, в случае с автоматическим интеграцией int (bigint), он будет только последняя страница.

Теперь, если мы рассмотрим некоторые реализации DB: 1.) MySQL - первичные клавиши кластеризованы, без возможности изменить поведение - рекомендация не для того, чтобы использовать гииды здесь 2.) Postgres, MS -SQL - вы можете сделать GUID как Первичный ключ не складывается и используйте другое поле в качестве кластерного индекса, например, Autoincrement Int.

Это зависит.

Серьезно, со всем, что вы дали до сих пор, это примерно, насколько вы можете пойти.

Почему бы было полезно использовать UUIDS? Почему вы не используете INT? Почему вы не можете просто указать на Uuids позже? Вы понимаете, что значит иметь отсортированный список с ключом UUID и вставить случайный (не последовательный) UUID после нескольких миллионов рядов?

На какой платформе это будет работать? Сколько дисков? Сколько пользователей? Сколько записей?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top