Должен ли я использовать UUID в качестве первичных ключей для Rails? - PullRequest
4 голосов
/ 30 июля 2011

Я хочу использовать клиентскую платформу Spine.js , и она генерирует UUID в качестве идентификаторов для моделей, которые затем можно сохранить на сервере. Было бы проще, если бы я просто использовал сгенерированные клиентом UUID для моделей и сохранил их на сервере.

Каковы недостатки использования клиентских UUID в качестве первичных ключей в Rails?

Ответы [ 2 ]

11 голосов
/ 30 июля 2011

Мне не нравятся UUID для "первичных ключей" в целом, однако распределенная модель - это модель, в которой они достаточно хорошо подходят, при условии, что UUID генерируется соответствующим образом ;-) В зависимости от других проблем, он все еще может не быть первичный ключ , а скорее другой ключ-кандидат (представьте себе «альтернативный PK», который поддерживается уникальным индексом).

Мне известны две "проблемы":

  1. UUID похожи на IPv6.Они длинные и, следовательно, не являются самыми дружественными для человека ценностями.С другой стороны, они очень последовательны в форматировании и их легко обнаружить.Приобретите навыки копирования и вставки.

  2. Полностью случайные UUID имеют тенденцию фрагментировать индексы;При использовании в качестве PK, который обычно кластеризован (по сравнению с индексом, который может быть просто указателем на запись), это может привести к ужасной фрагментации. Однако;

    1. Хороший план обслуживания базы данных должен решить эту проблему: переиндексировать фрагментированные индексы по расписанию .

    2. Специальные схемы генерации UUID, такие как NEWSEQUENTIALID в SQL Server , хотя и «более предсказуемы», но также могут генерировать монотонно растущие значения и, таким образом, смягчать фрагментацию индекса / кластера.

Счастливого кодирования.

3 голосов
/ 30 июля 2011

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

Ознакомьтесь с содержательной дискуссией в этом посте, написанной нашим бесстрашным лидером: Первичные ключи: идентификаторы и идентификаторы GUID

...