Firebase Push ID

Eine Firebase Push ID ist ein 20 Zeichen langer Identifikator, der 120 Bits an Information enthält, dezentral generiert werden kann und (nahezu) garantiert eindeutig ist. Eine Implementierung in JavaScript findet man hier: https://gist.github.com/mikelehen/3596a30bd69384624c11

Diese UID ist alphabetisch nach dem Erstellungszeitpunkt sortierbar. Sie besteht aus einem 48 Bit langen Zeitstempel (8 Zeichen, Millisekunden seit 1970-01-01) gefolgt von einer 72 Bit langen Zufallszahl (12 Zeichen). Sollten mehrere UIDs auf der selben Maschine in der selben Millisekunde erzeugt werden, kann die Zufallszahl inkrementiert werden, um die Sortierreihenfolge beizubehalten.
Der Binärwert wird dabei base64 codiert, mit einem web-sicheren, nach ASCII-Werten sortierten Alphabet:

-0123456789ABCDEFGHIJKLMNOPQRSTU
VWXYZ_abcdefghijklmnopqrstuvwxyz

UUIDs

UUIDs (RFC 4122) sind Identifikatoren, die dezentral erzeugt werden können und deren Eindeutigkeit (nahezu) garantiert ist.

Format

Eine UUID besteht aus 8 Bytes (16 hexadezimalen Zeichen), die durch '-' in fünf Blöcke aufgeteilt werden.

aaaaaaaa-bbbb-Xccc-Yddd-eeeeeeeeeeee

Einige Bits haben dabei eine besondere Bedeutung:

  • Die vier Bits von X repräsentieren die Version der UUID.
  • Die drei most-significant Bits von Y repräsentieren die Variante. Die in RFC 4122 spezifizierte Variante ist 10xx.

nil

Bei der leeren UUID werden alle Bits auf '0' gesetzt.

00000000-0000-0000-0000-000000000000

Version 1: time based

Diese Version verwendet einen 60 Bit langen Zeitstempel (10tel Mikrosekunden seit 1582-10-15 UTC) in Kombination mit der Node-ID (MAC-Adresse des Systems) und einem Zähler. Um keine Informationen über das erzeugende System preiszugeben, kann anstatt der MAC-Adresse und des Zählers auch eine 62 Bit lange Zufallszahl verwendet werden.

Die einzelnen Blöcke der UUID beinhalten dabei:
a: Timestamp (niederwertige Bits)
b: Timestamp (mittelwertige Bits)
c: Timestamp (Bits mit höchster Wertigkeit)
d: Zähler
e: Node-ID

Version 4: random

Bei dieser Version der UUID enthalten alle verfügbaren Bits zufällige Werte. Damit ergibt sich eine 122 Bit lange Zufallszahl.