Preskoči na vsebino

Generator MongoDB ObjectID - Ustvarjanje edinstvenih BSON identifikatorjev

Trenutno ustvarite edinstvene MongoDB ObjectID z našim brezplačnim spletnim orodjem. Ustvarjajte veljavne 12-bitne BSON identifikatorje za testiranje, razvoj in podatkovne operacije. Brez namestitve.

Generator MongoDB ObjectID

Kalkulator nalaganja...
📚

Dokumentacija

Kaj je MongoDB ObjectID?

MongoDB ObjectID je vrednost velikosti 12 bajtov, ki jo MongoDB privzeto dodeli polju _id vsakega dokumenta. Zapisana je kot 24 malih šestnajstiških znakov, na primer 507f1f77bcf86cd799439011. To orodje neposredno v brskalniku naenkrat ustvari med 1 in 100 veljavnih identifikatorjev ObjectID, pri čemer povezava z zbirko podatkov ni potrebna.

Zgradba MongoDB ObjectID

ObjectID je sestavljen iz treh delov, postavljenih drug za drugim:

  • Časovni žig (4 bajti). Število sekund od datuma 1. januar 1970 (začetek epohe Unix), shranjeno kot nepredznačeno število v vrstnem redu big-endian. Zapisuje čas nastanka ObjectID. Štirje bajti lahko vsebujejo vrednosti od 0 do 4.294.967.295, zato se polje po datumu 7. februar 2106 ob 06:28:15 UTC vrne na 0.
  • Naključna vrednost (5 bajtov). Število, naključno izbrano enkrat ob zagonu programa. Vsak ObjectID, ki ga program ustvari pozneje, uporablja isto naključno vrednost, zato se različnim računalnikom ni treba usklajevati.
  • Števec (3 bajti). Število, ki se začne na naključni točki med 0 in 16.777.215 ter se za vsak nov ObjectID poveča za 1. Če preseže 16.777.215, se vrne na 0.

Deli so, postavljeni drug za drugim, videti takole:

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

Starejši gonilniki MongoDB so srednji del sestavljali iz identifikatorja računalnika in ID-ja procesa, ne iz naključnega števila. Sodobni gonilniki, vključno z logiko tega orodja, namesto tega uporabljajo eno naključno vrednost velikosti 5 bajtov na proces.

Oblika in formula MongoDB ObjectID

Za ObjectID ne obstaja aritmetična formula, drugače kot pri odstotku ali izračunu obresti. Sestavljen je tako, da se tri števila pretvorijo v šestnajstiško besedilo in združijo drugo za drugim:

  1. Vzemi trenutni čas v sekundah od začetka epohe Unix in ga omeji na območje od 0 do 4.294.967.295, da se prilega štirim bajtom. Zapiši ga kot šestnajstiško število z 8 ciframi.
  2. Vzemi nespremenljivo naključno vrednost procesa, število od 0 do 2^40 − 1. Zapiši jo kot šestnajstiško število z 10 ciframi.
  3. Vzemi trenutno vrednost števca, od 0 do 16.777.215. Zapiši jo kot šestnajstiško število s 6 ciframi, nato za naslednji ID povečaj števec za 1.
  4. Tri šestnajstiške nize v tem vrstnem redu združi v en niz z 24 znaki.

Primer z rešitvijo

Recimo, da se program zažene ob času Unix 1.700.000.000 sekund, kar je 14. november 2023 ob 22:13:20 UTC. Izbere naključno vrednost 3f2a91c8d4 in začne števec pri 12.345.

  • Časovni žig v šestnajstiškem zapisu: 6553f100
  • Naključna vrednost v šestnajstiškem zapisu: 3f2a91c8d4
  • Števec v šestnajstiškem zapisu: 003039

Z združitvijo dobimo prvi ObjectID:

6553f1003f2a91c8d4003039

Če program v isti sekundi ustvari drugi ObjectID, časovni žig in naključna vrednost ostaneta enaka, števec pa se poveča na 12.346 (00303a):

6553f1003f2a91c8d400303a

Tudi branje ObjectID deluje v obratni smeri. Pri vrednosti 507f1f77bcf86cd799439011 se prvih 8 znakov, 507f1f77, dekodira v 1.350.508.407 sekund od začetka epohe, kar je 17. oktober 2012 ob 21:13:27 UTC.

Pogoste uporabe MongoDB ObjectID

  • Primarni ključi. MongoDB samodejno vstavi ObjectID v polje _id dokumenta, razen če je podana drugačna vrednost.
  • Iskanje po času nastanka. Ker je časovni žig vgrajen, lahko program prebere približni čas nastanka dokumenta brez ločenega datumskega polja.
  • Razvrščanje po vrstnem redu vstavljanja. Razvrščanje dokumentov po _id jih približno razvrsti po času nastanka, saj je časovni žig v vrednosti na prvem mestu.
  • Testni in simulirani podatki. Razvijalci uporabljajo ustvarjene ObjectID za izdelavo vzorčnih dokumentov ali avtomatiziranih testov, ne da bi zagnali podatkovno zbirko.

MongoDB ObjectID v primerjavi z UUID

UUID (univerzalni enolični identifikator) je vrednost velikosti 16 bajtov, kar je štiri bajte več kot pri ObjectID. Standardni UUID je običajno v celoti naključen, zato ne razkriva časa nastanka in ni razvrščen po vrstnem redu nastanka. ObjectID je krajši in približno urejen po času, kar je eden od razlogov, da ga MongoDB uporablja privzeto, vendar nima enakega formalnega jamstva enoličnosti kot pravilno ustvarjen UUID.

Pogosta vprašanja

Za kaj se uporablja MongoDB ObjectID? To je privzeta vrednost, ki jo MongoDB vstavi v polje _id dokumenta, zato vsak dokument dobi enolični ključ brez dodatne nastavitve.

Ali je enoličnost MongoDB ObjectID zagotovljena? Ne v formalnem, matematičnem smislu, vendar so trki izjemno malo verjetni. Dva ObjectID bi morala imeti isto naključno vrednost in isti položaj števca v isti sekundi, kar se običajno zgodi le znotraj enega procesa.

Ali je mogoče iz ObjectID prebrati datum nastanka? Da. Prvih 8 šestnajstiških znakov oziroma 4 bajti vsebuje število sekund od začetka epohe Unix. Pretvorba tega števila v datum poda približni čas nastanka.

Koliko ObjectID lahko to orodje ustvari naenkrat? Med 1 in 100 na paket. Vsi ID-ji v paketu imajo isto naključno vrednost za celoten proces, vsak pa ima števec, ki je za ena večji od prejšnjega.

Ali je mogoče MongoDB ObjectID uporabljati zunaj MongoDB? Da. Ker so to le vrednosti velikosti 12 bajtov, kodirane kot šestnajstiško besedilo, delujejo kot enolični ID-ji tudi v drugih sistemih, čeprav je lastna shema ID-jev zbirke podatkov morda primernejša za njene potrebe.

Ali je to orodje povezano z resnično zbirko podatkov MongoDB? Ne. Deluje v celoti v brskalniku ter ne bere iz nobene zbirke podatkov in vanjo ne zapisuje.

Viri

  1. "ObjectId." Priročnik MongoDB, https://www.mongodb.com/docs/manual/reference/method/ObjectId/.
  2. "ObjectId Specification." Specifikacije BSON za MongoDB, https://github.com/mongodb/specifications/blob/master/source/bson-objectid/objectid.md.
  3. "BSON Types." Specifikacija BSON, https://bsonspec.org/spec.html.