GH GambleHub

Тавлиди ID

1) Чаро ба идентификаторҳо диққат диҳед

Идентификатор (ID) - калиди асосии субъект: хатҳои асоси маълумот, паёмҳо, файл, фармоиш. Хосиятҳои он аз:
  • Ягонагӣ ва миқёс (бархӯрдҳо, афзоиши уфуқӣ).
  • Тартиб ва навъбандӣ (таносуби вақт, нусхабардорӣ, тарҳ).
  • Иҷрои нигаҳдорӣ (индексатсияҳо, саҳифаҳои гарм, андозаи калид).
  • Бехатарӣ (пешгӯинашаванда, ихроҷ, фарзия).
  • Истифодабарӣ/ҳамгироӣ (кӯтоҳ, URL-бехатар, на ҳолати ҳассос).

Интихоби ID як созиш байни энтропия, тартибот, дарозӣ, суръати насл ва истисмор мебошад.

2) Талабот ва шартҳои асосӣ

Ягонагӣ: эҳтимолияти бархӯрд бояд аз хатари қобили қабул камтар бошад.
Энтропия: "чӣ қадар тасодуфӣ" дорои ID (бит) мебошад.
Навъбандии вақт/k-sortable-Lexicographic ≈ вақт.
Монотония: пайдарпаии коҳишёбанда дар гиреҳ/ҷараён.
Ҷойгиршавии вуруд: то чӣ андоза воридкунии нав дар "дум" -и шохис мутамарказ шудааст (хатари саҳифаҳои гарм).
Пешгӯӣ: Оё тахмин кардани шаҳодатномаҳои ҳамсоя (барои амният/API муҳим аст) имконпазир аст.
Намояндагӣ: дуӣ/сатр, Base16/32/36/58/64, hyphens, парванда.

3) Оилаҳои асосии муайянкунанда

3. 1 UUID

v4 (тасодуфӣ): 122 бит энтропия. Бетартибӣ, барои бехатарӣ ва соддаӣ хуб аст. Минус: нишондиҳандаҳои "хаотикӣ" аз сабаби тақсимоти тасодуфӣ - бо вуҷуди ин, борҳоро баробар тақсим мекунад ва "саҳифаҳои гарм" -ро нест мекунад.
v1 (вақт + MAC): ташкил кунед, аммо MAC/вақтро (махфият) иҷро мекунад; аксар вақт канорагирӣ мекарданд.
v7 (вақти фармоишӣ): вақти миллисекунд + қисми тасодуфӣ. Тарроҳӣ барои гурӯҳбандии лексикографӣ аз рӯи вақт ва фишурдани хуб дар пойгоҳи додаҳо. Созиш: "думи гарм" -и шохис пайдо мешавад; бо шардинг/префиксҳо/афзоиш табобат карда мешавад.

Маслиҳатҳо

Барои талаботҳои берунаи API ва тартиботи номувофиқ - v4.
Барои пойгоҳи додаҳои ҳодиса/сабти ном ва калидҳои "мураттабшуда" - v7.

3. 2 ULID (Крокфорд Base32)

128 бит: 48 бит вақт (мс) + 80 бит тасодуфӣ. Лексикографӣ аз рӯи вақт мураттаб карда мешавад, ба одам дӯстона (бе 'I, L, O, U'), URL-бехатар. Варианти якхела мавҷуд аст (бо ҳамон мӯҳр, қисми тасодуфӣ меафзояд).
Тарафдор: хониш, тартибот, қобилият.
Омӯз: бо басомади хеле баланди воридкунӣ дар як вақт - "думи гарм".

3. 3 KSUID

160 бит: 32 бит вақт (сония) нисбат ба давраи + 128 бит тасодуфӣ. Диапазони калонтар ва навъбандии устувор, сатрҳо аз ULID кӯтоҳтар? (на - дигар, балки бо рамзгузории худ), барои гузоришҳо ва ашёҳои тақсимшуда хуб аст.

3. 4 Барфпӯши барфӣ (ID-ҳои навъбандишаванда)

Схемаи классикӣ (одат):

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

Хусусиятҳо: афзоиши монотон дар гиреҳ, вижагии квази-глобалӣ, намояндагии бинарии кӯтоҳ (64 бит).
Хатарҳо: вобастагии соат (кашиши вақт/регрессия), фарсудашавии пайдарпаӣ дар як моҳ, ҳамоҳангсозии битҳои минтақа/коргарон.
Табобат: муҳофизат аз "ақрабаки соат", пайдарпаии эҳтиётӣ, детектори вақт, интизоми PTP/NTP.

3. 5 пайдарпаии DB (SEQUENCE/IDENTITY)

Насли оддии якхела дар як DBMS/shard.
Тарафдор: кӯтоҳ, зуд, барои мизҳои маҳаллӣ қулай.
Омӯз: дар саросари ҷаҳон дар кластери тақсимшуда мушкил аст; пешгӯишаванда (ноамнӣ ҳамчун калиди оммавӣ), думи гармро ба вуҷуд меорад.

3. 6 ID-суроғаи мундариҷа (мундариҷаи ҳаш)

Муҳтаво SHA-256/Blake3 → ID-и устувор, такрорӣ, санҷиши якпорчагӣ, кэшкунӣ.
Тарафдор: детерминизм, муҳофизат аз ивазкунӣ.
Омӯз: насли гаронбаҳо (CPU), бархӯрдҳо сифрҳои амалӣ мебошанд, ҷудо кардани вақт, дарозӣ.

4) Бархӯрдҳо ва "парадокси зодрӯз" (интуитивӣ)

Эҳтимолияти бархӯрд барои шаҳодатномаи тасодуфии наслҳои 'b' bits at 'n тақрибан чунин аст:

p ≈ 1 - exp (-n (n-1 )/2/2 ^ b) ≈ n ^ 2/2 ^ (b + 1) (for small p)
Намунаҳо:
  • UUIDv4 (122 бит) дар n = 10 ī 12 (триллион) → p ~ 1e-14 (ночиз).
  • 64-бита тасодуфӣ → бо n = 10 → 9 аллакай p ~ 0. 027 (хатари назаррас).
  • Хулоса: тасодуфии 64-бита аксар вақт барои системаҳои бузург кофӣ нест; 96/128 битро истифода баред.

5) Индексҳо, саҳифаҳои гарм ва нигаҳдорӣ

Калидҳои тасодуфӣ (v4) навиштаҷотро дар байни дарахти индексатсия баробар тақсим мекунанд → "дум" вуҷуд надорад, аммо маҳалли кэш бадтар аст.
Вақти мураттабшуда (v7/ULID/Snowflake) "дар дум" → маҳалли беҳтар ва фишурдасозӣ гузошта мешавад, аммо хатари саҳифаҳои гарм дар зери сабти параллелии баланд.

Кам кардани думи гарм:
  • префиксҳо/шаршараҳо аз ҷониби иҷорагир/минтақа (илова 1-2 байт пеш аз вақт);
  • interleaving: қисми тасодуфӣ дар битҳои баландтар;
  • вурудоти партия, филфактор дар дарахти B, гузариши худкор ба BRIN/кластерӣ барои гузоришҳои калон.
Андоза муҳим аст:
  • 'UUID (16B)' vs 'BIGINT (8B) '/' INT8' хотира/кэш; Base32/58/64 қаторҳо андозаи 20-60% -ро зиёд мекунанд. Барои пойгоҳи додаҳо, бинариро нигоҳ доред, ба сатр дар канор гузоред.

6) Амният ва махфият

SEQUENCE/INT-ро ҳамчун ID-ҳои ҷамъиятӣ дар URL/API истифода набаред: ҳисоббаробаркунии манбаъҳо

Илова кардани ID (v4/v7/ULID/KSUID) тасодуфӣ, пешгӯинашаванда барои истинодҳои беруна.
PII-ро ба ID рамзгузорӣ накунед. Агар хоҳед, ки атрибут, рамзгузорӣ/аломатро фаъол созед (масалан, JWE/JWS) ё нишонаҳои ношаффофро истифода баред.
Рамзҳои бехатар бо URL: Base32 Крокфорд, Base58 (бе '0OI' l '), Base64url.

7) Бисёр иҷора, префиксҳо ва масир

Формат: '[TENANT _ PREFIX] - [ID]' ё дуӣ: 'renant _ id | | id'.
Тарафдор: филтрҳои зуд/тарафҳои иҷорагир, муҳофизат аз сканҳои N + 1.
Омӯз: метавонад зичии энтропияро дар битҳои баландтар бадтар кунад → тақсимотро баррасӣ кунед (ҳаши префикс).
Суффикси Hash (2-3 байт) бархӯрдҳоро коҳиш медиҳад ва ба масири shard кӯмак мекунад: 'shard = hash (id)% N'.

8) Тавсияҳои амалӣ барои интихоб

API, алоқаҳои ҷамъиятӣ, хизматрасониҳои тақсимшуда бе тартиби қатъӣ: UUIDv4, ULID/KSUID.
Гузоришҳо/рӯйдодҳо/фармоишҳо, ки дар онҳо мо одатан вақт ҷудо мекунем: UUIDv7 ё ULID (монотон).
Фарохмаҷрои ултра-баланд бо монотонияи маҳаллӣ ва калиди кӯтоҳ: Барфпӯши барфпӯши 64-бита (интизоми вақт талаб карда мешавад).
Ҷойгоҳҳои артефактҳо/сохтмонҳо/блобҳо: мундариҷаи адресатсияшаванда (SHA-256) ва дар боло - "намоиши" кӯтоҳмуддати мардона (Hashids/link).
Ҷадвалҳои маҳаллӣ дар як пойгоҳи додаҳо: SEQUENCE/IDENTY + "парпеч" -и беруна барои пайвандҳои ҷамъиятӣ (ниқоб).

9) Амалисозӣ ва намунаҳо

9. 1 Postgre- SQL

Бинарии UUID-ро нигоҳ доред, индексатсияҳо - 'btree' ё '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);
Ислоҳи пайдарпайи гарм: барои ID-и мураттабшудаи вақт, ба битҳои болоӣ "намак" илова кунед ё аз ҷониби иҷорагир ҳисоб кунед:
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 Редис (ҳисобкунакҳои атомӣ/монутония)

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

9. 3 Генератори барфпӯши барфӣ (псевдокод)

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 дар барномаҳо

Бирав

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())

Гиреҳ. 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) Рамзгузорӣ ва намояндагӣ

Бинарӣ дар пойгоҳи додаҳо ('BYTEA', 'UUID') → паймон ва зуд. Дар канор, табдил ба:
  • Base32 Крокфорд (ULID): парванда ҳассос нест, аломатҳои ба чашм монанд нестанд.
  • Base58: дар Base32/64 кӯтоҳ барои аломатҳои хониши инсон, URL-бехатар.
  • Base64url: кӯтоҳ, аммо '-' ва' _ 'дар URL.

Стабилизатсия кардани ҳолат ва формат (hyphens/none) барои пешгирӣ кардани такрорӣ ҳангоми муқоисаи сатрҳо.

11) Китобҳои санҷишӣ ва мушоҳидаҳо

Бархӯрдҳо: metric 'id _ collision _ total' (бояд 0 бошад), ҳушдор дар> 0.
Тақсимоти префикс: гистограммаи байтҳои баланд - мо дар ҷустуҷӯи харид ҳастем.
Меъёри тавлид: 'ids _ per _ sec', таъхири генератори p99.
Ковокии соат (барои барфпӯше): гиреҳҳои офсетӣ, рӯйдодҳои "соат баргашт".
Думҳои индексатсия: p95/p99 'INSERT' дермонӣ; таносуби қуфлҳо/саҳифаҳои гарм.

Рӯзи бозӣ:
  • Тазриқи "ақрабаки соат/қафо" → боварӣ ҳосил кунед, ки генератор интизор аст/иваз мекунад.
  • "sequence" пур аз миллисекундҳо → next_ms санҷиши интизорӣ.
  • Параллелизми оммавӣ → оё дар шохис тӯфони қуфлҳо мавҷуданд.

12) Анти-намунаҳо

AUTO_INCREMENT/SEQUENCE ҳамчун шаҳодатномаи оммавӣ: фарз, ихроҷ. ID-и ношаффофи оммавиро аз як дохили дохилӣ истифода баред.
UUIDv1 (MAC/вақт) берун: махфият.
ID-и тасодуфии 64-бита барои як триллион вуруд: хатари воқеии бархӯрд.
Глобалии "генератори марказӣ" бидуни HA: SPOF ва мушкилот.
ID-ҳои мураттабшудаи вақт бидуни муҳофизати ақрабаки соат: нусхабардорӣ/регрессияи тартибот.
Омезиши форматҳои гуногуни ID бидуни версияи возеҳ/префикс → бетартибӣ дар мубоҳисаҳо/муҳоҷират.
Нигоҳ доштани ID ҳамчун сатр бо регистрҳои гуногун/шаклҳо → нусхаҳои пинҳон.

13) Рӯйхати санҷиши амалисозӣ

  • Формати интихобшуда (v4/v7/ULID/KSUID/Snowflake/SEQ/hash) барои талаботҳои домейн.
  • Талаботҳои фармоиш муайян карда мешаванд (оё навъбандӣ талаб карда мешавад).
  • Эҳтимолияти бархӯрдҳо (b bits, n наслҳо) ҳисоб карда мешавад ва ҳадди хатар муқаррар карда мешавад.
  • Рамзгузорӣ тарҳрезӣ шудааст (бинарӣ дар DB + намоиши хониши инсонӣ).
  • Барои вақти мураттаб - муҳофизати ақрабаки соат, маҳдудиятҳои пайдарпаӣ ва интизоми NTP/PTP.
  • Барои шаҳодатномаҳои оммавӣ - пешгӯинашаванда (тасодуфӣ/ULID/KSUID), набудани PII.
  • Фикр кард hash (id)% N, префикси бисёр иҷорагир.
  • Мушоҳида: бархӯрд, тақсимот, ниҳонӣ, ченакҳои соат.
  • Ҳолатҳои санҷиш/ихтилоф/дарозии тиреза.
  • Формат, версия, давр, битмап ва ҳуҷҷатгузории нақшаи муҳоҷират.

14) FAQ

Савол: Барои microservices чӣ "пешфарз" -ро интихоб кардан мумкин аст?
A: UUIDv7 ё ULID: фармоиши вақт, бисёр энтропия, насли оддӣ дар канор. Барои API-ҳои беруна, ULID/UUIDv4 низ тақрибан аст.

Савол: Ба шаҳодатномаи кӯтоҳ ва барои инсон хондан лозим аст.
A: ULID/KSUID ё рамзгузории тасодуфии/муваққатии ID. Дар бораи дарозӣ ва бархӯрдҳо дар хотир доред.

Савол: Оё ID-ҳои "рақамии кӯтоҳ" -ро сохтан мумкин аст, аммо бехатар?
Ҷ: Бале: SEQ-и дохилиро нигоҳ доред ва дар берун аломати ношаффоф (96-128 бит тасодуфӣ) ё Хашидҳоро бо намак + имзо гузоред.

Савол: Чӣ гуна ман аз SEQ ба UUIDv7 муҳоҷират мекунам?
A: Сутуни нави 'id _ new' (UUID) -ро ворид кунед, ду-суруд, истинодҳоро ба ID-и нав нашр кунед, пас калидҳои DC/хориҷиро иваз кунед ва кӯҳнаи онро нест кунед.

Савол: Чаро вурудоти ULID-и ман "гарм" шуданд?
A: Калидҳои ба таври қатъӣ афзоишёбандаро ба як шохис гузоред. Қисм/иҷорагир, битҳои фармоишии баландро омехта кунед, вурудоти партияро истифода баред.

15) Натиҷаҳо

Шиносаи хуб маҷмӯи дурусти хосиятҳо барои мушкилот мебошад: энтропияи кофӣ, навъбандии пешбинишаванда (агар лозим бошад), ошкорбаёнии бехатар ва истифодаи солими нишондиҳандаҳо. Барои содда ва тақсимот UUIDv4/ULID/UUIDv7/KSUID, барфпӯши барфӣ барои якрангии зич ва калидҳои кӯтоҳ (барои интизоми вақт), пайдарпайии мизҳои маҳаллӣ, зарбаҳои мундариҷа барои артефактҳо интихоб кунед. Мушоҳидаҳо ва санҷишҳоро гузоред - ва идентификаторҳо манбаи ногаҳонӣ хоҳанд буд.

Contact

Тамос гиред

Барои саволҳо е дастгирӣ ба мо муроҷиат кунед.Мо ҳамеша омодаем!

Telegram
@Gamble_GC
Оғози интегратсия

Email — муҳим аст. Telegram е WhatsApp — ихтиерӣ.

Номи шумо ихтиерӣ
Email ихтиерӣ
Мавзӯъ ихтиерӣ
Паем ихтиерӣ
Telegram ихтиерӣ
@
Агар Telegram нависед — ҷавобро ҳамон ҷо низ мегиред.
WhatsApp ихтиерӣ
Формат: рамзи кишвар + рақам (масалан, +992XXXXXXXXX).

Бо фиристодани форма шумо ба коркарди маълумот розӣ ҳастед.