Snowflake ID

Snowflake ID-urile, sau snowflake-urile, sunt o formă de identificator unic⁠(d) utilizat în calculul distribuit. Formatul a fost creat de Twitter și este folosit pentru ID-urile tweet-urilor, dar a fost adoptat și de alte companii, între care Discord și Instagram, care utilizează o versiune modificată.

Format

Snowflake-urile au 64 de biți, dintre care doar 63 sunt folosiți pentru a încăpea într-un număr întreg cu semn. Primii 41 de biți sunt o marcă temporală, reprezentând milisecunde de la un reper de timp⁠(d) ales. Următorii 10 biți reprezintă un ID de mașină, care previne coliziunile. Încă doisprezece biți reprezintă un număr de secvență pe mașină, pentru a permite crearea mai multor snowflake-uri în aceeași milisecundă. Numărul final este în general serializat în zecimal.[1]

Snowflake-urile se pot sorta în funcție de timp, deoarece se bazează pe momentul de timp la care au fost creați.[1] În plus, ora la care a fost creat un snowflake poate fi calculată din valoare. Aceasta poate fi folosită pentru a obține snowflake-urile (și obiectele asociate acestora) care au fost create înainte sau după o anumită dată.[2]

Exemplu

Un tweet produs de @Wikipedia în iunie 2022 are snowflake ID-ul 1541815603606036480. Numărul poate fi convertit în binar ca 0b 0001 0101 0110 0101 1010 0001 0001 1111 0110 0010 00|01 0111 1010|0000 0000 0000, unde simbolurile pipe separă cele trei părți ale ID-ului.

  • Primii 41 de biți (+bitul de semn) se convertesc în zecimal la 367597485448. Se adaugă acest număr la reperul de timp folosit de Twitter, a1288834974657 (în milisecunde de timp Unix⁠(d)), [3] ora Unix a tweet-ului este, prin urmare1656432460.105: 16:07:40.105 UTC.
  • Cei 10 biți din mijloc, 01 0111 1010 sunt ID-ul mașinii.
  • Ultimii 12 biți sunt zero, ceea ce înseamnă că acest tweet este primul tweet procesat de mașină la milisecunda dată.

Utilizare

Formatul a fost anunțat pentru prima dată de Twitter în iunie 2010.[4] Din cauza problemelor de implementare, abia la sfârșitul anului s-a lansat actualizarea care l-a inclus.[5] Twitter folosește snowflake ID-uri pentru tweet-uri, mesaje directe, utilizatori, liste și toate celelalte obiecte disponibile prin API.[6]

Discord folosește și el snowflake-uri, dar reperul de timp față de care se calculează este prima secundă a anului 2015.[2]

Instagram folosește o versiune modificată a formatului, în care 41 de biți reprezintă marca temporală, 13 biți sunt un ID shard⁠(d) și 10 biți sunt număr de secvență.[7]

Note

  1. ^ a b „twitter-archive/snowflake at b3f6a3c6ca”. . Accesat în . 
  2. ^ a b „API Reference”. Discord Developer Portal. Discord. Accesat în . 
  3. ^ „2019-08-03: TweetedAt: Finding Tweet Timestamps for Pre and Post Snowflake Tweet IDs”. 2019-08-03. 
  4. ^ King, Ryan (). „Announcing Snowflake”. blog.twitter.com. Twitter. Accesat în . 
  5. ^ Siegler, MG (). „Tweet IDs About To Get Jumbled In A Blizzard As Snowflake Is Set To Roll Live”. TechCrunch. Accesat în . 
  6. ^ „Twitter IDs”. Twitter Developer. Twitter. Accesat în . 
  7. ^ „Sharding & IDs at Instagram”. Instagram Engineering (în engleză). . Accesat în . 

Legături externe