MongoDB ObjectID generaator - Looge ainulaadsed BSON identifikaatorid
Genereerige koheselt ainulaadsed MongoDB ObjectID-d meie tasuta veebiriista abil. Looge kehtivad 12-baidised BSON identifikaatorid testimiseks, arenduseks ja andmebaasi toiminguteks. Paigaldamine pole vajalik.
MongoDB ObjectID generaator
Dokumentatsioon
Mis on MongoDB ObjectID?
MongoDB ObjectID on 12-baidine väärtus, mille MongoDB määrab vaikimisi iga dokumendi väljale _id. See kirjutatakse 24 väiketähtedest koosneva kuueteistkümnendmärgina, näiteks 507f1f77bcf86cd799439011. See tööriist genereerib korraga brauseris otse 1 kuni 100 kehtivat ObjectID-d, ilma et oleks vaja andmebaasiühendust.
MongoDB ObjectID struktuur
ObjectID koosneb kolmest järjestikku paiknevast osast:
- Ajatempel (4 baiti). Sekundite arv alates 1. jaanuar 1970 (Unixi epohh), mis salvestatakse märgita, suurema järgu bait ees oleva arvuna. See näitab, millal ObjectID loodi. Neli baiti mahutavad väärtused 0 kuni 4 294 967 295, mistõttu väli pöördub pärast 7. veebruar 2106 kell 06:28:15 UTC tagasi väärtusele 0.
- Juhuslik väärtus (5 baiti). Juhuslikult valitud arv, mis määratakse programmi käivitumisel ühe korra. Kõik selle programmi hiljem loodud ObjectID-d kasutavad sama juhuslikku väärtust, mistõttu eri arvutid ei pea omavahel koordineeruma.
- Loendur (3 baiti). Arv, mis algab juhuslikust punktist vahemikus 0 kuni 16 777 215 ja suureneb iga uue ObjectID korral 1 võrra. Kui see ületab 16 777 215, pöördub see tagasi väärtusele 0.
Otsast otsani paigutatuna näevad osad välja nii:
1timestamp (8 hex chars) + random value (10 hex chars) + counter (6 hex chars) = 24 hex chars
2Vanemad MongoDB draiverid moodustasid keskmise osa masina identifikaatorist ja protsessi ID-st, mitte juhuslikust arvust. Praegused draiverid, sealhulgas selle tööriista aluseks olev loogika, kasutavad protsessi kohta üht juhuslikku 5-baidist väärtust.
MongoDB ObjectID vorming ja valem
ObjectID taga ei ole aritmeetilist valemit, erinevalt protsendi- või intressiarvutusest. See koostatakse kolme arvu teisendamisel kuueteistkümnendtekstiks ja nende järjestikku ühendamisel:
- Võta praegune aeg sekundites alates Unixi epohhist ning taanda see vahemikku 0 kuni 4 294 967 295, et see mahuks nelja baiti. Kirjuta see 8-kohalise kuueteistkümnendarvuna.
- Võta protsessi püsiv juhuslik väärtus, arv vahemikus 0 kuni 2^40 − 1. Kirjuta see 10-kohalise kuueteistkümnendarvuna.
- Võta loenduri praegune väärtus vahemikus 0 kuni 16 777 215. Kirjuta see 6-kohalise kuueteistkümnendarvuna ja suurenda loendurit järgmise ID jaoks 1 võrra.
- Ühenda kolm kuueteistkümnendstringi selles järjekorras üheks 24-märgiliseks stringiks.
Läbiarvutatud näide
Oletame, et programm käivitub Unixi ajal 1 700 000 000 sekundit, mis vastab kuupäevale 14. november 2023 kell 22:13:20 UTC. See valib juhuslikuks väärtuseks 3f2a91c8d4 ja alustab loenduriga 12 345.
- Ajatempel kuueteistkümnendkujul:
6553f100 - Juhuslik väärtus kuueteistkümnendkujul:
3f2a91c8d4 - Loendur kuueteistkümnendkujul:
003039
Nende ühendamisel saadakse esimene ObjectID:
6553f1003f2a91c8d4003039
Kui programm genereerib samal sekundil teise ObjectID, jäävad ajatempel ja juhuslik väärtus samaks, kuid loendur suureneb väärtuseni 12 346 (00303a):
6553f1003f2a91c8d400303a
ObjectID lugemine toimib ka vastupidises suunas. Väärtuse 507f1f77bcf86cd799439011 esimesed 8 märki ehk 507f1f77 dekodeeruvad väärtuseks 1 350 508 407 sekundit alates epohhist, mis vastab kuupäevale 17. oktoober 2012 kell 21:13:27 UTC.
MongoDB ObjectID levinud kasutusalad
- Primaarvõtmed. MongoDB paigutab ObjectID dokumendi väljale
_idautomaatselt, kui ei anta teistsugust väärtust. - Loomisaja leidmine. Kuna ajatempel on väärtusse kodeeritud, saab programm lugeda dokumendi ligikaudset loomisaega ilma eraldi kuupäevaväljata.
- Sorteerimine lisamisjärjekorra järgi. Dokumentide sortimine välja
_idjärgi järjestab need ligikaudu loomise aja järgi, sest ajatempel paikneb väärtuses esimesena. - Test- ja näidisandmed. Arendajad kasutavad genereeritud ObjectID-sid näidisdokumentide koostamiseks või automatiseeritud testide tegemiseks ilma andmebaasi käivitamata.
MongoDB ObjectID ja UUID
UUID (Universally Unique Identifier ehk universaalne unikaalne identifikaator) on 16-baidine väärtus, seega neli baiti suurem kui ObjectID. Standardne UUID on tavaliselt kogu ulatuses juhuslik, mistõttu ei avalda see loomisaega ega järjestu loomise järjekorras. ObjectID on lühem ja ligikaudu loomise aja järgi järjestatud, mis on üks põhjus, miks MongoDB seda vaikimisi kasutab, kuigi sellel ei ole nõuetekohaselt genereeritud UUID-ga samaväärset formaalset unikaalsusgarantiid.
Korduma kippuvad küsimused
Milleks MongoDB ObjectID-d kasutatakse?
See on vaikeväärtus, mille MongoDB dokumendi väljale _id paigutab, nii et iga dokument saab ilma lisaseadistuseta unikaalse võtme.
Kas MongoDB ObjectID-d on garanteeritult unikaalsed? Mitte formaalses matemaatilises mõttes, kuid kokkupõrked on äärmiselt ebatõenäolised. Kahel ObjectID-l peaks olema samal sekundil sama juhuslik väärtus ja sama loenduri positsioon; tavaliselt saab see juhtuda ainult ühe protsessi sees.
Kas ObjectID-st saab lugeda loomise kuupäeva? Jah. Esimesed 8 kuueteistkümnendmärki ehk 4 baiti sisaldavad sekundite arvu alates Unixi epohhist. Selle arvu kuupäevaks teisendamisel saadakse ligikaudne loomisaeg.
Kui palju ObjectID-sid saab see generaator korraga luua? Partii kohta vahemikus 1 kuni 100. Kõigil sama partii ID-del on sama protsessiülene juhuslik väärtus ning igaühe loendur on eelmisest ühe võrra suurem.
Kas MongoDB ObjectID-sid saab kasutada väljaspool MongoDB-d? Jah. Kuna need on lihtsalt kuueteistkümnendtekstina kodeeritud 12-baidised väärtused, toimivad need unikaalsete ID-dena ka teistes süsteemides, kuigi mõne andmebaasi enda ID-skeem võib selle vajadustele paremini sobida.
Kas see generaator on ühendatud päris MongoDB andmebaasiga? Ei. See töötab täielikult brauseris ega loe ühestki andmebaasist ega kirjuta ühtegi andmebaasi.
Viited
- "ObjectId." MongoDB käsiraamat, https://www.mongodb.com/docs/manual/reference/method/ObjectId/.
- "ObjectId Specification." MongoDB BSON-i spetsifikatsioonid, https://github.com/mongodb/specifications/blob/master/source/bson-objectid/objectid.md.
- "BSON Types." BSON-i spetsifikatsioon, https://bsonspec.org/spec.html.