MongoDB ObjectID Generátor - Egyedi BSON Azonosítók Létrehozása
Generáljon egyedi MongoDB ObjectID-kat azonnal ingyenes online eszközünkkel. Hozzon létre érvényes 12 bájtos BSON azonosítókat teszteléshez, fejlesztéshez és adatbázis-műveletekhez. Nem igényel telepítést.
MongoDB ObjectID Generátor
Dokumentáció
Mi az a MongoDB ObjectID?
A MongoDB ObjectID egy 12 bájtos érték, amelyet a MongoDB alapértelmezés szerint minden dokumentum _id mezőjéhez rendel. 24 kisbetűs hexadecimális karakterből áll, például: 507f1f77bcf86cd799439011. Ez az eszköz egyszerre 1 és 100 közötti számú érvényes ObjectID-t generál közvetlenül a böngészőben, adatbázis-kapcsolat nélkül.
A MongoDB ObjectID felépítése
Az ObjectID három, egymás után elhelyezett részből áll:
- Időbélyeg (4 bájt). Az 1970. január 1. (Unix-epoch) óta eltelt másodpercek száma, előjeltelen, big-endian formátumú számként tárolva. Azt rögzíti, mikor hozták létre az ObjectID-t. Négy bájtban 0 és 4 294 967 295 közötti értékek tárolhatók, ezért a mező 0 értékre fordul vissza 2106. február 7. 06:28:15 UTC-kor.
- Véletlen érték (5 bájt). A program indulásakor egyszer véletlenszerűen kiválasztott szám. A program által ezután létrehozott minden ObjectID ugyanazt a véletlen értéket használja újra, így a különböző számítógépeknek nem kell egyeztetniük.
- Számláló (3 bájt). Egy véletlenszerű ponton, 0 és 16 777 215 között induló szám, amely minden új ObjectID esetén 1 értékkel nő. Ha túllépi a 16 777 215 értéket, 0 értékre fordul vissza.
A részek egymás mellé helyezve így néznek ki:
1timestamp (8 hex chars) + random value (10 hex chars) + counter (6 hex chars) = 24 hex chars
2A régebbi MongoDB-illesztőprogramok a középső részt gépazonosítóból és folyamatazonosítóból állították elő véletlen szám helyett. A jelenlegi illesztőprogramok, köztük az eszköz mögött álló logika is, folyamatonként egyetlen véletlen, 5 bájtos értéket használnak.
A MongoDB ObjectID formátuma és képlete
Az ObjectID mögött nincs számtani képlet, ellentétben például a százalékszámítással vagy a kamatszámítással. Három szám hexadecimális szöveggé alakításával, majd egymás után fűzésével áll elő:
- Számítsd ki a Unix-epoch óta eltelt másodpercek aktuális számát, a 0 és 4 294 967 295 közötti tartományba visszaforgatva, hogy elférjen négy bájton. Írd fel 8 számjegyű hexadecimális számként.
- Vedd a folyamat rögzített véletlen értékét, amely 0 és 2^40 − 1 közötti szám. Írd fel 10 számjegyű hexadecimális számként.
- Vedd a számláló aktuális értékét 0 és 16 777 215 között. Írd fel 6 számjegyű hexadecimális számként, majd növeld a számlálót 1 értékkel a következő azonosítóhoz.
- Fűzd össze a három hexadecimális karakterláncot ebben a sorrendben egyetlen, 24 karakterből álló karakterlánccá.
Megoldott példa
Tegyük fel, hogy egy program 1 700 000 000 másodperces Unix-időnél indul, ami 2023. november 14., 22:13:20 UTC. A program a 3f2a91c8d4 véletlen értéket választja, és a számlálót 12 345 értéknél indítja.
- Időbélyeg hexadecimális formában:
6553f100 - Véletlen érték hexadecimális formában:
3f2a91c8d4 - Számláló hexadecimális formában:
003039
Ezek összefűzésével jön létre az első ObjectID:
6553f1003f2a91c8d4003039
Ha a program ugyanabban a másodpercben létrehoz egy második ObjectID-t, az időbélyeg és a véletlen érték változatlan marad, a számláló viszont 12 346 értékre nő (00303a):
6553f1003f2a91c8d400303a
Egy ObjectID visszafelé is értelmezhető. A 507f1f77bcf86cd799439011 érték első 8 karaktere, a 507f1f77, az epoch óta eltelt 1 350 508 407 másodpercre dekódolható, ami 2012. október 17., 21:13:27 UTC.
A MongoDB ObjectID gyakori felhasználási módjai
- Elsődleges kulcsok. A MongoDB automatikusan ObjectID-t helyez egy dokumentum
_idmezőjébe, hacsak nincs megadva más érték. - Létrehozási idő lekérdezése. Mivel az időbélyeg be van ágyazva, a program külön dátummező nélkül is kiolvashatja a dokumentum hozzávetőleges létrehozási idejét.
- Rendezés beszúrási sorrend szerint. A dokumentumok
_idszerinti rendezése nagyjából a létrehozási idő szerinti rendezést adja, mivel az érték elején az időbélyeg áll. - Teszt- és mockadatok. A fejlesztők generált ObjectID-kat használnak minta-dokumentumok és automatizált tesztek létrehozására, adatbázis futtatása nélkül.
MongoDB ObjectID és UUID összehasonlítása
A UUID (Universally Unique Identifier, univerzálisan egyedi azonosító) egy 16 bájtos érték, vagyis négy bájttal hosszabb az ObjectID-nál. A szabványos UUID általában minden részében véletlenszerű, ezért nem árulja el a létrehozás idejét, és nem rendezhető a létrehozási sorrend szerint. Az ObjectID rövidebb, és nagyjából időrendbe rendezett, ami az egyik oka annak, hogy a MongoDB alapértelmezés szerint ezt használja, bár nem biztosítja ugyanazt a formális egyediségi garanciát, mint a megfelelően generált UUID.
Gyakran ismételt kérdések
Mire használják a MongoDB ObjectID-t?
A MongoDB alapértelmezés szerint ezt az értéket helyezi a dokumentum _id mezőjébe, így minden dokumentum külön beállítás nélkül egyedi kulcsot kap.
Garantáltan egyediek a MongoDB ObjectID-k? Formális, matematikai értelemben nem, de az ütközésük rendkívül valószínűtlen. Két ObjectID-nak ugyanazzal a véletlen értékkel és ugyanazzal a számlálóállással kellene rendelkeznie ugyanabban a másodpercben, ami normális esetben csak egyetlen folyamaton belül fordul elő.
Kiolvasható a létrehozás dátuma egy ObjectID-ból? Igen. Az első 8 hexadecimális karakter, azaz 4 bájt tartalmazza a Unix-epoch óta eltelt másodpercek számát. E szám dátummá alakításával megkapható a hozzávetőleges létrehozási idő.
Hány ObjectID-t képes egyszerre létrehozni ez a generátor? Kötegenként 1 és 100 közötti számút. Egy kötegen belül minden azonosító ugyanazt a folyamat egészére érvényes véletlen értéket használja, és mindegyik számlálója eggyel nagyobb az előzőénél.
Használhatók a MongoDB ObjectID-k a MongoDB-n kívül is? Igen. Mivel egyszerű, hexadecimális szövegként kódolt 12 bájtos értékek, más rendszerekben is használhatók egyedi azonosítóként, bár egy adatbázis saját azonosítórendszere jobban megfelelhet az igényeinek.
Kapcsolódik ez a generátor valódi MongoDB-adatbázishoz? Nem. Teljes egészében a böngészőben fut, és nem olvas adatbázisból, illetve nem ír adatbázisba.
Hivatkozások
- "ObjectId." MongoDB-kézikönyv, https://www.mongodb.com/docs/manual/reference/method/ObjectId/.
- "ObjectId Specification." MongoDB BSON-specifikációk, https://github.com/mongodb/specifications/blob/master/source/bson-objectid/objectid.md.
- "BSON Types." BSON-specifikáció, https://bsonspec.org/spec.html.