Sari la conținut

Generator de ObjectID MongoDB - Creează Identificatori BSON Unici

Generează instantaneu identificatori MongoDB ObjectID unici cu instrumentul nostru online gratuit. Creează identificatori BSON de 12 octeți valizi pentru testare, dezvoltare și operațiuni de baze de date. Nu este necesară instalarea.

Generator de ObjectID MongoDB

Calculator de încărcare...
📚

Documentație

Ce este un ObjectID MongoDB?

Un ObjectID MongoDB este o valoare de 12 octeți pe care MongoDB o atribuie implicit câmpului _id al fiecărui document. Este scrisă sub forma a 24 de caractere hexazecimale cu litere mici, de exemplu 507f1f77bcf86cd799439011. Acest instrument generează între 1 și 100 ObjectID-uri valide simultan, direct în browser, fără a necesita o conexiune la baza de date.

Structura unui ObjectID MongoDB

Un ObjectID este alcătuit din trei părți, așezate una după alta:

  • Marcă temporală (4 de octeți). Numărul de secunde de la 1 ianuarie 1970 (epoca Unix), stocat ca număr fără semn în ordine big-endian. Acesta indică momentul creării ObjectID-ului. Patru octeți pot conține valori de la 0 la 4.294.967.295, astfel încât câmpul revine la 0 după 7 februarie 2106, 06:28:15 UTC.
  • Valoare aleatorie (5 octeți). Un număr ales aleatoriu o singură dată, la pornirea unui program. Fiecare ObjectID creat ulterior de acel program reutilizează aceeași valoare aleatorie, astfel încât computerele diferite nu trebuie să se coordoneze.
  • Contor (3 octeți). Un număr care începe de la un punct aleatoriu între 0 și 16.777.215 și crește cu 1 pentru fiecare ObjectID nou. Dacă depășește 16.777.215, revine la 0.

Așezate cap la cap, părțile arată astfel:

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

Driverele MongoDB mai vechi construiau secțiunea din mijloc folosind un identificator al mașinii și un identificator al procesului, nu un număr aleatoriu. Driverele actuale, inclusiv logica din spatele acestui instrument, folosesc în schimb câte o valoare aleatorie de 5 octeți pentru fiecare proces.

Formatul și formula unui ObjectID MongoDB

Un ObjectID nu are la bază o formulă aritmetică, spre deosebire de un procent sau de un calcul al dobânzii. Este asamblat prin convertirea a trei numere în text hexazecimal și alipirea lor:

  1. Ia ora curentă în secunde de la epoca Unix, redusă în intervalul 0–4.294.967.295 pentru a încăpea în patru octeți. Scrie-o ca număr hexazecimal de 8 cifre.
  2. Ia valoarea aleatorie fixă a procesului, un număr de la 0 până la 2^40 − 1. Scrie-o ca număr hexazecimal de 10 cifre.
  3. Ia valoarea curentă a contorului, de la 0 la 16.777.215. Scrie-o ca număr hexazecimal de 6 cifre, apoi mărește contorul cu 1 pentru următorul identificator.
  4. Unește cele trei șiruri hexazecimale, în această ordine, într-un singur șir de 24 de caractere.

Exemplu de calcul

Să presupunem că un program pornește la timpul Unix de 1.700.000.000 secunde, adică la 14 noiembrie 2023, 22:13:20 UTC. Alege valoarea aleatorie 3f2a91c8d4 și pornește contorul de la 12.345.

  • Marca temporală în hexazecimal: 6553f100
  • Valoarea aleatorie în hexazecimal: 3f2a91c8d4
  • Contorul în hexazecimal: 003039

Îmbinarea acestora produce primul ObjectID:

6553f1003f2a91c8d4003039

Dacă programul generează un al doilea ObjectID în aceeași secundă, marca temporală și valoarea aleatorie rămân neschimbate, dar contorul crește la 12.346 (00303a):

6553f1003f2a91c8d400303a

Citirea unui ObjectID funcționează și în sens invers. Pentru 507f1f77bcf86cd799439011, primele sale 8 caractere, 507f1f77, se decodează în 1.350.508.407 secunde de la epocă, adică 17 octombrie 2012, 21:13:27 UTC.

Utilizări frecvente ale ObjectID-urilor MongoDB

  • Chei primare. MongoDB introduce automat un ObjectID în câmpul _id al unui document, dacă nu este furnizată o altă valoare.
  • Căutarea momentului creării. Deoarece marca temporală este inclusă, un program poate citi momentul aproximativ al creării unui document fără un câmp separat pentru dată.
  • Sortarea după ordinea inserării. Sortarea documentelor după _id le ordonează aproximativ după momentul creării, deoarece marca temporală apare prima în valoare.
  • Date de test și date simulate. Dezvoltatorii folosesc ObjectID-uri generate pentru a construi documente eșantion sau teste automatizate fără a rula o bază de date.

ObjectID MongoDB comparat cu UUID

Un UUID (identificator universal unic) este o valoare de 16 octeți, cu patru octeți mai mult decât un ObjectID. Un UUID standard este de obicei aleatoriu în întregime, astfel încât nu dezvăluie momentul creării și nu se sortează în ordinea creării. Un ObjectID este mai scurt și ordonat aproximativ cronologic, acesta fiind unul dintre motivele pentru care MongoDB îl folosește implicit, deși nu oferă aceeași garanție formală de unicitate ca un UUID generat corect.

Întrebări frecvente

La ce se folosește un ObjectID MongoDB? Este valoarea implicită pe care MongoDB o introduce în câmpul _id al unui document, astfel încât fiecare document primește o cheie unică fără configurare suplimentară.

ObjectID-urile MongoDB sunt garantat unice? Nu în sens formal, matematic, dar coliziunile sunt extrem de improbabile. Două ObjectID-uri ar trebui să aibă aceeași valoare aleatorie și aceeași poziție a contorului în aceeași secundă, situație care apare de obicei doar în cadrul unui singur proces.

Se poate citi data creării dintr-un ObjectID? Da. Primele 8 caractere hexazecimale, adică 4 octeți, conțin numărul de secunde de la epoca Unix. Convertirea acestui număr într-o dată oferă momentul aproximativ al creării.

Câte ObjectID-uri poate genera simultan acest instrument? Între 1 și 100 pe lot. Toate identificatoarele dintr-un lot folosesc aceeași valoare aleatorie la nivelul procesului, iar fiecare are contorul cu o unitate mai mare decât cel anterior.

Pot fi folosite ObjectID-urile MongoDB în afara MongoDB? Da. Deoarece sunt doar valori de 12 octeți codificate ca text hexazecimal, funcționează și ca identificatori unici în alte sisteme, deși schema de identificatori proprie a unei baze de date poate corespunde mai bine cerințelor sale.

Este acest generator conectat la o bază de date MongoDB reală? Nu. Rulează în întregime în browser și nu citește din nicio bază de date și nu scrie în nicio bază de date.

Referințe

  1. "ObjectId." Manualul MongoDB, https://www.mongodb.com/docs/manual/reference/method/ObjectId/.
  2. "ObjectId Specification." Specificațiile BSON MongoDB, https://github.com/mongodb/specifications/blob/master/source/bson-objectid/objectid.md.
  3. "BSON Types." Specificația BSON, https://bsonspec.org/spec.html.