MongoDB ObjectID-tunnisteen luoja - Luo yksilölliset BSON-tunnisteet
Luo yksilöllisiä MongoDB ObjectID-tunnisteita välittömästi ilmaisella verkkotyökalulla. Luo kelvollisia 12-tavuisia BSON-tunnisteita testaukseen, kehitykseen ja tietokantaoperaatioihin. Ei vaadi asennusta.
MongoDB ObjectID-generaattori
Dokumentaatio
Mikä on MongoDB ObjectID?
MongoDB ObjectID on 12-tavuinen arvo, jonka MongoDB määrittää oletusarvoisesti jokaisen dokumentin _id-kenttään. Se kirjoitetaan 24 pienaakkosin heksadesimaalimerkkinä, esimerkiksi 507f1f77bcf86cd799439011. Tämä työkalu luo selaimessa kerralla 1–100 kelvollista ObjectID:tä ilman tietokantayhteyttä.
MongoDB ObjectID:n rakenne
ObjectID koostuu kolmesta peräkkäin sijoitetusta osasta:
- Aikaleima (4 tavua). Sekuntien määrä ajankohdasta 1. tammikuuta 1970 (Unix-epookki), joka tallennetaan etumerkittömänä big-endian-lukuna. Se ilmaisee ObjectID:n luontiajan. Neljä tavua sisältävät arvot 0–4 294 967 295, joten kenttä palaa arvoon 0 7. helmikuuta 2106 jälkeen kello 06:28:15 UTC.
- Satunnaisarvo (5 tavua). Satunnaisesti valittu luku, joka valitaan kerran ohjelman käynnistyessä. Kaikki ohjelman sen jälkeen luomat ObjectID:t käyttävät samaa satunnaisarvoa, joten eri tietokoneiden ei tarvitse koordinoida keskenään.
- Laskuri (3 tavua). Luku, joka alkaa satunnaisesta kohdasta välillä 0–16 777 215 ja kasvaa 1:llä jokaisen uuden ObjectID:n kohdalla. Jos arvo ylittää 16 777 215, se palaa arvoon 0.
Peräkkäin aseteltuina osat näyttävät tältä:
1timestamp (8 hex chars) + random value (10 hex chars) + counter (6 hex chars) = 24 hex chars
2Vanhemmat MongoDB-ajurit muodostivat keskimmäisen osan koneen tunnisteesta ja prosessitunnuksesta eivätkä satunnaisluvusta. Nykyiset ajurit, myös tämän työkalun taustalla oleva toteutus, käyttävät sen sijaan yhtä prosessikohtaista 5-tavuista satunnaisarvoa.
MongoDB ObjectID:n muoto ja kaava
ObjectID:n taustalla ei ole prosenttiluvun tai korkolaskelman kaltaista aritmeettista kaavaa. Se muodostetaan muuntamalla kolme lukua heksadesimaalitekstiksi ja yhdistämällä ne peräkkäin:
- Ota Unix-epookista kulunut aika sekunteina ja rajoita se välille 0–4 294 967 295, jotta se mahtuu neljään tavuun. Kirjoita se 8-numeroisena heksadesimaalilukuna.
- Ota prosessin kiinteä satunnaisarvo, joka on luku väliltä 0–2^40 − 1. Kirjoita se 10-numeroisena heksadesimaalilukuna.
- Ota laskurin nykyinen arvo väliltä 0–16 777 215. Kirjoita se 6-numeroisena heksadesimaalilukuna ja kasvata laskurin arvoa 1:llä seuraavaa tunnistetta varten.
- Yhdistä kolme heksadesimaalimerkkijonoa tässä järjestyksessä yhdeksi 24-merkkiseksi merkkijonoksi.
Laskuesimerkki
Oletetaan, että ohjelma käynnistyy Unix-aikana 1 700 000 000 sekuntia, joka vastaa ajankohtaa 14. marraskuuta 2023, 22:13:20 UTC. Se valitsee satunnaisarvoksi 3f2a91c8d4 ja aloittaa laskurin arvosta 12 345.
- Aikaleima heksadesimaalimuodossa:
6553f100 - Satunnaisarvo heksadesimaalimuodossa:
3f2a91c8d4 - Laskuri heksadesimaalimuodossa:
003039
Näiden yhdistäminen tuottaa ensimmäisen ObjectID:n:
6553f1003f2a91c8d4003039
Jos ohjelma luo saman sekunnin aikana toisen ObjectID:n, aikaleima ja satunnaisarvo pysyvät samoina, mutta laskurin arvo kasvaa arvoon 12 346 (00303a):
6553f1003f2a91c8d400303a
ObjectID:n lukeminen toimii myös käänteisesti. Annetun arvon 507f1f77bcf86cd799439011 ensimmäiset 8 merkkiä, 507f1f77, vastaavat 1 350 508 407 sekuntia epookista eli ajankohtaa 17. lokakuuta 2012, 21:13:27 UTC.
MongoDB ObjectID:n yleiset käyttötarkoitukset
- Pääavaimet. MongoDB sijoittaa ObjectID:n automaattisesti dokumentin
_id-kenttään, ellei sille anneta muuta arvoa. - Luontiajan haku. Koska aikaleima sisältyy arvoon, ohjelma voi lukea dokumentin likimääräisen luontiajan ilman erillistä päivämääräkenttää.
- Lajittelu lisäysjärjestyksen mukaan. Dokumenttien lajittelu kentän
_idmukaan lajittelee ne likimäärin luontiajan perusteella, koska aikaleima on arvon alussa. - Testi- ja valetiedot. Kehittäjät käyttävät luotuja ObjectID:itä esimerkkidokumenttien tai automaattisten testien rakentamiseen ilman tietokannan käynnistämistä.
MongoDB ObjectID ja UUID
UUID (Universally Unique Identifier) on 16-tavuinen arvo eli neljä tavua ObjectID:tä suurempi. Tavallinen UUID on yleensä kauttaaltaan satunnainen, joten se ei paljasta luontiaikaa eikä järjesty luontijärjestyksen mukaan. ObjectID on lyhyempi ja suurin piirtein aikajärjestyksessä, mikä on yksi syy siihen, että MongoDB käyttää sitä oletusarvoisesti, vaikka sillä ei ole yhtä muodollista yksikäsitteisyystakuuta kuin asianmukaisesti muodostetulla UUID:llä.
Usein kysyttyä
Mihin MongoDB ObjectID:tä käytetään?
Se on oletusarvo, jonka MongoDB sijoittaa dokumentin _id-kenttään, joten jokainen dokumentti saa yksilöllisen avaimen ilman lisämäärityksiä.
Taataanko MongoDB ObjectID:iden yksikäsitteisyys? Ei muodollisessa matemaattisessa mielessä, mutta törmäykset ovat erittäin epätodennäköisiä. Kahdella ObjectID:llä pitäisi olla sama satunnaisarvo ja sama laskurin kohta samana sekuntina, mikä tapahtuu yleensä vain yhdessä prosessissa.
Voiko ObjectID:stä lukea luontipäivän? Kyllä. Ensimmäiset 8 heksadesimaalimerkkiä eli 4 tavua sisältävät Unix-epookista kuluneiden sekuntien määrän. Kun luku muunnetaan päivämääräksi, saadaan likimääräinen luontiaika.
Kuinka monta ObjectID:tä tämä generaattori voi luoda kerralla? Erän koko on 1–100 tunnistetta. Kaikilla saman erän tunnisteilla on sama prosessikohtainen satunnaisarvo, ja kunkin laskurin arvo on yhtä suurempi kuin edellisellä.
Voiko MongoDB ObjectID:itä käyttää MongoDB:n ulkopuolella? Kyllä. Koska ne ovat vain heksadesimaalitekstiksi koodattuja 12-tavuisia arvoja, ne toimivat yksilöllisinä tunnisteina myös muissa järjestelmissä, vaikka tietokannan oma tunnistejärjestelmä saattaa sopia sen tarpeisiin paremmin.
Onko tämä generaattori yhteydessä oikeaan MongoDB-tietokantaan? Ei. Se toimii kokonaan selaimessa eikä lue tietoja tietokannasta tai kirjoita niitä tietokantaan.
Viitteet
- "ObjectId." MongoDB Manual, https://www.mongodb.com/docs/manual/reference/method/ObjectId/.
- "ObjectId Specification." MongoDB BSON Specifications, https://github.com/mongodb/specifications/blob/master/source/bson-objectid/objectid.md.
- "BSON Types." BSON Specification, https://bsonspec.org/spec.html.