MongoDB ObjectID Generator - Stvaranje jedinstvenih BSON identifikatora
Trenutno generirajte jedinstvene MongoDB ObjectID-ove pomoću našeg besplatnog online alata. Stvorite valjane 12-byte BSON identifikatore za testiranje, razvoj i operacije baze podataka. Bez potrebe za instalacijom.
Generator MongoDB ObjectID-a
Dokumentacija
Što je MongoDB ObjectID?
MongoDB ObjectID vrijednost je od 12 bajtova koju MongoDB prema zadanim postavkama dodjeljuje polju _id svakog dokumenta. Zapisuje se kao 24 malih heksadecimalnih znakova, na primjer 507f1f77bcf86cd799439011. Ovaj alat izravno u pregledniku generira između 1 i 100 valjanih ObjectID-ova odjednom, bez potrebe za povezivanjem s bazom podataka.
Struktura MongoDB ObjectID-a
ObjectID se sastoji od triju dijelova poredanih jedan za drugim:
- Vremenska oznaka (4 bajta). Broj sekundi od 1. siječnja 1970. (Unixove epohe), pohranjen kao nepredznačeni broj zapisan po načelu big-endian. Bilježi vrijeme nastanka ObjectID-a. Četiri bajta sadrže vrijednosti od 0 do 4.294.967.295, pa se polje vraća na 0 nakon 7. veljače 2106. u 06:28:15 UTC-u.
- Slučajna vrijednost (5 bajtova). Broj nasumično odabran jednom pri pokretanju programa. Svaki ObjectID koji taj program potom izradi ponovno upotrebljava istu slučajnu vrijednost, pa različita računala ne moraju međusobno usklađivati rad.
- Brojač (3 bajta). Broj koji počinje na slučajno odabranoj točki između 0 i 16.777.215 te se povećava za 1 za svaki novi ObjectID. Ako prijeđe 16.777.215, vraća se na 0.
Kada se dijelovi poredaju jedan iza drugoga, izgledaju ovako:
1timestamp (8 hex chars) + random value (10 hex chars) + counter (6 hex chars) = 24 hex chars
2Stariji upravljački programi za MongoDB srednji su dio izgrađivali od identifikatora računala i identifikatora procesa, a ne od slučajnog broja. Aktualni upravljački programi, uključujući logiku ovog alata, umjesto toga upotrebljavaju jednu slučajnu vrijednost od 5 bajtova po procesu.
Format i formula MongoDB ObjectID-a
Iza ObjectID-a ne stoji aritmetička formula, za razliku od izračuna postotka ili kamate. On se sastavlja pretvaranjem triju brojeva u heksadecimalni tekst i njihovim spajanjem jedan za drugim:
- Uzmite trenutačno vrijeme u sekundama od Unixove epohe, svedeno u raspon od 0 do 4.294.967.295 kako bi stalo u četiri bajta. Zapišite ga kao heksadecimalni broj od 8 znamenki.
- Uzmite nepromjenjivu slučajnu vrijednost procesa, broj od 0 do 2^40 − 1. Zapišite ga kao heksadecimalni broj od 10 znamenki.
- Uzmite trenutačnu vrijednost brojača, od 0 do 16.777.215. Zapišite je kao heksadecimalni broj od 6 znamenki, a zatim povećajte brojač za 1 za sljedeći ID.
- Spojite ta tri heksadecimalna niza tim redoslijedom u jedan niz od 24 znakova.
Primjer s rješenjem
Pretpostavimo da se program pokrene u Unixovo vrijeme 1.700.000.000 sekundi, što odgovara datumu 14. studenoga 2023. u 22:13:20 UTC-u. Odabire slučajnu vrijednost 3f2a91c8d4 i pokreće brojač s vrijednošću 12.345.
- Vremenska oznaka u heksadecimalnom zapisu:
6553f100 - Slučajna vrijednost u heksadecimalnom zapisu:
3f2a91c8d4 - Brojač u heksadecimalnom zapisu:
003039
Spajanjem se dobiva prvi ObjectID:
6553f1003f2a91c8d4003039
Ako program generira drugi ObjectID u istoj sekundi, vremenska oznaka i slučajna vrijednost ostaju iste, ali brojač raste na 12.346 (00303a):
6553f1003f2a91c8d400303a
Čitanje ObjectID-a funkcionira i obrnuto. Za vrijednost 507f1f77bcf86cd799439011 njegovih prvih 8 znakova, 507f1f77, dekodira se u 1.350.508.407 sekundi od epohe, što odgovara datumu 17. listopada 2012. u 21:13:27 UTC-u.
Uobičajene upotrebe MongoDB ObjectID-ova
- Primarni ključevi. MongoDB automatski umeće ObjectID u polje
_iddokumenta, osim ako je zadana druga vrijednost. - Dohvat vremena nastanka. Budući da je vremenska oznaka ugrađena, program može očitati približno vrijeme nastanka dokumenta bez zasebnog datumskog polja.
- Razvrstavanje prema redoslijedu umetanja. Razvrstavanje dokumenata prema
_idpribližno ih razvrstava prema vremenu nastanka jer vremenska oznaka dolazi prva u vrijednosti. - Testni i lažni podaci. Razvojni programeri upotrebljavaju generirane ObjectID-ove za izradu oglednih dokumenata ili automatiziranih testova bez pokretanja baze podataka.
MongoDB ObjectID u odnosu na UUID
UUID (univerzalni jedinstveni identifikator) vrijednost je od 16 bajtova, odnosno četiri bajta veća od ObjectID-a. Standardni UUID obično je u cijelosti nasumičan, pa ne otkriva vrijeme nastanka niti se razvrstava prema redoslijedu nastanka. ObjectID je kraći i približno poredan prema vremenu, što je jedan od razloga zašto ga MongoDB upotrebljava prema zadanim postavkama, iako ne pruža isto formalno jamstvo jedinstvenosti kao pravilno generirani UUID.
Često postavljana pitanja
Za što se upotrebljava MongoDB ObjectID?
To je zadana vrijednost koju MongoDB umeće u polje _id dokumenta, pa svaki dokument dobiva jedinstveni ključ bez dodatnog postavljanja.
Jesu li MongoDB ObjectID-ovi zajamčeno jedinstveni? Ne u formalnom, matematičkom smislu, ali kolizije su krajnje malo vjerojatne. Dva bi ObjectID-a morala imati istu slučajnu vrijednost i isti položaj brojača u istoj sekundi, što se u pravilu događa samo unutar jednog procesa.
Može li se iz ObjectID-a očitati datum nastanka? Da. Prvih 8 heksadecimalnih znakova, odnosno 4 bajta, sadrži broj sekundi od Unixove epohe. Pretvaranjem tog broja u datum dobiva se približno vrijeme nastanka.
Koliko ObjectID-ova ovaj generator može izraditi odjednom? Između 1 i 100 po grupi. Svaki ID u grupi dijeli istu slučajnu vrijednost procesa, a njegov je brojač za jedan veći od prethodnoga.
Mogu li se MongoDB ObjectID-ovi upotrebljavati izvan MongoDB-a? Da. Budući da su to samo vrijednosti od 12 bajtova kodirane kao heksadecimalni tekst, mogu služiti kao jedinstveni ID-ovi i u drugim sustavima, iako shema ID-ova određene baze podataka možda bolje odgovara njezinim potrebama.
Je li ovaj generator povezan sa stvarnom bazom podataka MongoDB? Ne. U cijelosti se izvršava u pregledniku i ne čita iz baze podataka niti u nju zapisuje.
Reference
- "ObjectId." Priručnik za MongoDB, https://www.mongodb.com/docs/manual/reference/method/ObjectId/.
- "ObjectId Specification." BSON specifikacije MongoDB-a, https://github.com/mongodb/specifications/blob/master/source/bson-objectid/objectid.md.
- "BSON Types." BSON specifikacija, https://bsonspec.org/spec.html.