GH GambleHub

Identifikatorlary döretmek

1) Nämä identifikatorlara üns bermeli?

Identifikator (ID) - düýp many açary: DB setirleri, habarlar, faýl, sargyt. Onuň häsiýetlerine bagly:
  • Özboluşlylygy we gerimi (gapma-garşylyklar, gorizontal ösüş).
  • Tertip we sortlamak (wagtlaýyn korrelýasiýa, replikasiýa, dedup).
  • Saklaýyş öndürijiligi (indeksler, gyzgyn sahypalar, açaryň ululygy).
  • Howpsuzlyk (öňünden aýdyp bolmajaklyk, syzmak, çaklamak).
  • Ulanyş/integrasiýa (gysga, URL-safe, registre duýgur däl).

ID saýlamak - entropiýa, tertiplilik, uzynlyk, nesil tizligi we ekspluatasiýa arasynda ylalaşyk.

2) Esasy talaplar we adalgalar

Özboluşlylygy: gapma-garşylygyň ähtimallygy kabul ederlikli töwekgelçilikden pes bolmaly.
Entropiýa: "Näçe tötänlik" ID (bit) bar.
Tertipliligi (time-sortable/k-sortable): leksikografik sortlamak ≈ wagt boýunça sortlamak.
Monotony: düwün/akymyň içinde azalmaýan yzygiderlilik.
Ýazgynyň ýerleşýän ýeri: täze goýmanyň indeksiň "guýrugynda" jemlenişi (gyzgyn sahypalaryň howpy).
Öňünden aýdylýanlygy: goňşy şahsyýetnamany çaklamak mümkinmi (howpsuzlyk/API üçin möhümdir).
Görkeziş: binar/setirli, Base16/32/36/58/64, defisler, registrler.

3) Kesgitleýjileriň esasy maşgalalary

3. 1 UUID

v4 (random): 122 entropiýa bit. Tertipsiz, howpsuzlyk we ýönekeýlik üçin amatly. Minus: tötänleýin paýlanyş sebäpli indeksler "bulam-bujar" - bu bolsa ýükleri deň derejede dargatýar we "gyzgyn sahypalary" aýyrýar.
v1 (wagt + MAC): tertipleşdirýäris, ýöne AAC/wagt (gizlinlik) göterýär; köplenç gaçýarlar.
v7 (wagt-ordered): millisekund wagt + random bölegi. Wagt boýunça leksikografiki sortlama we DB-de gowy gysyş üçin dizaýn. Ylalaşyk: indeksiň "gyzgyn guýrugy" peýda bolýar; şardlamak/prefiks/inkrement bilen bejerilýär.

Maslahatlar

Daşarky API we tertibe bildirilýän berk talaplar üçin - v4.
Waka/DB we "sortlanan" açarlar üçin - v7.

3. 2 ULID (Crockford Base32)

128 bit: 48 bit wagt (ms) + 80 bit tötänlik. Leksikografiki taýdan wagt boýunça sortlanýar, adam-dost ('I, L, O, U'), URL-safe. Monoton üýtgeşiklik bar (şol bir wagt belligi bilen tötänleýin bölegi köpelýär).
Artykmaçlyklary: okalmagy, tertipleşdirilmegi, çydamlylygy.
Minuslar: bir wagtyň özünde gaty ýokary ýygylykda - "gyzgyn guýruk".

3. 3 KSUID

160 bit: 32 bit wagt (sek) döwür bilen deňeşdirilende + 128 bit tötänlik. ULID-den gysga çyzyklar, has uly wagt aralygy we durnukly sortlanyş? (ýok - has uzyn, ýöne kodlamak bilen), paýlanan bloglar we obýektler üçin amatly.

3. 4 Snowflake-meňzeş (k-sortable flake IDs)

Nusgawy shema (sazlanyp bilinýän):

[ timestamp bits ][ region/datacenter bits ][ worker bits ][ sequence bits ]

Häsiýetleri: düwündäki monoton ösüş, kwazi-global özboluşlylyk, gysga (64 bit) binar görnüş.
Töwekgelçilikler: sagatlara garaşlylyk (wagt süýşmesi/regress), bir tikde sekwensiýanyň tükenmegi, region/worker bitleriniň utgaşdyrylmagy.
Bejergi: "clock back" -dan goramak, segquence ätiýaçlygy, wagt detektory, PTP/NTP düzgün-nyzam.

3. 5 DB yzygiderliligi (SEQUENCE/IDENTITY)

Bir DBB/çarda iň ýönekeý monoton nesil.
Plýuslar: gysga, çalt, ýerli tablisalar üçin amatly.
Minuslar: paýlanan toparda global taýdan kyn; öňünden aýdyp boljak (köpçüligiň açary ýaly howply), indeksiň gyzgyn guýrugyny döredýär.

3. 6 Mazmun-salgy ID (hash content)

Mazmundan SHA-256/Blake3 → durnukly ID, de-duplikasiýa, bitewiligi barlamak, kesmek.
Artykmaçlyklary: determinizm, çalyşmakdan goramak.
Minuslar: gymmat bahaly nesil (CPU), amaly nol gapma-garşylyklar, wagtlaýyn sortlama ýok, uzynlyk.

4) Gapma-garşylyklar we "doglan günleriň paradoksy" (duýgur)

"b" bit ululygyndaky tötänleýin ID üçin gapma-garşylyk ähtimallygy "n" generasiýalarda takmynan:

p ≈ 1 - exp (-n (n-1 )/2/2 ^ b) ≈ n ^ 2/2 ^ (b + 1) (for small p)
Mysal üçin:
  • UUIDv4 (122 bit) n = 10 ^ 12 (trillion) → p ~ 1e-14 (äsgerilmez).
  • 64-bit random → nde = 10 ^ 9 eýýäm p ~ 0. 027 (görnükli töwekgelçilik).
  • Netije: 64-bit tötänleýin köplenç ullakan ulgamlar üçin ýeterlik däl; 96/128 bit ulanyň.

5) Indeksler, gyzgyn sahypalar we saklamak

Tötänleýin açarlar (v4) bellikleri indeksiň agajyna birmeňzeş paýlaýar → "guýrugy" ýok, ýöne has erbet kesh lokalizasiýasy.
Wagt boýunça sortlanýanlar (v7/ULID/Snowflake) "guýrugyna" girizilýär → iň gowy lokalizasiýa we gysyş, ýöne ýokary paralel ýazgynyň aşagyndaky gyzgyn sahypalaryň töwekgelçiligi.

"Gyzgyn guýrugy" ýumşatmak:
  • tenant/region boýunça prefiksler/şarding (wagtdan öň 1-2 baýt goşmak);
  • interleaving: uly bitlerde tötänligiň bir bölegi;
  • batch-goşmalar, B-agaçdaky fillfactor, uly bloglar üçin BRIN/klaster üçin awtoulag geçişi.
Ululygy:
  • 'UUID (16B)' vs 'BIGINT (8B) '/' INT8' ýady/keşi tygşytlaýar; Base32/58/64 setirleri ululygy 20-60% ýokarlandyrýar. DB üçin ikilik saklaň, gyradaky setirde seriýalaň.

6) Howpsuzlyk we gizlinlik

SEQUENCE/INT-i URL/API-de köpçülige açyk ID hökmünde ulanmaň: çaklamak → çeşmeleriň sanalmagy.
Daşarky baglanyşyklar üçin tötänleýin, öňünden aýdyp bolmajak ID (v4/v7/ULID/KSUID) goşuň.
PII-ni şahsyýetnamada kodlamaň. Atributy açmaly bolsaňyz, şifrläň/gol çekiň (JWE/JWS ýaly) ýa-da aç-açan däl bellikleri ulanyň.
URL-howpsuz kodlamalar: Base32 Crockford, Base58 ('0OIl' -siz), Base64url.

7) Köp tenantlyk, prefiksler we marşrut

Format: '[TENANT _ PREFIX] - [ID]' ýa-da ikilik: 'tenant _ id | | id'.
Plýuslar: kärendeçi boýunça çalt süzgüçler/partiýalar, N + 1 skandan gorag.
Minuslar: uly bitlerdäki entropiýanyň dykyzlygyny hasam erbetleşdirip biler → paýlanyşy pikirleniň (heş prefiks).
Hash goşulmasy (2-3 baýt) gapma-garşylyklary peseldýär we shard-routinge kömek edýär: 'shard = hash (id)% N'.

8) Saýlamak boýunça amaly teklipler

API, jemgyýetçilik baglanyşyklary, berk tertipsiz paýlanan hyzmatlar: UUIDv4, ULID/KSUID.
Logi/wakalar/sargytlar, köplenç wagt boýunça tertipleşdirýäris: UUIDv7 ýa-da ULID (monoton).
Lokal monotonlygy we gysga açary bolan ultra ýokary giriş: Snowflake-meňzeş 64-bit (wagt tertibi talap edilýär).
Artefaktlaryň/binalaryň/bloblaryň ammarlary: mazmun-salgylar (SHA-256), üstleri bolsa adam-dost gysga "vitrin" (Hashids/baglanyşyk).
Bir DB-de lokal tablisalar: SEQUENCE/IDENTITY + açyk baglanyşyklar üçin daşarky "örtük" (masking).

9) Ýerine ýetirişler we mysallar

9. 1 PostgreSQL

UUID-i binar saklaň, indeksler - 'btree' ýa-da 'hash'.

sql
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

CREATE TABLE orders (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(), -- или uuid_generate_v4()
created_at timestamptz NOT NULL DEFAULT now(),
tenant smallint NOT NULL
);

-- For time-sortable (UUIDv7) store binary (uuid), generation in the application.
-- If you want a cluster by time:
CREATE INDEX ON orders (created_at DESC);
Sequential hot fix: time-sorted ID üçin uly bitlere "duz" goşuň ýa-da tenant boýunça partiýa ediň:
sql
CREATE TABLE orders_t1 PARTITION OF orders FOR VALUES IN (1);
CREATE TABLE orders_t2 PARTITION OF orders FOR VALUES IN (2);

9. 2 Redis (atom hasaplaýjylary/monutoniýa)

bash
INCR "seq: orders" # local sequence combine: epoch_ms<<20     (worker_id<<10)      (seq & 1023)

9. 3 Snowflake şuňa meňzeş generator (psevdokod)

pseudo const EPOCH =  1704067200000  # custom epoch (ms)
state: last_ms=0, seq=0, worker=7, region=3

next():
now = epoch_ms()
if now < last_ms: wait_until(last_ms)    # защита от clock back if now == last_ms:
seq = (seq + 1) & ((1<<12)-1)      # 12 бит if seq == 0: wait_next_ms()
else:
seq = 0 last_ms = now return (now-EPOCH)<<22      region<<17      worker<<12      seq

9. 4 ULID/UUID programmalarda

Go

go
// ULID t:= time. Now(). UTC()
entropy:= ulid. Monotonic(rand. New(rand. NewSource(t. UnixNano())), 0)
id:= ulid. MustNew(ulid. Timestamp(t), entropy)

//UUID v7 (if there is a library)
id:= uuid. Must(uuid. NewV7())

Node. js

js import { ulid } from 'ulid';
import { v4 as uuidv4 } from 'uuid';
const id1 = ulid();
const id2 = uuidv4(); // v4

Python

python import uuid, time id_v4 = uuid. uuid4()
For v7, use a library (for example, uuid6/7 third-party packages)

10) Kodlaşdyrmalar we teklipler

BD ('BYTEA', 'UUID') → ykjam we çalt. Gyrada:
  • Base32 Crockford (ULID): registre duýgur däl, wizual meňzeş nyşanlar ýok.
  • Base58: gysgaça Base32/64 adam okaýan tokenler üçin, URL-safe.
  • Base64url: gysga, ýöne URL-de '-' we '_'.

Setirleri deňeşdireniňizde dublikatlardan gaça durmak üçin registri we formaty (defisler/olaryň ýoklugy) durnuklaşdyryň.

11) Synag-pleýbuklar we gözegçilik etmek

Gapma-garşylyklar: metrika 'id _ collision _ total' (0 bolmaly), alert> 0.
Prefiksleriň paýlanyşy: uly baýtlaryň gistogrammasy - satyn alyjylary gözleýäris.
Öndüriş tizligi: 'ids _ per _ sec', p99 gizlinlik generatory.
Clock skew (Snowflake üçin): düwünleriň ofseti, "clock went back" wakalary.
Indeks guýruklary: p95/p99 'INSERT' latency; blokirlemeleriň/gyzgyn sahypalaryň paýy.

Game day:
  • Inject "clock drift/back" → generatoryň garaşýandygyna/geçýändigine göz ýetirýäris.
  • Миллисекундda 'sequence' dolmagy → Garaşmagyň barlagy next_ms.
  • Köpçülikleýin paralellik → Indeksde gulplama tupanlarynyň ýoklugy.

12) Anti-patternler

Jemgyýetçilik ID hökmünde AUTO_INCREMENT/SEQUENCE: çaklamak, syzmak. Içiňkiniň üstünde aç-açan däl şahsyýetnamany ulanyň.
UUIDv1 (IAS/wagt): gizlinlik.
Trillionlarça ýazgy üçin 64-bit tötänleýin ID: hakyky gapma-garşylyk töwekgelçiligi.
HA: SPOF we dar ýeri bolmadyk global "merkezi generator".
Clock back goragsyz wagt-sorted IDs: dublikatlar/regress tertibi.
Açyk wersiýasy/prefiksi bolmazdan dürli ID formatlaryny garyşdyrmak → debag/migrasiýalarda bulam-bujarlyk.
ID-ni dürli registrli/şekilli setirler hökmünde saklamak → gizlin dublikatlar.

13) Girizmegiň çek-sanawy

  • Domen talaplary üçin format (v4/v7/ULID/KSUID/Snowflake/SEQ/hash) saýlandy.
  • Tertibe bildirilýän talaplar kesgitlenildi (sortlanmak zerurmy).
  • Gapma-garşylyklaryň ähtimallygyna baha berildi (b bit, n nesil) we töwekgelçilik çäkleri berildi.
  • Kodirleme (BD-de binar + adam okaýan vitrin).
  • Wagt-sorted üçin - clock back, sequence-limits we NTP/PTP düzgün-nyzam goragy.
  • Köpçüligiň şahsyýetnamasy üçin - öňünden aýdyp bolmajak (random/ULID/KSUID), PII ýoklugy.
  • Şard-routing (hash (id)% N), köp tenant prefiksleri oýlandy.
  • Gözegçilik derejesi: gapma-garşylyklaryň, paýlanyşyň, gijikdirmeleriň, gijikdirmeleriň metrikleri.
  • Synagyň aşa köp bolmagy/ýokary bäsdeşlik/penjiräniň uzynlygy üçin synag ýagdaýlary.
  • Format, wersiýa, döwür, bit bellikleri we migrasiýa meýilnamasy.

14) FAQ

Q: Mikroservisler üçin "standart" näme saýlamaly?
A: UUIDv7 ýa-da ULID: wagt tertibi, köp entropiýa, gyrada ýönekeý nesil. Daşarky API üçin - ULID/UUIDv4 hem okal.

Q: Size gysga we okalýan şahsyýet gerek.
A: ULID/KSUID ýa-da Base58-kodlamak 128-bit tötänleýin/wagtlaýyn ID. Uzynlygy we gapma-garşylyklary ýada salyň.

Q: "Gysga san" şahsyýetnamasyny edip bolarmy, ýöne howpsuz?
A: Hawa: içerki SEQ saklaň we opaque tokenini (96-128 bit rand) ýa-da duzly Hashids + gol beriň.

Q: SEQ-den UUIDv7-e nädip göçmeli?
A: Täze 'id _ new' (UUID) sütünini giriziň, iki gezek ädim ätiň, täze şahsyýetnama baglanyşyklary çap ediň, soňra RK/daşarky açarlary geçiriň we köne açarlary aýyryň.

Q: Näme üçin ULID goşundylarym "gyzgyn" boldy?
A: Bir indeksde berk ösýän açarlary goýýarsyňyz. Partiýa/tenant bölüň, uly bitleri garyşdyryň, batch goşundylaryny ulanyň.

15) Netijeler

Gowy ID, wezipe üçin dogry häsiýetleriň toplumydyr: ýeterlik entropiýa, öňünden aýdyp boljak sortlama (zerur bolsa), howpsuz köpçülige aýan etmek we indeksleri sagdyn ulanmak. Ýönekeýlik we paýlanyş üçin UUIDv4/ULID/UUIDv7/KSUID saýlaň, dykyz monotoniýa we gysga açarlar üçin Snowflake (wagt tertibi bilen), ýerli tablisalar üçin yzygiderlilik, artefaktlar üçin mazmun heşleri. Synlamak we synlamak üçin bellik ediň - we kesgitleýjiler garaşylmadyk bir çeşme bolmagyny bes eder.

Contact

Biziň bilen habarlaşyň

Islendik sorag ýa-da goldaw boýunça bize ýazyp bilersiňiz.Biz hemişe kömek etmäge taýýar.

Telegram
@Gamble_GC
Integrasiýany başlamak

Email — hökmany. Telegram ýa-da WhatsApp — islege görä.

Adyňyz obýýektiw däl / islege görä
Email obýýektiw däl / islege görä
Tema obýýektiw däl / islege görä
Habar obýýektiw däl / islege görä
Telegram obýýektiw däl / islege görä
@
Eger Telegram görkezen bolsaňyz — Email-den daşary şol ýerden hem jogap bereris.
WhatsApp obýýektiw däl / islege görä
Format: ýurduň kody we belgi (meselem, +993XXXXXXXX).

Düwmäni basmak bilen siz maglumatlaryňyzyň işlenmegine razylyk berýärsiňiz.