Что плохого в ГУИДах?
От: Ватакуси Россия  
Дата: 23.12.20 09:58
Оценка: -1
Они могут повторяться?
Они длинные?
Трудно запоминаемые?

Почему народ так сопротивляется их использовать?
Все будет Украина!
Re: Что плохого в ГУИДах?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 23.12.20 10:00
Оценка: +10
Здравствуйте, Ватакуси, Вы писали:

В>Почему народ так сопротивляется их использовать?


Кто сопротивляется?
Re: Что плохого в ГУИДах?
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 23.12.20 10:03
Оценка: 2 (1) +5 :))
Здравствуйте, Ватакуси, Вы писали:

Всё, да. А ещё нечитаемые и неинформативные. Они не задают никакого порядка: ни последовательности, ни иерархии. Глядя на 2 гуида я не могу понять, какой был создан раньше, у них порядок в какой-нибудь коллекции, кто у них родитель или какого они типа.
Как некоторое универсальное средство для ервого приближения — ок. Но в частных случаях всегда можно придумать что-то получше.
Re: Что плохого в ГУИДах?
От: fmiracle  
Дата: 23.12.20 10:08
Оценка:
Здравствуйте, Ватакуси, Вы писали:

В>Они могут повторяться?

В>Они длинные?
В>Трудно запоминаемые?

Не то чтобы проблемы, но есть такие неприятные особенности:
1. не идут последовательно в отличии от int+sequence. Последовательные номера удобны бывают и при разработке и при отладке/анализе данных
2. сложно читаются и понимаются. Это неудобно при отладке и анализе данных.


В>Почему народ так сопротивляется их использовать?


Если кто и сопротивляется, то во многом, имхо, просто привычка "а мы всегда identity столбец делали, и все хорошо, зачем guid??"
Re: Что плохого в ГУИДах?
От: klopodav  
Дата: 23.12.20 10:16
Оценка: +2
Ну, например, звонит Вася Пете, глядя в распечатку на бумажке, и говорит: "проверь, есть там в твоей базе объект с идентификатором ...". А дальше что — диктовать весь ГУИД по буквам? Ну, можно, конечно, но неудобно.
И Пете на том конце тоже неудобно — гляда на этот ГУИД, непонятно, как сократить область поиска, чтобы быстро его найти.

В общем, как тут уже отмечали, во многих случаях и такой вариант годится, и его минусы будут несущественными. Но по-хорошему при проектировании надо задуматься (даже не с точки зрения отдельной программы, а с точки зрения системы в целом и людей, которые будут ей пользоваться): можно ли вместо ГУИДа использовать что-то более удобоваримое.

Кстати, лучше ГУИДа может оказаться даже ГУИД с каким-то семантически значимым префиксом (хотя это и длиннее).
Re: Что плохого в ГУИДах?
От: · Великобритания  
Дата: 23.12.20 10:31
Оценка: +2 -1 :))
Здравствуйте, {39A99BA9-3CFB-4A26-A7E4-38FF6F07C481}, Вы писали:

В>Почему народ так сопротивляется их использовать?

Да не, сойдёт.

ЗЫЖ А можно я тебя буду называть C5E99824-BC3C-425E-85B3-69783C7F8460? Или ты 29111F77-03A0-4EDD-84C0-E9D572ECD332 предпочитаешь?
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re: Что плохого в ГУИДах?
От: Shmj Ниоткуда  
Дата: 23.12.20 11:06
Оценка: +1
Здравствуйте, Ватакуси, Вы писали:

В>Почему народ так сопротивляется их использовать?


По очевидной причине — если можно использовать что-то более простое — нужно использовать его. И очень редко когда без них нельзя обойтись.
Re[2]: Что плохого в ГУИДах?
От: AeroSun  
Дата: 23.12.20 11:11
Оценка: 3 (1) +5
Здравствуйте, Nuzhny, Вы писали:

N>Здравствуйте, Ватакуси, Вы писали:


N>Всё, да. А ещё нечитаемые и неинформативные. Они не задают никакого порядка: ни последовательности, ни иерархии. Глядя на 2 гуида я не могу понять, какой был создан раньше, у них порядок в какой-нибудь коллекции, кто у них родитель или какого они типа.



А вы в курсе что это и для чего нужно? Там, где они нужны не требуется ни знание их порядка, ни иерархии, ни какой был создан раньше, ни кто родитель, ни (боже упаси) какого они типа.
Попробуйте не делать костыли — без них на самом деле удобнее.
Re[3]: Что плохого в ГУИДах?
От: klopodav  
Дата: 23.12.20 11:21
Оценка: +3
AS>А вы в курсе что это и для чего нужно? Там, где они нужны не требуется ни знание их порядка, ни иерархии, ни какой был создан раньше, ни кто родитель, ни (боже упаси) какого они типа.

Проблема в том, что часто бывает так: разработчик предположил, что знание их порядка, иерархии, хронологии и типов не требуется. А потом, блин, выясняется, что оказывается требуется.

Это к тому, что когда возникает вопрос "что взять в качестве идентификатора" — лучше этот вопрос решать не наскоком "а давайте возьмем ГУИД и не будем париться", а вместо этого надо тщательно подумать, все ли учли и не упустили ли чего важного.
Re: Что плохого в ГУИДах?
От: ononim  
Дата: 23.12.20 11:29
Оценка: +1
Ну примерно тоже самое что в ип адресах. То есть ничего, но почемуто вместо простых и понятных числовых идентификаторов придумали днс.
Как много веселых ребят, и все делают велосипед...
Re[3]: Что плохого в ГУИДах?
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 23.12.20 12:23
Оценка: 2 (1) +3 :)
Здравствуйте, AeroSun, Вы писали:

AS>А вы в курсе что это и для чего нужно? Там, где они нужны не требуется ни знание их порядка, ни иерархии, ни какой был создан раньше, ни кто родитель, ни (боже упаси) какого они типа.

AS>Попробуйте не делать костыли — без них на самом деле удобнее.

В курсе. Требуется.
Например, я когда-то занимался ручной генерацией проектов для MS VS. И там проекты идентифицируются гуидами. В результате так получилось, что в процессе разработки и отладки инструмента я многие гуиды на память помнил. А были бы они разумными, то не пришлось бы.
Я, кажется, понимаю твою озицию. Типа гуид создан не для человека, а для компьютера. Но это всё хрень, потому что обязательно наступит момент, когда с ними придётся ковыряться именно человеку.
Re: Что плохого в ГУИДах?
От: velkin Удмуртия https://kisa.biz
Дата: 23.12.20 14:23
Оценка: 8 (4) +3
Здравствуйте, Ватакуси, Вы писали:

В>Почему народ так сопротивляется их использовать?


GUID это глобальный уникальный идентификатор. Ключевое слово здесь глобальный в противовес локальному.

GUID (Globally Unique Identifier) — статистически уникальный 128-битный идентификатор. Его главная особенность — уникальность, которая позволяет создавать расширяемые сервисы и приложения без опасения конфликтов, вызванных совпадением идентификаторов.

Теперь о том, где это использовать:

UUID (англ. universally unique identifier «универсальный уникальный идентификатор») — это стандарт идентификации, используемый в создании программного обеспечения, стандартизированный Open Software Foundation (OSF) как часть DCE — среды распределённых вычислений.
Основное назначение UUID — это позволить распределённым системам уникально идентифицировать информацию без центра координации.
Наиболее распространённым использованием данного стандарта является Globally Unique Identifier (GUID) фирмы Microsoft.

Стоит ещё обратить внимание на такое понятие как URI.

URI (/ˌjuː ɑːr ˈaɪ/ англ. Uniform Resource Identifier) — унифицированный (единообразный) идентификатор ресурса. URI — последовательность символов, идентифицирующая абстрактный или физический ресурс. Ранее назывался Universal Resource Identifier — универсальный идентификатор ресурса.

Слово universal и universally неявно связывают понятия UUID(GUID) и URI. URI же в свою очередь состоит из URL и URN.

URN (англ. Uniform Resource Name) — единообразное название (имя) ресурса.
Структура URN
Единообразные имена ресурсов имеют следующую структуру:
<URN> ::= "urn:" <NID> ":" <NSS>
В этой записи:
<NID>
идентификатор пространства имён (англ. Namespace Identifier); представляет собой синтаксическую интерпретацию NSS, не чувствителен к регистру.
<NSS>
строка из определённого пространства имён (англ. Namespace Specific String); если в этой строке содержатся символы не из набора ASCII, то они должны быть закодированы в Юникоде (UTF-8) и предварены (каждый из них) знаком процента «%» (подробнее см. URL).

NID        Разрядность  Кодировка       Пример
tree:tiger 192          Base32          urn:tree:tiger:7N5OAMRNGMSSEUE3ORHOKWN4WWIQ5X4EBOOTLJY
sha1       160          Base32          urn:sha1:XRX2PEFXOOEJFRVUCX6HMZMKS5TWG4K5
btih       160          Base32          urn:btih:QHQXPYWMACKDWKP47RRVIV7VOURXFE5Q
ed2k       128          Hex             urn:ed2k:354B15E68FB8F36D7CD88FF94116CDC1
md5        128          Hex             urn:md5:834CEF60EF3FD47162420FA25ABF2DFF
md4        128          Hex             urn:md4:bbd810ee7731921c4582daa00bbc531e
tiger      192          Hex             urn:tiger:cf13102788e1e6ef6124cb9ca9ef879e4bb04c58fe297dd3
aich       160          Base32          urn:aich:wbtmcm2wrbndylixh3jmwsg4uowzjcqm
whirlpool  512          Hex             urn:whirlpool:dc38ce741d9c8be87a0d715fad951460c5299da2447c3fa8f1057b560f9253c7a017882dcc2390ab602c3b0f5fcf066d6d35f32ffa9b8e5557e1d2f619506873
ripemd160  160          Hex             urn:ripemd160:93f1cb4a43643136d730a3b94b0ebcec66928c02
gost       256          Hex             urn:gost:906fd73511810bafdaa33c05b9957b07edd8dca9b6982c04a86f6c642eb6b062
has160     160          Hex             urn:has160:85c292d359574b89985b2667c9725edb1c7d12fc
snefru128  128          Hex             urn:snefru128:646b932fee2529db11d05425cff21978
snefru256  256          Hex             urn:snefru256:35879fc03ca60db551fa26ce8be6a6a04d542cf5a635ab203f95c6f1affb59a6

Использование GUID в качестве UUID фактически создаёт собственное пространство имён NID, в котором GUID выступает в роли строки NSS из этого пространства имён.

А теперь вопрос, зачем людям так заморачиваться для локальных (в противовес глобальным) или централизованных (в противовес распределённым) ресурсов, например, таких как строки в базе данных. Инкрементный целочисленный счётчик вероятно будет работать быстрее. В современных компьютерах 64 бита, то есть не просто будет исчерпать диапазон 264, если вообще возможно.

Лично я думаю, что там где нужно GUID используют, а там где нет, не используют.
Re: Что плохого в ГУИДах?
От: vsb Казахстан  
Дата: 23.12.20 14:39
Оценка:
Здравствуйте, Ватакуси, Вы писали:

В>Они могут повторяться?


Могут.

В>Они длинные?


Длинные.

В>Трудно запоминаемые?


Да.

В>Почему народ так сопротивляется их использовать?


Да вроде не сопротивляется.
Re[2]: Что плохого в ГУИДах?
От: vsb Казахстан  
Дата: 23.12.20 14:40
Оценка: -2 :)
Здравствуйте, Nuzhny, Вы писали:

N>Всё, да. А ещё нечитаемые и неинформативные. Они не задают никакого порядка: ни последовательности, ни иерархии. Глядя на 2 гуида я не могу понять, какой был создан раньше, у них порядок в какой-нибудь коллекции, кто у них родитель или какого они типа.

N>Как некоторое универсальное средство для ервого приближения — ок. Но в частных случаях всегда можно придумать что-то получше.

Ничего не мешает кодировать в GUID и иерархию и порядок. 16 байтов это довольно много.
Re: Что плохого в ГУИДах?
От: scf  
Дата: 23.12.20 14:46
Оценка: 1 (1) +1
Здравствуйте, Ватакуси, Вы писали:

В>Они могут повторяться?

В>Они длинные?
В>Трудно запоминаемые?
В>Почему народ так сопротивляется их использовать?

Хорошее — уникальность на стороне клиента. Т.е. единообразные модели (не сохраненная модель, как и сохранненная, содержит id с разумным значением) и какая-то экономия на sequence при вставке.
Плохое — занимают много места в базе и недружелюбны к людям.
Re[2]: Что плохого в ГУИДах?
От: L.K. Марс  
Дата: 23.12.20 15:58
Оценка: 2 (1) +3
N>Глядя на 2 гуида я не могу понять, какой был создан раньше, у них порядок в какой-нибудь коллекции

Это решается дополнением гуидов читаемыми данными.

Например: 2020-12-RUS-MSK-a75gb912ca5....

Гуид остаётся случайным и уникальным, при этом видны год и месяц создания, страна и город.
Re[3]: Что плохого в ГУИДах?
От: fmiracle  
Дата: 23.12.20 16:00
Оценка: 1 (1)
Здравствуйте, L.K., Вы писали:

LK>Например: 2020-12-RUS-MSK-a75gb912ca5....

LK>Гуид остаётся случайным и уникальным, при этом видны год и месяц создания, страна и город.

Но становится длинной строкой вместо просто 16 байт. Если БД поддерживает нативно guid, то разница в размере ключей и индексов может быть очень большой, особенно на "узких" табилцах.
Re[2]: Что плохого в ГУИДах?
От: fmiracle  
Дата: 23.12.20 16:10
Оценка: +2
Здравствуйте, Nuzhny, Вы писали:

N> А ещё нечитаемые и неинформативные.


вот это очень-очень да.

N>Они не задают никакого порядка: ни последовательности, ни иерархии. Глядя на 2 гуида я не могу понять, какой был создан раньше, у них порядок в какой-нибудь коллекции, кто у них родитель или какого они типа.


Этот подход уже приближается к естественному первичному ключу. Когда ключ сам имеет некоторый бизнес-смысл. Guid-ы же хороши как синтетический ключ. Который просто для внутренней работы БД — идентификация записей, join
Максимально такой синтетический.

Я лично предпочитаю именно использование синтетических ключей в БД. А где надо — дополнять таблицу еще столбцом типа code, где уже можно кодировать иерархию, происхождение и все прочее.

Использование же кода как основного ключа может выйти неожиданно боком, если потребуется вдруг реализовать какое-ниубдь логическое удаление, или захочется вдруг поменять структуру этого кода (т.к. сменились правила формирования иерархии, например) и подобное все. Модификация значений первичного ключа сложнее из-за связей чем модификация значений другого столбца таблицы.
Re[4]: Что плохого в ГУИДах?
От: L.K. Марс  
Дата: 23.12.20 16:11
Оценка: 1 (1)
F>Но становится длинной строкой вместо просто 16 байт. Если БД поддерживает нативно guid

Так в базе и будет guid. А читаемые данные — через вьюшки и вычисляемые поля. Чтобы не бегать глазами по куче полей, а увидеть всё в одном поле.
Re[3]: Что плохого в ГУИДах?
От: pagid Россия  
Дата: 23.12.20 20:55
Оценка: +4
Здравствуйте, vsb, Вы писали:

vsb>Ничего не мешает кодировать в GUID и иерархию и порядок. 16 байтов это довольно много.

Это будет некорректным использованием гуидов. Куда как лучше для этого сделать поле своего формата.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.