Pular para o conteúdo

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

Calculadora de carregamento...
📚

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 todo documento. Ele é escrito com 24 caracteres hexadecimais em minúsculas, por exemplo 507f1f77bcf86cd799439011. Esta ferramenta gera de 1 a 100 ObjectIDs válidos por vez, diretamente no navegador, sem precisar de 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:

  • Carimbo de data e hora (4 bytes). O número de segundos desde 1 de janeiro de 1970 (a época Unix), armazenado como um número sem sinal, em ordem big-endian. Ele registra quando o ObjectID foi criado.
  • Valor aleatório (5 bytes). Um número escolhido ao acaso uma única vez, quando um programa é iniciado. Todo ObjectID que esse programa cria depois reutiliza o mesmo valor aleatório, de modo que computadores diferentes não precisam se coordenar.
  • 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 passar de 16.777.215, volta a 0.

Dispostas de ponta a ponta, as partes ficam assim:

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

Drivers mais antigos do MongoDB montavam a seção do meio com 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 por trás desta ferramenta, usam em vez disso um único valor aleatório de 5 bytes por processo.

Formato e fórmula do ObjectID do MongoDB

Não existe uma fórmula aritmética por trás de um ObjectID, ao contrário de um cálculo de porcentagem ou de juros. Ele é montado convertendo três números em texto hexadecimal e unindo-os de ponta a ponta:

  1. Tome o horário atual em segundos desde a época Unix. Escreva-o como um número hexadecimal de 8 dígitos.
  2. Tome 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.
  3. Tome o valor atual do contador, de 0 a 16.777.215. Escreva-o como um número hexadecimal de 6 dígitos e depois aumente o contador em 1 para o próximo ID.
  4. Una as três cadeias hexadecimais, nessa ordem, em uma única cadeia de 24 caracteres.

Exemplo

Suponha que um programa seja iniciado no instante Unix 1.700.000.000 segundos, que corresponde a 14 de novembro de 2023, 22:13:20 UTC. Ele escolhe o valor aleatório 3f2a91c8d4 e inicia seu contador em 12.345.

  • Carimbo de data e hora em hexadecimal: 6553f100
  • Valor aleatório em hexadecimal: 3f2a91c8d4
  • Contador em hexadecimal: 003039

Unindo essas partes, obtém-se o primeiro ObjectID:

6553f1003f2a91c8d4003039

Se o programa gerar um segundo ObjectID no mesmo segundo, o carimbo de data e hora e o valor aleatório continuam iguais, mas o contador sobe para 12.346 (00303a):

6553f1003f2a91c8d400303a

A leitura de um ObjectID também funciona no sentido inverso. Dado 507f1f77bcf86cd799439011, seus primeiros 8 caracteres, 507f1f77, decodificam para 1.350.508.407 segundos desde a época, o que corresponde a 17 de outubro de 2012, 21:13:27 UTC.

Usos comuns dos ObjectIDs do MongoDB

  • Chaves primárias. O MongoDB coloca um ObjectID no campo _id de um documento automaticamente, a menos que outro valor seja fornecido.
  • Consulta pelo momento de criação. Como o carimbo de data e hora está embutido, um programa pode ler o momento aproximado de criação de um documento sem um campo de data separado.
  • Ordenação pela ordem de inserção. Ordenar documentos por _id os ordena, de modo aproximado, pelo momento de criação, já que o carimbo de data e hora vem primeiro no valor.
  • Dados de teste e dados simulados. Desenvolvedores usam ObjectIDs gerados para montar documentos de exemplo ou testes automatizados sem executar um banco de dados.

ObjectID do MongoDB vs. UUID

Um UUID (Universally Unique Identifier, ou identificador universalmente único) é um valor de 16 bytes, quatro bytes maior que um ObjectID. Um UUID da versão 4 é construído a partir de números aleatórios, portanto não revela o momento de criação nem se ordena pela ordem de criação. O mesmo padrão também define um UUID da versão 7, que começa com um carimbo de data e hora Unix em milissegundos e se ordena pelo tempo. Um ObjectID é mais curto e tem ordenação aproximadamente temporal. A RFC 9562 descreve os UUIDs como feitos para serem únicos no espaço e no tempo, mas ainda pede que os implementadores avaliem as consequências de uma colisão; em ambos os formatos, uma colisão é muito improvável na prática.

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 todo documento recebe uma chave única sem configuração extra.

Os ObjectIDs do MongoDB têm unicidade garantida? Não em sentido formal e matemático, 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, o que normalmente só acontece dentro de um único processo.

É possível ler a data de criação a partir de um ObjectID? Sim. Os primeiros 8 caracteres hexadecimais, ou seja, 4 bytes, guardam o número de segundos desde a época Unix. Converter esse número em uma data fornece o momento aproximado de criação.

Quantos ObjectIDs este gerador pode criar de uma vez? De 1 a 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 acima do 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 únicos em outros sistemas, embora o esquema de ID do próprio banco de dados possa atender melhor às suas necessidades.

Este gerador está conectado a um banco de dados MongoDB real? Não. Ele roda inteiramente no navegador e não lê nem grava em nenhum banco de dados.

Referências

  1. MongoDB. BSON Types: ObjectId. Tipos BSON — os ObjectIds têm 12 bytes (carimbo de data e hora de 4 bytes, valor aleatório de 5 bytes, contador de 3 bytes), preenchem _id por padrão e se ordenam de modo aproximado pelo momento de criação.
  2. MongoDB. ObjectID specification. Especificação BSON do ObjectID — carimbo de data e hora sem sinal em big-endian, valor aleatório gerado uma vez por processo, contador que começa em um valor aleatório e volta a 0 depois de 16.777.215, e os antigos campos de ID de máquina e ID de processo.
  3. IETF. RFC 9562: Universally Unique IDentifiers (UUIDs). RFC 9562 — um UUID tem 16 octetos (128 bits); a versão 4 é aleatória e a versão 7 é ordenada por tempo.