172 похожих чатов

Существует uuid v7, выше упоминался. Он тоже упорядоченный, что мешает

использовать его?

55 ответов

111 просмотров

он некрасивый и с дефисами

Artur Karapetov
он некрасивый и с дефисами

что значит некрасивый? следует научиться различать данные и их представление.

Alex
что значит некрасивый? следует научиться различать...

да причем здесь это? если с ULID в качестве PK нет проблем - я убиваю 2 зайца. если есть проблемы - я делаю PK как UUID, а для юзера отдельное поле с типом ULID.

Artur Karapetov
да причем здесь это? если с ULID в качестве PK не...

Юзеру думаю пое@@ь он и слов то таких не знает

Artur Karapetov
да причем здесь это? если с ULID в качестве PK не...

> если есть проблемы - я делаю PK как UUID, а для юзера отдельное поле с типом ULID. зачем? какой в этом смысл?

Artur Karapetov
какой смысл в чем?

делать два 128 битных идентификатора вместо одного?

Alex
делать два 128 битных идентификатора вместо одного...

там есть слово “если”. если есть проблемы с ULID в качестве PK.

Artur Karapetov
там есть слово “если”. если есть проблемы с ULID в...

ну окей, если есть проблемы с ULID, и предполагается использовать UUID в качестве PK, нахрена там еще второе поле с ULID ?

Alex
ну окей, если есть проблемы с ULID, и предполагает...

он красивый и уникальный - его я буду отдавать юзеру

Alex
Что значит красивый?

uuid длинный, там дефисы. хуже выглядит для юзеров.

Artur Karapetov
uuid длинный, там дефисы. хуже выглядит для юзеров...

Ух... я не понимаю как эти люди с явными пробелами фундаментальных знаний компьютерных наук и недостатком интеллекта пытаются разрабатывать софт... Вы ведь в курсе что da0e7b25-0c01-4b40-ac97-af48a9d7f65b da0e7b250c014b40ac97af48a9d7f65b 2g57JQwBS0Csl69Iqdf2Ww 3IHHWJIMAFFUBLEXV5EKTV7WLM это буквально одно и то же число?

Alex
Ух... я не понимаю как эти люди с явными пробелами...

да. по сути ULID это UUID + TIMESTAMP откуда, кстати, инфа про проблемы с computer science?

Artur Karapetov
да. по сути ULID это UUID + TIMESTAMP откуда, к...

Потому что говорить что UUID некрасивый, потому что там дефисы, а ULID красивый, потому что дефисов нет, может только идиот, уж простите за прямоту

Artur Karapetov
ну ок. значит я идиот)

Ты же понимаешь чем отличаются данные от их представления?

Arkady Strugatsky
Ты же понимаешь чем отличаются данные от их предст...

не вижу смысла продолжать диалог, мне минут 10 назад в других чатах ответили про ULID и подтвердили что он красивее чем UUID спасибо за помощь

Arkady Strugatsky
Ты же понимаешь чем отличаются данные от их предст...

я бы понял этот вопрос, если бы я мог в бд держать uuid а отдавать ulid и vice versa логика, но так нельзя насколько я понял.

Artur Karapetov
я бы понял этот вопрос, если бы я мог в бд держать...

Кто сказал что нельзя? О чем по-вашему я тут распинаюсь?

Artur Karapetov
я бы понял этот вопрос, если бы я мог в бд держать...

И UUID и ULID это 128 битное число, 32 октета. Они имеют одинаковый размер. UUID канонически кодируется в текстовом виде как 4 группы в 16-ричном представлении. ULID же кодируется в base32. Никто не запрещает при выводе пользователю кодировать это число как угодно и никто не заставляет использовать каноничное представление. UUID можно закодировать хоть как base32 хоть как base64, хоть в виде десятичного числа то же самое верно и для ULID.

Alex
Кто сказал что нельзя? О чем по-вашему я тут распи...

я где-то прочел что нельзя. видимо здесь и ошибся. раз можно, тогда проблем вообще нет.

Artur Karapetov
я где-то прочел что нельзя. видимо здесь и ошибся....

Есть, почему нет. Вы не поняли примерно ни слова из того, что вам говорили. Это проблема. Но как её решать — я не знаю :-(

Дефисы и скрыть можно

V K
Дефисы и скрыть можно

ну ты что, это же не консистентный интерфейс у юзера получится! там же оно поди как же - юзер может взять этот айдишник, скопировать и отправить в ТП. а если в айдишнике есть дефисы, то его не получится скопировать двойным кликом (!!!sic). а если из uuid убрать дефисы, то что с ним будет ТП делать? только не говори что вставлять дефисы обратно. это называется добро пожаловать в реализацию EAV для only бизнес юзеров, фронтендеры то дорогие

Nickelodeona K
ну ты что, это же не консистентный интерфейс у юзе...

Вроде как не комильфо раскрывать наружу внешние идшники. Для юзеров можно завести легкочитаемые external_id.

Александр
Вроде как не комильфо раскрывать наружу внешние ид...

Ну, это тожэ такое себе ограничение. С одной стороны — какие-то векторы атаки опять. С другой, если эти векторы работают — у вас и так всё дырявое...

Ilya Anfimov
Есть, почему нет. Вы не поняли примерно ни слова ...

что я не понял? что UUID и ULID это все представление 128 битного числа? что есть еще и другие представления? я задавал конкретные вопросы. единственное, в чем я ошибся, что можно их конвертить туда-сюда. где-то прочел что нельзя, и поэтому возник этот вопрос.

Artur Karapetov
что я не понял? что UUID и ULID это все представл...

нет, UUID и ULID это способы генерации 128 битного числа. К представлению они не имеют никакого отношения.

Ilya Anfimov
Ну, это тожэ такое себе ограничение. С одной стор...

- У нас дыра в безопасности! - Ну хоть что-то у нас в безопасности…

Artur Karapetov
что я не понял? что UUID и ULID это все представл...

Их нельзя конвертить туда-сюда (между uuid и ulid).

Ilya Anfimov
Их нельзя конвертить туда-сюда (между uuid и ulid)...

тогда я тем более не понимаю, в чем я не прав.

Artur Karapetov
тогда я тем более не понимаю, в чем я не прав.

Все еще не различаете данные и их представление.

так если их конвертировать туда-сюда нельзя, как я могу хранить uuid, а возвращать ulid ?

Artur Karapetov
так если их конвертировать туда-сюда нельзя, как я...

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

Artur Karapetov
тогда я тем более не понимаю, в чем я не прав.

Нельзя конвертировать данные. То есть идентификатор полученный при помощи UUID не будет являться корректным идентификатором ULID и наоборот, корректный ULID не будет являться корректным UUID. Несмотря на то что они имеют одинаковый размер, у них разная внутренняя структура ULID состоит из двух половинок (таймстемп + случайная часть) UUID зависит от версии, но например в 6-7 октеах кодируется версия Поэтому нельзя один идентификатор преобразовать в другой. Они между собой бинарно несовместимы. Для приложений, которые работают с идентификаторами не как с тупой последовательностью байт это может иметь значение. Однако, и тот и другой идентификатор можно представить в различных представлениях. И UUID и ULID могут быть записаны в этом формате: f95ae052-5bc8-11ee-ac65-18c04d09ca7e И UUID и ULID могут быть записаны в кодировке base32 (с обрезанным паддингом): 7FNOAUS3ZAI65LDFDDAE2COKPY Или если очень хочется в виде числа 331449627452577736724109337311442487934 В примерах выше это три разных способа записи одного и того же значения. Для того чтобы вывести красивый идентификатор пользователю не важно каким алгоритмом он был получен.

Artur Karapetov
так если их конвертировать туда-сюда нельзя, как я...

Всё там можно конвертировать. Там единственный тонкий момент - это то, что в каноническом uuid по RFC зарезервированно несколько бит под номер версии, и в этом смысле ulid не является 100% стандартным uuid'ом. Но базе на это глубоко пофиг, для неё это просто 128 битный int. Внутри БД делай PK uuid, а юзерам отдавай как ulid. И наоборот - получил ulid, сконвертил в byte[16] и сохранил в БД как uuid. Вот и всё.

Sergey K
Всё там можно конвертировать. Там единственный тон...

я так и хотел, мне в этом чате начали рассказывать что я идиот и другие сказки =)

Alex
Нельзя конвертировать данные. То есть идентификато...

ну вы зачем-то одно и тоже разными словами, разной длины абзацев пересказываете. это все и так ясно, вопрос-то мой, изначально был другой.

Artur Karapetov
ну вы зачем-то одно и тоже разными словами, разной...

Это было до или после чепухи о том что UUID некрасивые и с дефисами, а ULID красивые и без дефисов?

Alex
Это было до или после чепухи о том что UUID некрас...

какая разница? факт есть факт. uuid не красивый. ulid красивый хочу ulid

Sergey K
Всё там можно конвертировать. Там единственный тон...

вы первый, кто адекватно ответил в этом чате. в остальных чатах, где я это спросил, подобный ответ был получен через 10 минут. и да, ulid красивее uuid, хочется его в качестве PK

Artur Karapetov
какая разница? факт есть факт. uuid не красивый....

Што тот, что этот фиг запомнишь, разницы никакой

Artur Karapetov
вы первый, кто адекватно ответил в этом чате. в ...

На самом деле похер. В PostgreSQL uuid это [16]byte https://github.com/postgres/postgres/blob/master/src/include/utils/uuid.h#L22 как и в нашем любимом Go https://github.com/google/uuid/blob/master/uuid.go#L20 как и ulid https://github.com/oklog/ulid/blob/main/ulid.go#L48

Dmitry M
На самом деле похер. В PostgreSQL uuid это [16]byt...

мой изначальный вопрос был следующий: не будет ли подводных камней в постгре если PK сделать ULID. Возможно что это медленнй чем UUID, для которого почему-то есть свой тип UUID. Я не сварщик в БД, по этому решил уточнить.

Artur Karapetov
мой изначальный вопрос был следующий: не будет ли ...

Тут нужно вкуривать версию UUID. От uuid v4 PostgreSQL может быть плохо https://ru.wikipedia.org/wiki/UUID https://habr.com/ru/companies/ozontech/articles/564520/ https://www.2ndquadrant.com/en/blog/sequential-uuid-generators/. Появились UUIDv 6-7 https://habr.com/ru/articles/572700/

Dmitry M
Тут нужно вкуривать версию UUID. От uuid v4 Postgr...

v7 чтобы, там что-то с упорядоченностью связано, надо вспоминать

Konstantin Zaitsev
Он не утвержден(

Кому это когда-то мешало🤣

Artur Karapetov
вы первый, кто адекватно ответил в этом чате. в ...

Если надо "красиво", то можно взять стандартный uuid и кодировать его в base32 без паддинга. Будет ещё красивее )) 💃 Этот кодер есть в стандартной гошной библиотеке. А про ulid лучше забыть, потому что есть новый draft RFC, и там как раз описан uuid v7, который всё тоже самое, что ulid (т.е. привязанный ко времени, монотонно возрастающий, исключающий конфликты), но только будущий стандарт. Либа gofrs/uuid умеет генерить uuid v7. И для PG есть сишное расширение pg_uuidv7 для быстрой генерации в БД и выдергивания из них времени. https://www.ietf.org/archive/id/draft-ietf-uuidrev-rfc4122bis-03.html

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта