Generátor MongoDB ObjectID - Vytvoření jedinečných BSON identifikátorů
Okamžitě generujte jedinečné MongoDB ObjectID pomocí našeho bezplatného online nástroje. Vytvářejte platné 12-bytové BSON identifikátory pro testování, vývoj a databázové operace. Není vyžadována žádná instalace.
Generátor MongoDB ObjectID
Dokumentace
Co je MongoDB ObjectID?
MongoDB ObjectID je hodnota o 12 bajtech, kterou MongoDB ve výchozím nastavení přiřazuje poli _id každého dokumentu. Zapisuje se jako 24 malých hexadecimálních znaků, například 507f1f77bcf86cd799439011. Tento nástroj generuje v prohlížeči najednou od 1 do 100 platných ObjectID, aniž by bylo potřeba připojení k databázi.
Struktura MongoDB ObjectID
ObjectID se skládá ze tří částí umístěných za sebou:
- Časové razítko (4 bajty). Počet sekund od 1. ledna 1970 (počátek unixového času), uložený jako bezznaménkové číslo v pořadí big-endian. Udává, kdy bylo ObjectID vytvořeno. Čtyři bajty uchovávají hodnoty od 0 do 4 294 967 295, takže se pole po 7. února 2106 v 06:28:15 UTC vrátí zpět na 0.
- Náhodná hodnota (5 bajtů). Číslo náhodně zvolené jednou při spuštění programu. Každé ObjectID, které tento program následně vytvoří, používá stejnou náhodnou hodnotu, takže různé počítače nemusí vzájemně koordinovat svou činnost.
- Čítač (3 bajty). Číslo, které začíná na náhodně zvoleném místě mezi 0 a 16 777 215 a při každém novém ObjectID se zvyšuje o 1. Pokud překročí 16 777 215, vrátí se zpět na 0.
Po spojení částí za sebou vypadají takto:
1timestamp (8 hex chars) + random value (10 hex chars) + counter (6 hex chars) = 24 hex chars
2Starší ovladače MongoDB vytvářely prostřední část z identifikátoru počítače a ID procesu namísto náhodného čísla. Současné ovladače, včetně logiky tohoto nástroje, používají pro každý proces jednu náhodnou hodnotu o 5 bajtech.
Formát a vzorec MongoDB ObjectID
Za ObjectID nestojí žádný aritmetický vzorec, na rozdíl od procentního podílu nebo výpočtu úroku. Sestavuje se převedením tří čísel na hexadecimální text a jejich spojením za sebou:
- Vezměte aktuální čas v sekundách od počátku unixového času a omezte jej do rozsahu 0 až 4 294 967 295, aby se vešel do čtyř bajtů. Zapište jej jako hexadecimální číslo o 8 znacích.
- Vezměte pevnou náhodnou hodnotu procesu, tedy číslo od 0 do 2^40 − 1. Zapište je jako hexadecimální číslo o 10 znacích.
- Vezměte aktuální hodnotu čítače v rozsahu od 0 do 16 777 215. Zapište ji jako hexadecimální číslo o 6 znacích a poté čítač zvyšte o 1 pro další ID.
- Spojte tři hexadecimální řetězce v tomto pořadí do jednoho řetězce o 24 znacích.
Příklad výpočtu
Předpokládejme, že se program spustí v unixovém čase 1 700 000 000 sekund, což je 14. listopadu 2023 v 22:13:20 UTC. Zvolí náhodnou hodnotu 3f2a91c8d4 a čítač spustí na hodnotě 12 345.
- Časové razítko v šestnáctkové soustavě:
6553f100 - Náhodná hodnota v šestnáctkové soustavě:
3f2a91c8d4 - Čítač v šestnáctkové soustavě:
003039
Spojením těchto částí vznikne první ObjectID:
6553f1003f2a91c8d4003039
Pokud program vygeneruje druhé ObjectID ve stejné sekundě, časové razítko a náhodná hodnota zůstanou stejné, ale čítač se zvýší na 12 346 (00303a):
6553f1003f2a91c8d400303a
Čtení ObjectID funguje i opačně. U hodnoty 507f1f77bcf86cd799439011 se prvních 8 znaků, 507f1f77, dekóduje na 1 350 508 407 sekund od počátku unixového času, což je 17. října 2012 v 21:13:27 UTC.
Běžná použití MongoDB ObjectID
- Primární klíče. MongoDB automaticky vloží ObjectID do pole
_iddokumentu, pokud není zadána jiná hodnota. - Zjištění času vytvoření. Protože je časové razítko součástí hodnoty, může program zjistit přibližný čas vytvoření dokumentu bez samostatného pole s datem.
- Řazení podle pořadí vložení. Řazení dokumentů podle
_idje přibližně seřadí podle času vytvoření, protože časové razítko je v hodnotě na prvním místě. - Testovací a fiktivní data. Vývojáři používají generovaná ObjectID k vytváření ukázkových dokumentů nebo automatizovaných testů bez spuštěné databáze.
MongoDB ObjectID vs. UUID
UUID (univerzálně jedinečný identifikátor) je hodnota o 16 bajtech, tedy o čtyři bajty větší než ObjectID. Standardní UUID je obvykle náhodný v celém rozsahu, takže neodhaluje čas vytvoření ani se neřadí podle pořadí vytvoření. ObjectID je kratší a přibližně časově uspořádaný, což je jedním z důvodů, proč jej MongoDB používá ve výchozím nastavení, neposkytuje však stejnou formální záruku jedinečnosti jako správně vygenerovaný UUID.
Často kladené otázky
K čemu se MongoDB ObjectID používá?
Je to výchozí hodnota, kterou MongoDB vkládá do pole _id dokumentu, takže každý dokument dostane jedinečný klíč bez dalšího nastavování.
Je u MongoDB ObjectID zaručena jedinečnost? Ne ve formálním matematickém smyslu, kolize jsou však velmi nepravděpodobné. Dvě ObjectID by musela mít stejnou náhodnou hodnotu a stejnou pozici čítače ve stejné sekundě, což se obvykle může stát pouze v rámci jediného procesu.
Lze z ObjectID zjistit datum vytvoření? Ano. Prvních 8 hexadecimálních znaků, tedy 4 bajty, obsahuje počet sekund od počátku unixového času. Převedením tohoto čísla na datum získáme přibližný čas vytvoření.
Kolik ObjectID může tento generátor vytvořit najednou? V jedné dávce od 1 do 100. Všechna ID v dávce sdílejí stejnou náhodnou hodnotu platnou pro celý proces a každé má čítač o jedna vyšší než předchozí.
Lze MongoDB ObjectID používat mimo MongoDB? Ano. Protože jde pouze o hodnoty o 12 bajtech zakódované jako hexadecimální text, fungují jako jedinečná ID i v jiných systémech, ačkoli vlastní schéma ID dané databáze může lépe vyhovovat jejím potřebám.
Je tento generátor připojen ke skutečné databázi MongoDB? Ne. Běží celý v prohlížeči a nečte z žádné databáze ani do ní nezapisuje.
Reference
- "ObjectId." Příručka MongoDB, https://www.mongodb.com/docs/manual/reference/method/ObjectId/.
- "ObjectId Specification." Specifikace MongoDB BSON, https://github.com/mongodb/specifications/blob/master/source/bson-objectid/objectid.md.
- "BSON Types." Specifikace BSON, https://bsonspec.org/spec.html.