Vai al contenuto

Generatore di ObjectID MongoDB - Crea Identificatori BSON Unici

Genera istantaneamente ObjectID MongoDB unici con il nostro strumento online gratuito. Crea identificatori BSON validi da 12 byte per test, sviluppo e operazioni di database. Nessuna installazione richiesta.

Generatore di ObjectID MongoDB

Calcolatore di caricamento...
📚

Documentazione

Che cos'è un ObjectID di MongoDB?

Un ObjectID di MongoDB è un valore di 12 byte che MongoDB assegna per impostazione predefinita al campo _id di ogni documento. Viene scritto come 24 caratteri esadecimali minuscoli, ad esempio 507f1f77bcf86cd799439011. Questo strumento genera da 1 a 100 ObjectID validi alla volta, direttamente nel browser e senza bisogno di una connessione al database.

Struttura dell'ObjectID di MongoDB

Un ObjectID è composto da tre parti, disposte una dopo l'altra:

  • Marca temporale (4 byte). Il numero di secondi trascorsi dal 1 gennaio 1970 (l'epoca Unix), memorizzato come numero senza segno in formato big-endian. Indica quando è stato creato l'ObjectID. Quattro byte contengono valori da 0 a 4.294.967.295, quindi il campo torna a 0 dopo 7 febbraio 2106, alle 06:28:15 UTC.
  • Valore casuale (5 byte). Un numero scelto casualmente una sola volta, all'avvio di un programma. Ogni ObjectID creato successivamente da quel programma riutilizza lo stesso valore casuale, quindi computer diversi non devono coordinarsi.
  • Contatore (3 byte). Un numero che inizia da un punto casuale compreso tra 0 e 16.777.215 e aumenta di 1 per ogni nuovo ObjectID. Se supera 16.777.215, torna a 0.

Disposte una dopo l'altra, le parti si presentano così:

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

I driver MongoDB meno recenti costruivano la sezione centrale usando un identificatore della macchina e un ID di processo, anziché un numero casuale. I driver attuali, compresa la logica alla base di questo strumento, usano invece un unico valore casuale di 5 byte per processo.

Formato e formula dell'ObjectID di MongoDB

Non esiste una formula aritmetica alla base di un ObjectID, a differenza di una percentuale o del calcolo degli interessi. Viene assemblato convertendo tre numeri in testo esadecimale e concatenandoli:

  1. Prendere l'ora corrente in secondi dall'epoca Unix, riportata nell'intervallo da 0 a 4.294.967.295 per adattarla a quattro byte. Scriverla come numero esadecimale di 8 cifre.
  2. Prendere il valore casuale fisso del processo, un numero da 0 fino a 2^40 − 1. Scriverlo come numero esadecimale di 10 cifre.
  3. Prendere il valore corrente del contatore, compreso tra 0 e 16.777.215. Scriverlo come numero esadecimale di 6 cifre, quindi aumentare il contatore di 1 per l'ID successivo.
  4. Concatenare le tre stringhe esadecimali, in quest'ordine, in un'unica stringa di 24 caratteri.

Esempio di calcolo

Supponiamo che un programma venga avviato al tempo Unix 1.700.000.000 secondi, che corrisponde al 14 novembre 2023, alle 22:13:20 UTC. Sceglie il valore casuale 3f2a91c8d4 e inizializza il contatore a 12.345.

  • Marca temporale in formato esadecimale: 6553f100
  • Valore casuale in formato esadecimale: 3f2a91c8d4
  • Contatore in formato esadecimale: 003039

Concatenando questi valori si ottiene il primo ObjectID:

6553f1003f2a91c8d4003039

Se il programma genera un secondo ObjectID nello stesso secondo, la marca temporale e il valore casuale restano invariati, ma il contatore aumenta a 12.346 (00303a):

6553f1003f2a91c8d400303a

Anche la lettura di un ObjectID funziona al contrario. Dato 507f1f77bcf86cd799439011, i suoi primi 8 caratteri, 507f1f77, decodificano in 1.350.508.407 secondi dall'epoca Unix, che corrispondono al 17 ottobre 2012, alle 21:13:27 UTC.

Usi comuni degli ObjectID di MongoDB

  • Chiavi primarie. MongoDB inserisce automaticamente un ObjectID nel campo _id di un documento, salvo che venga fornito un valore diverso.
  • Ricerca in base all'ora di creazione. Poiché la marca temporale è incorporata, un programma può leggere l'ora approssimativa di creazione di un documento senza un campo data separato.
  • Ordinamento in base all'ordine di inserimento. Ordinare i documenti per _id li ordina approssimativamente in base all'ora di creazione, poiché la marca temporale viene prima nel valore.
  • Dati di test e simulazione. Gli sviluppatori usano ObjectID generati per creare documenti di esempio o test automatizzati senza avviare un database.

ObjectID di MongoDB e UUID a confronto

Un UUID (identificatore univoco universale) è un valore di 16 byte, cioè quattro byte in più rispetto a un ObjectID. Un UUID standard è solitamente casuale in ogni sua parte, quindi non rivela l'ora di creazione né si ordina secondo l'ordine di creazione. Un ObjectID è più corto e ordinato approssimativamente in base al tempo; questo è uno dei motivi per cui MongoDB lo usa per impostazione predefinita, anche se non offre la stessa garanzia formale di unicità di un UUID generato correttamente.

Domande frequenti

A cosa serve un ObjectID di MongoDB? È il valore predefinito che MongoDB inserisce nel campo _id di un documento, così ogni documento riceve una chiave univoca senza configurazioni aggiuntive.

Gli ObjectID di MongoDB sono garantiti come univoci? Non in senso formale e matematico, ma le collisioni sono estremamente improbabili. Due ObjectID dovrebbero avere lo stesso valore casuale e la stessa posizione del contatore nello stesso secondo, cosa che normalmente può accadere solo all'interno di un singolo processo.

È possibile leggere la data di creazione da un ObjectID? Sì. I primi 8 caratteri esadecimali, ossia 4 byte, contengono il numero di secondi trascorsi dall'epoca Unix. Convertendo quel numero in una data si ottiene l'ora approssimativa di creazione.

Quanti ObjectID può generare contemporaneamente questo strumento? Da 1 a 100 per lotto. Tutti gli ID di un lotto condividono lo stesso valore casuale a livello di processo e ciascuno ha un contatore superiore di uno rispetto al precedente.

Gli ObjectID di MongoDB possono essere usati al di fuori di MongoDB? Sì. Poiché sono semplicemente valori di 12 byte codificati come testo esadecimale, funzionano anche come ID univoci in altri sistemi, sebbene lo schema di identificazione del singolo database possa adattarsi meglio alle sue esigenze.

Questo strumento è connesso a un database MongoDB reale? No. Viene eseguito interamente nel browser e non legge né scrive in alcun database.

Riferimenti

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