Wpis z mikrobloga

Takie pytanko, czy korzystacie w waszych komercyjnych projektach z globalnych identyfikatorów?
Używacie standardowych UUID? Jakiej wersji?
Czy użycie może czegoś customowego? Jeżeli generujecie własny identyfikator to o co go opieracie? Jakiego jest rozmiaru i czy ma sumę kontrolną?
Może używacie jakichś gotowych rozwiązań typu twitterowy Snowflake?
W jaki sposób potem przechowujecie je w bazie? Jako text, binary czy konwertujecie do typów numerycznych? Chodzi mi głównie sql

Chętnie poznam jakieś triki zastosowane przy tworzeniu globalnych IDków

#programowanie #programista15k
  • 10
@Priya

W jaki sposób potem przechowujecie je w bazie? Jako text, binary czy konwertujecie do typów numerycznych? Chodzi mi głównie sql


$ psql --version
psql (PostgreSQL) 14.1

test=> select gen_random_uuid();
gen_random_uuid
--------------------------------------
042b35ef-f008-4a5f-af55-c8a1b0bc35ba
(1 row)

test=> create table foo(foo_id uuid PRIMARY KEY DEFAULT gen_random_uuid(), val text);
CREATE TABLE
test=> insert into foo(val) values('bar');
INSERT 0 1
test=> select * from foo;
foo_id | val
--------------------------------------+-----
80bf7b91-66de-4657-aa23-518282e96c34 | bar
(1 row)

test=> \d
@codeasap-pl: U Ciebie w projekcie generujecie uuid w bazie jako PK? Bezpośrednio w tabeli czy macie osobny storage do generowania?

Z tego co widzę to jest UUIDv4. Nie macie problemów z fragmentacją indeksów?
@Priya: Można jako PK, można w innych polach. To powyżej to tylko przykład. UUID to typ danych, bezpieczna implementacja wymaga wielu rzeczy (choćby powyższe porównanie lc/uc). Ale jako typ uuid może być indeksowany. Wyświetla literki, ale to uuid.

test=> insert into foo(foo_id, val) values('not uuid', 'baz');
ERROR: invalid input syntax for type uuid: "not uuid"
LINE 1: insert into foo(foo_id, val) values('not uuid', 'baz');

Np. w Python też jest walidacja:

>>>
@codeasap-pl: dzięki za info, ale ja to wiem xD
Pytam o komercyjne przykłady rozwiązań dla wydajnego generowania i wykorzystania globalnych ID w dużych systemach rozproszonych, a nie czym jest uuid i gdzie go można zastosować.
@Priya: Ok, rozumiem. Ja odpowiadałem odnośnie tego fragmentu:

W jaki sposób potem przechowujecie je w bazie? Jako text, binary czy konwertujecie do typów numerycznych? Chodzi mi głównie sql
@codeasap-pl: Tak, ale na pytałem o realne zastosowania z komercyjnych projektów. Np skrócone uuid można przechowywać jako bigint, niektóre identyfikatory konwertowane do base32 warto przechowywać jako binary. Chodzi mi o sprawdzone rozwiązania dużych systemów, a nie postawy sql.

Dzięki za chęci tak czy inaczej.