Preskočiť na obsah

Generátor MongoDB ObjectID - Vytvorte jedinečné BSON identifikátory

Okamžite generujte jedinečné MongoDB ObjectID pomocou nášho bezplatného online nástroja. Vytvárajte platné 12-bajtové BSON identifikátory pre testovanie, vývoj a databázové operácie. Nevyžaduje sa žiadna inštalácia.

Generátor MongoDB ObjectID

Kalkulačka načítavania...
📚

Dokumentácia

Čo je MongoDB ObjectID?

MongoDB ObjectID je hodnota s veľkosťou 12 bajtov, ktorú MongoDB predvolene priraďuje poľu _id každého dokumentu. Zapisuje sa ako 24 malých hexadecimálnych znakov, napríklad 507f1f77bcf86cd799439011. Tento nástroj generuje naraz od 1 do 100 platných hodnôt ObjectID priamo v prehliadači, bez potreby pripojenia k databáze.

Štruktúra MongoDB ObjectID

ObjectID sa skladá z troch častí umiestnených za sebou:

  • Časová pečiatka (4 bajty). Počet sekúnd od 1. januára 1970 (začiatku unixového času), uložený ako neznamienkové číslo v poradí big-endian. Udáva, kedy bolo ObjectID vytvorené. Štyri bajty uchovávajú hodnoty od 0 do 4 294 967 295, takže po 7. februára 2106, 06:28:15 UTC sa pole vráti na 0.
  • Náhodná hodnota (5 bajtov). Číslo vybrané náhodne pri spustení programu. Každé ObjectID, ktoré tento program následne vytvorí, používa tú istú náhodnú hodnotu, takže rôzne počítače nemusia navzájom koordinovať svoju činnosť.
  • Počítadlo (3 bajty). Číslo, ktoré sa začína na náhodnej pozícii medzi 0 a 16 777 215 a pri každom novom ObjectID sa zvýši o 1. Ak prekročí 16 777 215, vráti sa na 0.

Po spojení častí za sebou vyzerajú takto:

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

Staršie ovládače MongoDB vytvárali strednú časť z identifikátora počítača a identifikátora procesu namiesto náhodného čísla. Súčasné ovládače vrátane logiky tohto nástroja používajú jednu náhodnú hodnotu s veľkosťou 5 bajtov pre každý proces.

Formát a vzorec MongoDB ObjectID

Za ObjectID nie je aritmetický vzorec, na rozdiel od výpočtu percent alebo úroku. Vzniká prevodom troch čísel na hexadecimálny text a ich spojením za sebou:

  1. Aktuálny čas v sekundách od začiatku unixového času sa ohraničí rozsahom od 0 do 4 294 967 295, aby sa zmestil do štyroch bajtov. Zapíše sa ako 8-miestne hexadecimálne číslo.
  2. Použije sa nemenná náhodná hodnota procesu, číslo od 0 do 2^40 − 1. Zapíše sa ako 10-miestne hexadecimálne číslo.
  3. Použije sa aktuálna hodnota počítadla od 0 do 16 777 215. Zapíše sa ako 6-miestne hexadecimálne číslo a potom sa počítadlo pre ďalšie ID zvýši o 1.
  4. Tri hexadecimálne reťazce sa v tomto poradí spoja do jedného reťazca s 24 znakmi.

Vyriešený príklad

Predpokladajme, že program sa spustí v unixovom čase 1 700 000 000 sekúnd, čo zodpovedá dátumu 14. novembra 2023, 22:13:20 UTC. Vyberie náhodnú hodnotu 3f2a91c8d4 a počítadlo začne na hodnote 12 345.

  • Časová pečiatka v šestnástkovej sústave: 6553f100
  • Náhodná hodnota v šestnástkovej sústave: 3f2a91c8d4
  • Počítadlo v šestnástkovej sústave: 003039

Spojením týchto hodnôt vznikne prvé ObjectID:

6553f1003f2a91c8d4003039

Ak program v tej istej sekunde vygeneruje druhé ObjectID, časová pečiatka a náhodná hodnota zostanú rovnaké, ale počítadlo sa zvýši na 12 346 (00303a):

6553f1003f2a91c8d400303a

ObjectID možno čítať aj opačne. Z hodnoty 507f1f77bcf86cd799439011 sa prvých 8 znakov, 507f1f77, dekóduje na 1 350 508 407 sekúnd od začiatku unixového času, čo zodpovedá dátumu 17. októbra 2012, 21:13:27 UTC.

Bežné použitia MongoDB ObjectID

  • Primárne kľúče. MongoDB automaticky vloží ObjectID do poľa _id dokumentu, ak nie je zadaná iná hodnota.
  • Vyhľadávanie podľa času vytvorenia. Keďže časová pečiatka je súčasťou hodnoty, program môže z dokumentu prečítať približný čas jeho vytvorenia bez samostatného poľa s dátumom.
  • Zoraďovanie podľa poradia vloženia. Zoradenie dokumentov podľa _id ich približne zoradí podľa času vytvorenia, pretože časová pečiatka je v hodnote na prvom mieste.
  • Testovacie a simulované údaje. Vývojári používajú vygenerované hodnoty ObjectID na vytváranie vzorových dokumentov alebo automatizovaných testov bez spustenia databázy.

MongoDB ObjectID a UUID

UUID (univerzálny jedinečný identifikátor) je hodnota s veľkosťou 16 bajtov, teda o štyri bajty väčšia než ObjectID. Štandardný UUID je zvyčajne náhodný v celom rozsahu, takže neodhaľuje čas vytvorenia ani sa nezoraďuje podľa poradia vytvorenia. ObjectID je kratší a približne usporiadaný podľa času, čo je jeden z dôvodov, prečo ho MongoDB používa predvolene, hoci neposkytuje rovnakú formálnu záruku jedinečnosti ako správne vygenerovaný UUID.

Najčastejšie otázky

Na čo sa MongoDB ObjectID používa? Je to predvolená hodnota, ktorú MongoDB vloží do poľa _id dokumentu, takže každý dokument dostane jedinečný kľúč bez ďalšieho nastavovania.

Je jedinečnosť MongoDB ObjectID zaručená? Nie v striktnom matematickom zmysle, ale kolízie sú mimoriadne nepravdepodobné. Dve hodnoty ObjectID by museli mať rovnakú náhodnú hodnotu aj rovnakú pozíciu počítadla v tej istej sekunde, čo sa za bežných okolností stáva iba v rámci jedného procesu.

Dá sa z ObjectID prečítať dátum vytvorenia? Áno. Prvých 8 hexadecimálnych znakov, teda 4 bajty, obsahuje počet sekúnd od začiatku unixového času. Prevod tohto čísla na dátum poskytne približný čas vytvorenia.

Koľko hodnôt ObjectID dokáže tento generátor vytvoriť naraz? Od 1 do 100 v jednej dávke. Všetky ID v dávke zdieľajú rovnakú náhodnú hodnotu platnú pre celý proces a každé má počítadlo o jeden vyššie než predchádzajúce.

Dajú sa MongoDB ObjectID používať aj mimo MongoDB? Áno. Keďže ide iba o hodnoty s veľkosťou 12 bajtov zakódované ako hexadecimálny text, fungujú ako jedinečné ID aj v iných systémoch, hoci vlastná schéma ID danej databázy môže lepšie vyhovovať jej potrebám.

Je tento generátor pripojený k skutočnej databáze MongoDB? Nie. Funguje výhradne v prehliadači a nečíta ani nezapisuje do žiadnej databázy.

Referencie

  1. "ObjectId." Príručka MongoDB, https://www.mongodb.com/docs/manual/reference/method/ObjectId/.
  2. "ObjectId Specification." Špecifikácie MongoDB BSON, https://github.com/mongodb/specifications/blob/master/source/bson-objectid/objectid.md.
  3. "BSON Types." Špecifikácia BSON, https://bsonspec.org/spec.html.