Ugrás a tartalomra

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

Betöltési kalkulá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
2

A 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ő:

  1. 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.
  2. 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.
  3. 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.
  4. 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 _id mező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 _id szerinti 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

  1. "ObjectId." MongoDB-kézikönyv, https://www.mongodb.com/docs/manual/reference/method/ObjectId/.
  2. "ObjectId Specification." MongoDB BSON-specifikációk, https://github.com/mongodb/specifications/blob/master/source/bson-objectid/objectid.md.
  3. "BSON Types." BSON-specifikáció, https://bsonspec.org/spec.html.