GUID или int ID с автоинкрементом - PullRequest
5 голосов
/ 31 марта 2011

Я пытаюсь перенести свои дизайнерские способности со стека LAMP на стек Microsoft, и я просто кое-что подумал - когда я захочу использовать GUID?Какие преимущества / недостатки он имеет по сравнению со старым надежным автоматическим инкрементом int?

Ответы [ 4 ]

9 голосов
/ 31 марта 2011

Ваш опыт никогда не нуждался в чем-либо, кроме автоинкрементных идентификаторов, может указывать на то, что идентификаторы GUID часто являются решением для поиска проблемы.Используйте их, когда и когда вы столкнетесь с требованием, когда ваш привычный шаблон не работает.Микрософт не имеет значения.

Единственный реалистичный сценарий, который я видел, - это объединение таблиц из двух источников.

3 голосов
/ 31 марта 2011

Одна проблема с GUID:

Поскольку они не последовательные, базе данных придется много работать для обновления индексов. С последовательным идентификатором, он может просто добавить его в конец (более или менее). Поскольку GUID являются случайными, он должен вписать его в существующий блок. Тем не менее, мы используем GUID для некоторых таблиц, и они работают нормально даже при довольно большой нагрузке.

1 голос
/ 31 марта 2011

«старое, надежное автоинкрементное int» довольно сильно зависит от того, насколько масштабируемой должна быть ваша база данных. Автоинкремент перестает работать в тривиальном случае, когда у вас есть настройка, по крайней мере, с двумя мастерами. Конечно, обойти это несложно, потому что это такая распространенная проблема; Различные механизмы базы данных могут координировать последовательность между мастерами, например, только один мастер может выделить из любой данной последовательности.

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

GUID решают проблему другим способом; два разных мастера имеют разные идентификаторы хоста (обычно это MAC-адрес). Так как это используется при вычислении нового GUID, отдельные мастера не могут создавать guid, которые сталкиваются. Кроме того, поскольку хост является частью идентификатора, его можно использовать для прямой идентификации сегмента, в котором находится запись.

Третий вариант - вообще не использовать суррогатные ключи (ни автоинкрементные целые числа, ни направляющие).

0 голосов
/ 17 июня 2015

Я бы рекомендовал использовать int ID вместо Guid по следующим причинам:

  • Int ID имеет размер 4 байта (32 бита), однако Guid имеет размер 16 байт (128 бит), что в 4 раза больше. в этом случае у вас могут возникнуть проблемы с производительностью и нехватка памяти
  • По умолчанию GUID не являются последовательными (будьте осторожны)
  • Легко визуализировать связи и связи между таблицами
...