MongoDB ObjectID Generator - Opret Entydige BSON-Identifikatorer
Generer øjeblikkeligt entydige MongoDB ObjectIDs med vores gratis online værktøj. Opret gyldige 12-byte BSON-identifikatorer til test, udvikling & databaseoperationer. Ingen installation påkrævet.
MongoDB ObjectID Generator
Dokumentation
Hvad er et MongoDB ObjectID?
Et MongoDB ObjectID er en værdi på 12 byte, som MongoDB som standard tildeler feltet _id i hvert dokument. Det skrives som 24 små hexadecimale tegn, for eksempel 507f1f77bcf86cd799439011. Dette værktøj genererer mellem 1 og 100 gyldige ObjectID'er ad gangen direkte i browseren uden behov for en databaseforbindelse.
MongoDB ObjectID's struktur
Et ObjectID består af tre dele, der står efter hinanden:
- Tidsstempel (4 byte). Antallet af sekunder siden 1. januar 1970 (Unix-epoken), gemt som et fortegnsfrit tal i big-endian-format. Det registrerer, hvornår ObjectID'et blev oprettet. Fire byte kan indeholde værdier fra 0 til 4.294.967.295, så feltet starter forfra ved 0 efter 7. februar 2106, 06:28:15 UTC.
- Tilfældig værdi (5 byte). Et tal, der vælges tilfældigt én gang, når et program starter. Alle ObjectID'er, som programmet derefter opretter, genbruger den samme tilfældige værdi, så forskellige computere ikke behøver at koordinere.
- Tæller (3 byte). Et tal, der starter på et tilfældigt punkt mellem 0 og 16.777.215 og øges med 1 for hvert nyt ObjectID. Hvis det overskrider 16.777.215, starter det forfra ved 0.
Når delene lægges efter hinanden, ser de sådan ud:
1timestamp (8 hex chars) + random value (10 hex chars) + counter (6 hex chars) = 24 hex chars
2Ældre MongoDB-drivere byggede midtersektionen ud fra en maskinidentifikator og et proces-id i stedet for et tilfældigt tal. Nuværende drivere, herunder logikken bag dette værktøj, bruger i stedet én tilfældig værdi på 5 byte pr. proces.
MongoDB ObjectID-format og -formel
Der findes ingen aritmetisk formel bag et ObjectID, i modsætning til en procentberegning eller en renteberegning. Det sammensættes ved at konvertere tre tal til hexadecimal tekst og sætte dem efter hinanden:
- Tag det aktuelle klokkeslæt i sekunder siden Unix-epoken, afgrænset til intervallet 0 til 4.294.967.295, så det kan rummes i fire byte. Skriv det som et hexadecimalt tal med 8 cifre.
- Tag processens faste tilfældige værdi, et tal fra 0 til 2^40 − 1. Skriv det som et hexadecimalt tal med 10 cifre.
- Tag tællerens aktuelle værdi fra 0 til 16.777.215. Skriv den som et hexadecimalt tal med 6 cifre, og øg derefter tælleren med 1 til det næste ID.
- Sammenkæd de tre hexadecimale strenge i den angivne rækkefølge til én tekststreng på 24 tegn.
Regneeksempel
Antag, at et program starter ved Unix-tid 1.700.000.000 sekunder, hvilket er 14. november 2023, 22:13:20 UTC. Det vælger den tilfældige værdi 3f2a91c8d4 og starter sin tæller ved 12.345.
- Tidsstempel i hex:
6553f100 - Tilfældig værdi i hex:
3f2a91c8d4 - Tæller i hex:
003039
Når disse sættes sammen, får man det første ObjectID:
6553f1003f2a91c8d4003039
Hvis programmet genererer et andet ObjectID i samme sekund, forbliver tidsstemplet og den tilfældige værdi de samme, men tælleren stiger til 12.346 (00303a):
6553f1003f2a91c8d400303a
Et ObjectID kan også aflæses omvendt. Givet 507f1f77bcf86cd799439011 dekoder de første 8 tegn, 507f1f77, til 1.350.508.407 sekunder siden epoken, hvilket er 17. oktober 2012, 21:13:27 UTC.
Almindelige anvendelser af MongoDB ObjectID'er
- Primærnøgler. MongoDB indsætter automatisk et ObjectID i et dokuments felt
_id, medmindre der angives en anden værdi. - Opslag efter oprettelsestidspunkt. Da tidsstemplet er indlejret, kan et program aflæse et dokuments omtrentlige oprettelsestidspunkt uden et separat datofelt.
- Sortering efter indsættelsesrækkefølge. Sortering af dokumenter efter
_idsorterer dem omtrent efter oprettelsestidspunkt, eftersom tidsstemplet kommer først i værdien. - Test- og mockdata. Udviklere bruger genererede ObjectID'er til at oprette eksempeldokumenter eller automatiserede test uden at køre en database.
MongoDB ObjectID kontra UUID
En UUID (Universally Unique Identifier) er en værdi på 16 byte, altså fire byte større end et ObjectID. En standard-UUID er normalt tilfældig overalt, så den afslører ikke et oprettelsestidspunkt og sorteres ikke efter oprettelsesrækkefølge. Et ObjectID er kortere og omtrent tidsordnet, hvilket er en af grundene til, at MongoDB bruger det som standard, selv om det ikke har den samme formelle entydighedsgaranti som en korrekt genereret UUID.
Ofte stillede spørgsmål
Hvad bruges et MongoDB ObjectID til?
Det er standardværdien, som MongoDB indsætter i et dokuments felt _id, så hvert dokument får en entydig nøgle uden ekstra opsætning.
Er MongoDB ObjectID'er garanteret entydige? Ikke i en formel, matematisk forstand, men sammenfald er ekstremt usandsynlige. To ObjectID'er skulle have den samme tilfældige værdi og den samme tællerposition i det samme sekund, hvilket normalt kun sker inden for én proces.
Kan oprettelsesdatoen aflæses fra et ObjectID? Ja. De første 8 hexadecimale tegn, 4 byte, indeholder antallet af sekunder siden Unix-epoken. Når tallet konverteres til en dato, får man det omtrentlige oprettelsestidspunkt.
Hvor mange ObjectID'er kan denne generator lave ad gangen? Mellem 1 og 100 pr. batch. Alle ID'er i en batch deler den samme tilfældige værdi for processen, og hvert ID har en tæller, der er én højere end den foregående.
Kan MongoDB ObjectID'er bruges uden for MongoDB? Ja. Da de blot er værdier på 12 byte kodet som hexadecimal tekst, fungerer de også som entydige ID'er i andre systemer, selv om en databases egen ID-ordning kan passe bedre til dens behov.
Har denne generator forbindelse til en rigtig MongoDB-database? Nej. Den kører udelukkende i browseren og læser ikke fra eller skriver til nogen database.
Referencer
- "ObjectId." MongoDB-manualen, https://www.mongodb.com/docs/manual/reference/method/ObjectId/.
- "ObjectId Specification." MongoDB BSON-specifikationer, https://github.com/mongodb/specifications/blob/master/source/bson-objectid/objectid.md.
- "BSON Types." BSON-specifikationen, https://bsonspec.org/spec.html.