Salta al contingut

Generador d'ObjectID de MongoDB - Crear Identificadors BSON Únics

Genereu identificadors ObjectID de MongoDB únics a l'instant amb la nostra eina en línia gratuïta. Creeu identificadors BSON vàlids de 12 bytes per a proves, desenvolupament i operacions de bases de dades. No cal instal·lació.

Generador d'ObjectID de MongoDB

Calculadora de càrrega...
📚

Documentació

Què és un ObjectID de MongoDB?

Un ObjectID de MongoDB és un valor de 12 bytes que MongoDB assigna per defecte al camp _id de cada document. S’escriu com 24 caràcters hexadecimals en minúscula, per exemple 507f1f77bcf86cd799439011. Aquesta eina genera entre 1 i 100 ObjectID vàlids alhora, directament al navegador i sense necessitat de connexió a cap base de dades.

Estructura de l’ObjectID de MongoDB

Un ObjectID es compon de tres parts, col·locades una darrere l’altra:

  • Marca de temps (4 bytes). El nombre de segons des de l’1 de gener del 1970 (l’època Unix), emmagatzemat com un nombre sense signe en ordre de bytes gran-endià. Indica quan es va crear l’ObjectID. Quatre bytes contenen valors de 0 a 4.294.967.295, de manera que el camp torna a 0 després de 7 de febrer del 2106, 06:28:15 UTC.
  • Valor aleatori (5 bytes). Un nombre triat aleatòriament una sola vegada, quan s’inicia un programa. Tots els ObjectID que el programa crea després reutilitzen el mateix valor aleatori, de manera que els ordinadors diferents no s’han de coordinar.
  • Comptador (3 bytes). Un nombre que comença en un punt aleatori entre 0 i 16.777.215 i augmenta en 1 per cada ObjectID nou. Si supera 16.777.215, torna a 0.

Col·locades una darrere l’altra, les parts tenen aquest aspecte:

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

Els controladors antics de MongoDB construïen la secció central a partir d’un identificador de màquina i d’un identificador de procés, en lloc d’un nombre aleatori. Els controladors actuals, inclosa la lògica en què es basa aquesta eina, utilitzen un únic valor aleatori de 5 bytes per procés.

Format i fórmula de l’ObjectID de MongoDB

No hi ha cap fórmula aritmètica que governi un ObjectID, a diferència d’un percentatge o d’un càlcul d’interessos. Es forma convertint tres nombres en text hexadecimal i unint-los un darrere l’altre:

  1. Preneu l’hora actual en segons des de l’època Unix, limitada al rang de 0 a 4.294.967.295 perquè càpiga en quatre bytes. Escriviu-la com un nombre hexadecimal de 8 dígits.
  2. El valor aleatori fix del procés és un nombre de 0 fins a 2^40 − 1. S’escriu com un nombre hexadecimal de 10 dígits.
  3. Preneu el valor actual del comptador, de 0 a 16.777.215. Escriviu-lo com un nombre hexadecimal de 6 dígits i, a continuació, augmenteu el comptador en 1 per al pròxim ID.
  4. Uniu les tres cadenes hexadecimals, en aquest ordre, en una única cadena de 24 caràcters.

Exemple resolt

Suposem que un programa s’inicia en el temps Unix 1.700.000.000 segons, que correspon al 14 de novembre del 2023, 22:13:20 UTC. Tria el valor aleatori 3f2a91c8d4 i inicia el comptador en 12.345.

  • Marca de temps en hexadecimal: 6553f100
  • Valor aleatori en hexadecimal: 3f2a91c8d4
  • Comptador en hexadecimal: 003039

La unió d’aquests elements dona el primer ObjectID:

6553f1003f2a91c8d4003039

Si el programa genera un segon ObjectID en el mateix segon, la marca de temps i el valor aleatori es mantenen, però el comptador augmenta fins a 12.346 (00303a):

6553f1003f2a91c8d400303a

La lectura d’un ObjectID també es pot fer a la inversa. Donat 507f1f77bcf86cd799439011, els seus primers 8 caràcters, 507f1f77, es descodifiquen com a 1.350.508.407 segons des de l’època Unix, que corresponen a la data 17 d’octubre del 2012, 21:13:27 UTC.

Usos habituals dels ObjectID de MongoDB

  • Claus primàries. MongoDB posa automàticament un ObjectID al camp _id d’un document, tret que se’n proporcioni un altre valor.
  • Consulta del moment de creació. Com que la marca de temps hi està integrada, un programa pot llegir el moment aproximat de creació d’un document sense un camp de data separat.
  • Ordenació per ordre d’inserció. Ordenar els documents per _id els ordena aproximadament pel moment de creació, ja que la marca de temps apareix al principi del valor.
  • Dades de prova i simulació. Els desenvolupadors utilitzen ObjectID generats per crear documents d’exemple o proves automatitzades sense executar una base de dades.

ObjectID de MongoDB i UUID

Un UUID (identificador únic universal) és un valor de 16 bytes, quatre bytes més gran que un ObjectID. Un UUID estàndard sol ser aleatori en tota la seva extensió, de manera que no revela el moment de creació ni s’ordena segons l’ordre de creació. Un ObjectID és més curt i segueix aproximadament l’ordre temporal, que és un dels motius pels quals MongoDB l’utilitza per defecte, tot i que no ofereix la mateixa garantia formal d’unicitat que un UUID generat correctament.

Preguntes freqüents

Per a què s’utilitza un ObjectID de MongoDB? És el valor que MongoDB posa per defecte al camp _id d’un document, de manera que cada document obté una clau única sense cap configuració addicional.

Els ObjectID de MongoDB tenen garantida la unicitat? No en un sentit formal i matemàtic, però les col·lisions són extremadament improbables. Dos ObjectID haurien de tenir el mateix valor aleatori i la mateixa posició del comptador en el mateix segon, cosa que normalment només passa dins d’un únic procés.

Es pot llegir la data de creació a partir d’un ObjectID? Sí. Els primers 8 caràcters hexadecimals, 4 bytes, contenen el nombre de segons des de l’època Unix. Convertir aquest nombre en una data dona el moment aproximat de creació.

Quants ObjectID pot generar alhora aquesta eina? Entre 1 i 100 per lot. Tots els ID d’un lot comparteixen el mateix valor aleatori a escala de procés, i cadascun té un comptador superior en una unitat al de l’anterior.

Es poden utilitzar els ObjectID de MongoDB fora de MongoDB? Sí. Com que només són valors de 12 bytes codificats com a text hexadecimal, també funcionen com a identificadors únics en altres sistemes, tot i que l’esquema d’identificadors propi d’una base de dades pot adaptar-se millor a les seves necessitats.

Aquesta eina està connectada a una base de dades MongoDB real? No. S’executa completament al navegador i no llegeix ni escriu en cap base de dades.

Referències

  1. "ObjectId." Manual de MongoDB, https://www.mongodb.com/docs/manual/reference/method/ObjectId/.
  2. "ObjectId Specification." Especificacions BSON de MongoDB, https://github.com/mongodb/specifications/blob/master/source/bson-objectid/objectid.md.
  3. "BSON Types." Especificació BSON, https://bsonspec.org/spec.html.