# Snowflake-ID

Snowflake-IDs sind eine Form von eindeutigen Kennungen, die in der verteilten Datenverarbeitung verwendet werden. Das Format wurde von Twitter (jetzt X.com) erstellt und wird für die IDs von Tweets verwendet.
Es wird allgemein angenommen, dass jede Snowflake-ID einen einzigartigen Wert hat, ähnlich wie die Form einer Schneeflocke einzigartig ist. Das Format wurde auch von anderen Unternehmen übernommen, darunter Discord und Instagram. Das soziale Netzwerk Mastodon verwendet eine modifizierte Version.

## Format

Snowflake-IDs sind 64 Bit lange IDs. Nur 63 werden verwendet, um in ein vorzeichenbehaftetes Integer zu passen.
* Die ersten 41 Bits sind ein Zeitstempel, der Millisekunden seit der gewählten Referenzzeit darstellt.
* Die nächsten 10 Bits repräsentieren eine Maschinen-ID, um Kollisionen zu verhindern.
* 12 weitere Bits repräsentieren eine sequentielle Nummer pro Maschine, um die Erstellung mehrerer Snowflake IDs in derselben Millisekunde zu ermöglichen.
Die resultierende Zahl wird in der Regel dezimal dargestellt.
Snowflake-IDs sind durch den enthaltenen Zeitstempel nach Zeit sortierbar. Außerdem kann die Zeit, zu der eine Snowflake-ID erstellt wurde, aus der Snowflake-ID berechnet werden. Dies kann verwendet werden, um Snowflake-ID (und ihre zugehörigen Objekte) zu erhalten, die vor oder nach einem bestimmten Datum erstellt wurden.
Festes Kopfzeilenformat :
| Offsets | Oktett | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 3 | 3 |
| Oktett | Bit | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
| 0 | 0 | 0 | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits | Zeitstempel – erste 31 Bits |
| 4 | 32 | Zeitstempel – letzte 10 Bits | Zeitstempel – letzte 10 Bits | Zeitstempel – letzte 10 Bits | Zeitstempel – letzte 10 Bits | Zeitstempel – letzte 10 Bits | Zeitstempel – letzte 10 Bits | Zeitstempel – letzte 10 Bits | Zeitstempel – letzte 10 Bits | Zeitstempel – letzte 10 Bits | Zeitstempel – letzte 10 Bits | Maschinen-ID | Maschinen-ID | Maschinen-ID | Maschinen-ID | Maschinen-ID | Maschinen-ID | Maschinen-ID | Maschinen-ID | Maschinen-ID | Maschinen-ID | Maschinensequenznummer | Maschinensequenznummer | Maschinensequenznummer | Maschinensequenznummer | Maschinensequenznummer | Maschinensequenznummer | Maschinensequenznummer | Maschinensequenznummer | Maschinensequenznummer | Maschinensequenznummer | Maschinensequenznummer | Maschinensequenznummer |

### Beispiel

Ein Tweet, der im Juni 2022 von Wikipedia veröffentlicht wurde hat die Snowflake-ID 1541815603606036480.
Die Zahl kann in Binär umgewandelt werden als 00 0001 0101 0110 0101 1010 0001 0001 1111 0110 0010 00|01 0111 1010|0000 0000 0000, wobei die senkrechten Striche die drei Teile der ID kennzeichnen.
* Die ersten 41 (+ 1 oberstes Nullbit) Bits werden dezimal zu 367597485448. Addieren Sie diesen Wert zur X Epoche von 1288834974657 (in Unixzeit Millisekunden), ergibt sich die Unixzeit des Tweets 1656432460.105: 28. Juni 2022 16:07:40.105 UTC.
* Die mittleren 10 Bits 01 0111 1010 sind die Maschinen-ID.
* Die letzten 12 Bits dekodieren auf 0, was bedeutet, dass dieser Tweet der erste Tweet ist, der von der Maschine in der angegebenen Millisekunde verarbeitet wurde.

## Verwendung

Das Format wurde erstmals im Juni 2010 von X/Twitter angekündigt. Aufgrund von Implementierungsproblemen warteten sie jedoch bis später im Jahr, um das Update auszurollen.
* X verwendet Snowflake-IDs für Beiträge, Direktnachrichten, Benutzer, Listen und alle anderen Objekte, die über die API verfügbar sind.
* Discord verwendet ebenfalls Snowflakes, wobei ihre Epoche auf die erste Sekunde des Jahres 2015 gesetzt ist.
* Instagram verwendet eine modifizierte Version des Formats, mit 41 Bits für einen Zeitstempel, 13 Bits für eine Shard-ID und 10 Bits für eine Sequenznummer.
* Mastodons modifiziertes Format hat 48 Bits für einen Millisekunden-Zeitstempel, da es die UNIX-Epoche verwendet. Die verbleibenden 16 Bits sind für Sequenzdaten.