MongoDB ObjectID Generatorius - Kurkite Unikalius BSON Identifikatorius
Akimirksniu generuokite unikalius MongoDB ObjectID su mūsų nemokamu internetiniu įrankiu. Kurkite galiojančius 12 baitų BSON identifikatorius testavimui, kūrimui ir duomenų bazės operacijoms. Nereikia jokios instaliacijos.
MongoDB ObjectID generatorius
Dokumentacija
Kas yra MongoDB ObjectID?
MongoDB ObjectID yra 12 baitų reikšmė, kurią MongoDB pagal numatytuosius nustatymus priskiria kiekvieno dokumento laukui _id. Ji užrašoma 24 mažosiomis šešioliktainėmis raidėmis, pavyzdžiui, 507f1f77bcf86cd799439011. Šis įrankis naršyklėje vienu metu sugeneruoja nuo 1 iki 100 galiojančių ObjectID reikšmių, todėl duomenų bazės ryšys nereikalingas.
MongoDB ObjectID struktūra
ObjectID sudaro trys viena po kitos einančios dalys:
- Laiko žyma (4 baitai). Sekundžių skaičius nuo 1970 m. sausio 1 d. (Unix epochos pradžios), saugomas kaip beženklis skaičius didžiųjų galūnių baitų tvarka. Ji nurodo, kada ObjectID buvo sukurtas. Keturiuose baituose telpa reikšmės nuo 0 iki 4 294 967 295, todėl laukelio reikšmė po 2106 m. vasario 7 d. 06:28:15 UTC vėl tampa 0.
- Atsitiktinė reikšmė (5 baitai). Atsitiktinai vieną kartą, paleidus programą, parenkamas skaičius. Vėliau kiekviena tos programos sukurta ObjectID reikšmė naudoja tą pačią atsitiktinę reikšmę, todėl skirtingiems kompiuteriams nereikia tarpusavyje derintis.
- Skaitiklis (3 baitai). Skaičius, prasidedantis atsitiktinėje vietoje nuo 0 iki 16 777 215 ir padidėjantis 1 su kiekviena nauja ObjectID reikšme. Jei jis viršija 16 777 215, vėl tampa 0.
Sudėjus šias dalis vieną po kitos, gaunama tokia struktūra:
1timestamp (8 hex chars) + random value (10 hex chars) + counter (6 hex chars) = 24 hex chars
2Senesnės MongoDB tvarkyklės vidurinę dalį sudarydavo iš kompiuterio identifikatoriaus ir proceso ID, o ne iš atsitiktinio skaičiaus. Dabartinės tvarkyklės, įskaitant šio įrankio logiką, vietoj to kiekvienam procesui naudoja vieną atsitiktinę 5 baitų reikšmę.
MongoDB ObjectID formatas ir formulė
ObjectID nėra pagrįstas aritmetine formule, kitaip nei procentinė dalis ar palūkanų skaičiavimas. Jis sudaromas tris skaičius perskaičiuojant į šešioliktainį tekstą ir sujungiant juos vieną po kito:
- Paimkite dabartinį laiką sekundėmis nuo Unix epochos, apribotą intervalu nuo 0 iki 4 294 967 295, kad tilptų į keturis baitus. Užrašykite jį kaip 8 skaitmenų šešioliktainį skaičių.
- Paimkite nekintamą proceso atsitiktinę reikšmę – skaičių nuo 0 iki 2^40 − 1. Užrašykite ją kaip 10 skaitmenų šešioliktainį skaičių.
- Paimkite dabartinę skaitiklio reikšmę nuo 0 iki 16 777 215. Užrašykite ją kaip 6 skaitmenų šešioliktainį skaičių, tada padidinkite skaitiklį 1, kad gautumėte kitą ID.
- Sujunkite tris šešioliktaines eilutes nurodyta tvarka į vieną 24 simbolių eilutę.
Išspręstas pavyzdys
Tarkime, programa paleidžiama Unix laiku 1 700 000 000 sekundžių, t. y. 2023 m. lapkričio 14 d. 22:13:20 UTC. Ji pasirenka atsitiktinę reikšmę 3f2a91c8d4 ir pradeda skaitiklį nuo 12 345.
- Laiko žyma šešioliktainiu pavidalu:
6553f100 - Atsitiktinė reikšmė šešioliktainiu pavidalu:
3f2a91c8d4 - Skaitiklis šešioliktainiu pavidalu:
003039
Jas sujungus gaunama pirmoji ObjectID reikšmė:
6553f1003f2a91c8d4003039
Jei programa tą pačią sekundę sugeneruoja antrą ObjectID reikšmę, laiko žyma ir atsitiktinė reikšmė nesikeičia, tačiau skaitiklis padidėja iki 12 346 (00303a):
6553f1003f2a91c8d400303a
ObjectID galima perskaityti ir atvirkščiai. Pateiktos reikšmės 507f1f77bcf86cd799439011 pirmosios 8 raidės, 507f1f77, dekoduojamos į 1 350 508 407 sekundes nuo epochos pradžios, t. y. 2012 m. spalio 17 d. 21:13:27 UTC.
Dažniausi MongoDB ObjectID panaudojimo būdai
- Pirminiai raktai. MongoDB automatiškai įrašo ObjectID į dokumento lauką
_id, nebent pateikiama kita reikšmė. - Paieška pagal sukūrimo laiką. Kadangi laiko žyma yra įterpta į reikšmę, programa gali nustatyti apytikslį dokumento sukūrimo laiką nenaudodama atskiro datos laukelio.
- Rikiavimas pagal įterpimo tvarką. Rikiuojant dokumentus pagal
_id, jie apytiksliai surikiuojami pagal sukūrimo laiką, nes laiko žyma reikšmėje pateikiama pirmiausia. - Testavimo ir imitaciniai duomenys. Programuotojai naudoja sugeneruotas ObjectID reikšmes pavyzdiniams dokumentams kurti arba automatiniams testams atlikti nepaleidžiant duomenų bazės.
MongoDB ObjectID ir UUID
UUID (visuotinai unikalus identifikatorius) yra 16 baitų reikšmė, keturiais baitais didesnė už ObjectID. Standartinis UUID paprastai yra visur atsitiktinis, todėl neatskleidžia sukūrimo laiko ir nėra rikiuojamas pagal sukūrimo tvarką. ObjectID yra trumpesnis ir apytiksliai rikiuojamas pagal laiką. Tai viena iš priežasčių, kodėl MongoDB jį naudoja pagal numatytuosius nustatymus, nors jis nesuteikia tokios pačios formalios unikalumo garantijos kaip tinkamai sugeneruotas UUID.
Dažnai užduodami klausimai
Kam naudojama MongoDB ObjectID?
Tai numatytoji reikšmė, kurią MongoDB įrašo į dokumento lauką _id, todėl kiekvienas dokumentas gauna unikalų raktą be papildomos sąrankos.
Ar MongoDB ObjectID reikšmės garantuotai unikalios? Ne formaliąja matematine prasme, tačiau sutapimai yra itin mažai tikėtini. Dvi ObjectID reikšmės turėtų turėti tą pačią atsitiktinę reikšmę ir tą pačią skaitiklio padėtį tą pačią sekundę. Paprastai tai gali įvykti tik viename procese.
Ar iš ObjectID galima nustatyti sukūrimo datą? Taip. Pirmieji 8 šešioliktainiai simboliai, arba 4 baitai, nurodo sekundžių skaičių nuo Unix epochos pradžios. Perskaičiavus šį skaičių į datą, gaunamas apytikslis sukūrimo laikas.
Kiek ObjectID reikšmių šis generatorius gali sukurti vienu metu? Nuo 1 iki 100 vienoje partijoje. Visos partijos ID reikšmės turi tą pačią visam procesui priskirtą atsitiktinę reikšmę, o kiekvienos skaitiklis yra vienetu didesnis už ankstesnės.
Ar MongoDB ObjectID galima naudoti ne MongoDB aplinkoje? Taip. Kadangi tai tik 12 baitų reikšmės, užkoduotos šešioliktainiu tekstu, jos gali būti naudojamos ir kitose sistemose kaip unikalūs ID, nors konkrečios duomenų bazės ID schema gali labiau atitikti jos poreikius.
Ar šis generatorius prijungtas prie tikros MongoDB duomenų bazės? Ne. Jis veikia tik naršyklėje ir neskaito iš jokios duomenų bazės bei į ją neįrašo.
Šaltiniai
- "ObjectId." MongoDB vadovas, https://www.mongodb.com/docs/manual/reference/method/ObjectId/.
- "ObjectId Specification." MongoDB BSON specifikacijos, https://github.com/mongodb/specifications/blob/master/source/bson-objectid/objectid.md.
- "BSON Types." BSON specifikacija, https://bsonspec.org/spec.html.