Gerador de ObjectID do MongoDB - Criar Identificadores BSON Únicos
Gere identificadores únicos de ObjectID do MongoDB instantaneamente com nossa ferramenta online gratuita. Crie identificadores BSON válidos de 12 bytes para testes, desenvolvimento e operações de banco de dados. Nenhuma instalação necessária.
Gerador de ObjectID do MongoDB
Documentação
O que é um ObjectID do MongoDB?
Um ObjectID do MongoDB é um valor de 12 bytes que o MongoDB atribui por padrão ao campo _id de cada documento. Ele é escrito como 24 caracteres hexadecimais minúsculos, por exemplo, 507f1f77bcf86cd799439011. Esta ferramenta gera de 1 a 100 ObjectIDs válidos por vez, diretamente no navegador e sem exigir conexão com um banco de dados.
Estrutura do ObjectID do MongoDB
Um ObjectID é formado por três partes, colocadas uma após a outra:
- Timestamp (4 bytes). O número de segundos desde 1º de janeiro de 1970 (a época Unix), armazenado como um número sem sinal em formato big-endian. Ele registra quando o ObjectID foi criado. Quatro bytes comportam valores de 0 a 4.294.967.295, portanto o campo volta a 0 depois de 7 de fevereiro de 2106, às 06:28:15 UTC.
- Valor aleatório (5 bytes). Um número escolhido aleatoriamente uma vez, quando um programa é iniciado. Todos os ObjectIDs criados posteriormente por esse programa reutilizam o mesmo valor aleatório, de modo que computadores diferentes não precisam coordenar esse valor.
- Contador (3 bytes). Um número que começa em um ponto aleatório entre 0 e 16.777.215 e aumenta em 1 a cada novo ObjectID. Se ultrapassar 16.777.215, volta a 0.
Colocadas em sequência, as partes ficam assim:
1timestamp (8 hex chars) + random value (10 hex chars) + counter (6 hex chars) = 24 hex chars
2Drivers mais antigos do MongoDB formavam a seção central usando um identificador de máquina e um ID de processo, em vez de um número aleatório. Os drivers atuais, incluindo a lógica usada por esta ferramenta, usam um único valor aleatório de 5 bytes por processo.
Formato e fórmula do ObjectID do MongoDB
Não há uma fórmula aritmética por trás de um ObjectID, ao contrário do que ocorre em um cálculo de porcentagem ou de juros. Ele é montado convertendo três números em texto hexadecimal e juntando-os em sequência:
- Pegue o horário atual em segundos desde a época Unix, limitado ao intervalo de 0 a 4.294.967.295 para caber em quatro bytes. Escreva-o como um número hexadecimal de 8 dígitos.
- Pegue o valor aleatório fixo do processo, um número de 0 até 2^40 − 1. Escreva-o como um número hexadecimal de 10 dígitos.
- Pegue o valor atual do contador, de 0 a 16.777.215. Escreva-o como um número hexadecimal de 6 dígitos e, em seguida, aumente o contador em 1 para o próximo ID.
- Junte as três strings hexadecimais, nessa ordem, em uma única string de 24 caracteres.
Exemplo
Suponha que um programa seja iniciado no tempo Unix de 1.700.000.000 segundos, que corresponde a 14 de novembro de 2023, às 22:13:20 UTC. Ele escolhe o valor aleatório 3f2a91c8d4 e inicia o contador em 12.345.
- Timestamp em hexadecimal:
6553f100 - Valor aleatório em hexadecimal:
3f2a91c8d4 - Contador em hexadecimal:
003039
A junção desses valores produz o primeiro ObjectID:
6553f1003f2a91c8d4003039
Se o programa gerar um segundo ObjectID no mesmo segundo, o timestamp e o valor aleatório permanecerão iguais, mas o contador aumentará para 12.346 (00303a):
6553f1003f2a91c8d400303a
A leitura de um ObjectID também funciona no sentido inverso. Dado 507f1f77bcf86cd799439011, seus primeiros 8 caracteres, 507f1f77, correspondem a 1.350.508.407 segundos desde a época Unix, ou seja, 17 de outubro de 2012, às 21:13:27 UTC.
Usos comuns dos ObjectIDs do MongoDB
- Chaves primárias. O MongoDB coloca automaticamente um ObjectID no campo
_idde um documento, a menos que outro valor seja fornecido. - Consulta pelo horário de criação. Como o timestamp está incorporado ao valor, um programa pode ler o horário aproximado de criação de um documento sem um campo de data separado.
- Ordenação pela ordem de inserção. Ordenar documentos por
_idfaz uma ordenação aproximada pelo horário de criação, pois o timestamp aparece primeiro no valor. - Dados de teste e simulação. Desenvolvedores usam ObjectIDs gerados para criar documentos de exemplo ou testes automatizados sem executar um banco de dados.
MongoDB ObjectID versus UUID
Um UUID (Identificador Único Universal) é um valor de 16 bytes, quatro bytes maior que um ObjectID. Um UUID padrão geralmente é aleatório em toda a sua extensão, portanto não revela o horário de criação nem é ordenado pela ordem de criação. Um ObjectID é mais curto e tem uma ordenação aproximada por tempo, o que explica em parte por que o MongoDB o utiliza por padrão, embora ele não ofereça a mesma garantia formal de exclusividade que um UUID gerado corretamente.
Perguntas frequentes
Para que serve um ObjectID do MongoDB?
É o valor padrão que o MongoDB coloca no campo _id de um documento, de modo que cada documento receba uma chave exclusiva sem configuração adicional.
Os ObjectIDs do MongoDB têm exclusividade garantida?
Não em um sentido matemático formal, mas as colisões são extremamente improváveis. Dois ObjectIDs precisariam ter o mesmo valor aleatório e a mesma posição do contador no mesmo segundo, algo que normalmente só ocorre dentro de um único processo.
É possível ler a data de criação a partir de um ObjectID?
Sim. Os primeiros 8 caracteres hexadecimais, correspondentes a 4 bytes, armazenam o número de segundos desde a época Unix. A conversão desse número em uma data fornece o horário aproximado de criação.
Quantos ObjectIDs este gerador consegue criar de uma vez?
Entre 1 e 100 por lote. Todos os IDs de um lote compartilham o mesmo valor aleatório do processo, e cada um tem um contador uma unidade maior que o anterior.
Os ObjectIDs do MongoDB podem ser usados fora do MongoDB?
Sim. Como são apenas valores de 12 bytes codificados como texto hexadecimal, também funcionam como IDs exclusivos em outros sistemas, embora o esquema de IDs próprio de um banco de dados possa atender melhor às necessidades dele.
Este gerador está conectado a um banco de dados MongoDB real?
Não. Ele é executado inteiramente no navegador e não lê nem grava dados em nenhum banco de dados.
Referências
- "ObjectId." Manual do MongoDB, https://www.mongodb.com/docs/manual/reference/method/ObjectId/.
- "ObjectId Specification." Especificações BSON do MongoDB, https://github.com/mongodb/specifications/blob/master/source/bson-objectid/objectid.md.
- "BSON Types." Especificação BSON, https://bsonspec.org/spec.html.