Zum Inhalt springen

MongoDB ObjectID-Generator - Eindeutige BSON-Bezeichner erstellen

Generieren Sie sofort eindeutige MongoDB ObjectIDs mit unserem kostenlosen Online-Tool. Erstellen Sie gültige 12-Byte-BSON-Bezeichner für Tests, Entwicklung und Datenbankoperationen. Keine Installation erforderlich.

MongoDB ObjectID-Generator

Ladekalkulator...
📚

Dokumentation

Was ist eine MongoDB-ObjectID?

Eine MongoDB-ObjectID ist ein Wert mit 12 Byte, den MongoDB standardmäßig dem Feld _id jedes Dokuments zuweist. Sie wird als 24 kleingeschriebene Hexadezimalzeichen dargestellt, zum Beispiel 507f1f77bcf86cd799439011. Dieses Tool erzeugt direkt im Browser pro Vorgang zwischen 1 und 100 gültige ObjectIDs, ohne dass eine Datenbankverbindung erforderlich ist.

Aufbau einer MongoDB-ObjectID

Eine ObjectID besteht aus drei Teilen, die direkt hintereinander angeordnet sind:

  • Zeitstempel (4 Byte). Die Anzahl der Sekunden seit 1. Januar 1970 (der Unix-Epoche), gespeichert als vorzeichenlose Zahl in Big-Endian-Reihenfolge. Er gibt an, wann die ObjectID erstellt wurde. Vier Byte können Werte von 0 bis 4.294.967.295 aufnehmen, daher läuft das Feld nach 7. Februar 2106, 06:28:15 UTC auf 0 zurück.
  • Zufallswert (5 Byte). Eine Zahl, die beim Start eines Programms einmal zufällig ausgewählt wird. Jede ObjectID, die dieses Programm danach erstellt, verwendet denselben Zufallswert, sodass verschiedene Computer sich nicht koordinieren müssen.
  • Zähler (3 Byte). Eine Zahl, die an einer zufälligen Stelle zwischen 0 und 16.777.215 beginnt und für jede neue ObjectID um 1 erhöht wird. Überschreitet sie 16.777.215, läuft sie auf 0 zurück.

Hintereinander angeordnet sehen die Teile so aus:

1timestamp (8 hex chars) + random value (10 hex chars) + counter (6 hex chars) = 24 hex chars
2

Ältere MongoDB-Treiber erstellten den mittleren Abschnitt aus einer Rechnerkennung und einer Prozess-ID statt aus einer Zufallszahl. Aktuelle Treiber, einschließlich der Logik hinter diesem Tool, verwenden stattdessen pro Prozess einen einzelnen Zufallswert mit 5 Byte.

Format und Formel der MongoDB-ObjectID

Hinter einer ObjectID steht keine arithmetische Formel, anders als etwa bei einer Prozent- oder Zinsberechnung. Sie wird erzeugt, indem drei Zahlen in hexadezimalen Text umgewandelt und direkt hintereinandergefügt werden:

  1. Nimm die aktuelle Zeit in Sekunden seit der Unix-Epoche, begrenzt auf den Bereich von 0 bis 4.294.967.295, damit sie in vier Byte passt. Schreibe sie als eine Hexadezimalzahl mit 8 Stellen.
  2. Nimm den festen Zufallswert des Prozesses, eine Zahl von 0 bis 2^40 − 1. Schreibe sie als eine Hexadezimalzahl mit 10 Stellen.
  3. Nimm den aktuellen Wert des Zählers, von 0 bis 16.777.215. Schreibe ihn als eine Hexadezimalzahl mit 6 Stellen und erhöhe den Zähler anschließend für die nächste ID um 1.
  4. Füge die drei hexadezimalen Zeichenfolgen in dieser Reihenfolge zu einer Zeichenfolge mit 24 Zeichen zusammen.

Rechenbeispiel

Angenommen, ein Programm startet bei der Unix-Zeit 1.700.000.000 Sekunden, also am 14. November 2023 um 22:13:20 UTC. Es wählt den Zufallswert 3f2a91c8d4 und startet seinen Zähler bei 12.345.

  • Zeitstempel als Hexadezimalzahl: 6553f100
  • Zufallswert als Hexadezimalzahl: 3f2a91c8d4
  • Zähler als Hexadezimalzahl: 003039

Zusammengesetzt ergibt dies die erste ObjectID:

6553f1003f2a91c8d4003039

Wenn das Programm in derselben Sekunde eine zweite ObjectID erzeugt, bleiben Zeitstempel und Zufallswert gleich, aber der Zähler steigt auf 12.346 (00303a):

6553f1003f2a91c8d400303a

Das Auslesen einer ObjectID funktioniert auch umgekehrt. Bei 507f1f77bcf86cd799439011 werden die ersten 8 Zeichen, 507f1f77, zu 1.350.508.407 Sekunden seit der Epoche dekodiert; das entspricht dem 17. Oktober 2012 um 21:13:27 UTC.

Häufige Verwendungen von MongoDB-ObjectIDs

  • Primärschlüssel. MongoDB trägt automatisch eine ObjectID in das Feld _id eines Dokuments ein, sofern kein anderer Wert angegeben wird.
  • Suche nach dem Erstellungszeitpunkt. Da der Zeitstempel eingebettet ist, kann ein Programm den ungefähren Erstellungszeitpunkt eines Dokuments ohne ein separates Datumsfeld auslesen.
  • Sortierung nach Einfügereihenfolge. Das Sortieren von Dokumenten nach _id sortiert sie ungefähr nach Erstellungszeit, da der Zeitstempel im Wert an erster Stelle steht.
  • Test- und Mock-Daten. Entwickler verwenden erzeugte ObjectIDs, um Beispieldokumente oder automatisierte Tests zu erstellen, ohne eine Datenbank zu betreiben.

MongoDB-ObjectID im Vergleich zu UUID

Eine UUID (Universally Unique Identifier, universell eindeutige Kennung) ist ein Wert mit 16 Byte, also vier Byte größer als eine ObjectID. Eine standardmäßige UUID ist normalerweise vollständig zufallsbasiert, gibt daher keinen Erstellungszeitpunkt preis und lässt sich nicht nach Erstellungsreihenfolge sortieren. Eine ObjectID ist kürzer und ungefähr zeitlich geordnet. Das ist ein Grund, warum MongoDB sie standardmäßig verwendet, obwohl sie nicht dieselbe formale Eindeutigkeitsgarantie bietet wie eine korrekt erzeugte UUID.

Häufig gestellte Fragen

Wofür wird eine MongoDB-ObjectID verwendet? Sie ist der Standardwert, den MongoDB in das Feld _id eines Dokuments einträgt, sodass jedes Dokument ohne zusätzliche Einrichtung einen eindeutigen Schlüssel erhält.

Sind MongoDB-ObjectIDs garantiert eindeutig? Nicht im formalen mathematischen Sinn, aber Kollisionen sind äußerst unwahrscheinlich. Zwei ObjectIDs müssten in derselben Sekunde denselben Zufallswert und dieselbe Zählerposition haben, was normalerweise nur innerhalb eines einzelnen Prozesses vorkommt.

Kann das Erstellungsdatum aus einer ObjectID ausgelesen werden? Ja. Die ersten 8 hexadezimalen Zeichen, also 4 Byte, enthalten die Anzahl der Sekunden seit der Unix-Epoche. Wird diese Zahl in ein Datum umgewandelt, ergibt sich der ungefähre Erstellungszeitpunkt.

Wie viele ObjectIDs kann dieser Generator auf einmal erzeugen? Zwischen 1 und 100 pro Stapel. Jede ID in einem Stapel verwendet denselben prozessweiten Zufallswert, und jede hat einen Zähler, der um eins höher ist als der der vorherigen ID.

Können MongoDB-ObjectIDs außerhalb von MongoDB verwendet werden? Ja. Da es sich lediglich um 12 Byte große Werte handelt, die als hexadezimaler Text codiert sind, funktionieren sie auch in anderen Systemen als eindeutige IDs. Das eigene ID-Schema einer Datenbank kann jedoch besser zu ihren Anforderungen passen.

Ist dieser Generator mit einer echten MongoDB-Datenbank verbunden? Nein. Er läuft vollständig im Browser und liest aus keiner Datenbank und schreibt in keine Datenbank.

Referenzen

  1. "ObjectId." MongoDB-Handbuch, https://www.mongodb.com/docs/manual/reference/method/ObjectId/.
  2. "ObjectId Specification." MongoDB-BSON-Spezifikationen, https://github.com/mongodb/specifications/blob/master/source/bson-objectid/objectid.md.
  3. "BSON Types." BSON-Spezifikation, https://bsonspec.org/spec.html.