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]