13 pontos por GN⁺ 2023-10-03 | 1 comentários | Compartilhar no WhatsApp
  • A Buildkite adotou o novo padrão UUIDv7 como PK, substituindo o sistema anterior de PKs sequenciais e chaves secundárias UUID
  • UUIDs (Universally Unique Identifiers) são identificadores únicos que podem ser gerados de forma independente e são amplamente usados em sistemas distribuídos e bancos de dados
  • UUIDs oferecem várias vantagens em relação a identificadores inteiros sequenciais, como imprevisibilidade, prevenção da exposição de informações internas sensíveis e uma camada adicional de defesa
  • No entanto, a aleatoriedade dos UUIDs padrão não ordenados por tempo pode causar problemas de desempenho em bancos de dados
  • Para resolver isso, a Buildkite experimentou UUIDs compatíveis com UUIDv4 ordenados por tempo, o que reduziu em 50% a taxa de Write Ahead Log (WAL) do banco de dados principal
  • A versão 7 do UUID (UUIDv7) codifica o timestamp Unix em milissegundos nos 48 bits mais significativos, enquanto os 74 bits restantes são gerados aleatoriamente
  • A Buildkite decidiu usar UUIDv7 como chave primária em todas as novas tabelas, eliminando a necessidade de coordenação na geração de identificadores e simplificando a lógica da aplicação
  • Alternativas como a implementação ShardingID do Instagram e a implementação de chave primária composta da Shopify foram consideradas, mas a equipe escolheu UUIDv7
  • A migração para UUIDv7 exige espaço de armazenamento adicional devido ao tamanho de 128 bits dos UUIDs, mas isso é insignificante em comparação com o restante do armazenamento das linhas do banco de dados
  • Atualmente, eles estão fazendo sharding do maior banco de dados Postgres e, se necessário, podem usar UUIDv8 no futuro para incluir o número do shard no identificador

1 comentários

 
GN⁺ 2023-10-03
Opiniões no Hacker News
  • O UUIDv7 é benéfico para sistemas distribuídos internos por causa de suas chaves ordenadas, mas pode não ser adequado como identificador público devido a possíveis problemas de segurança.
  • Costuma-se dizer que IDs aleatórios prejudicam o desempenho, mas, na prática, eles são melhores para sistemas de armazenamento distribuído porque evitam hotspots em um único nó.
  • Existem várias versões de UUID por causa das mudanças nos requisitos para identificadores e nas propriedades desejadas.
  • O UUIDv7 combina as vantagens de chaves primárias sequenciais para indexação eficiente com chaves secundárias UUID para uso externo.
  • Um dos possíveis problemas do UUIDv7 é que os usuários podem extrair do ID o momento em que ele foi gerado.
  • Uma função open source de UUID v7 para PostgreSQL foi disponibilizada, oferecendo vantagens como aumento de velocidade em inserções em lote.
  • O UUIDv7 pode ser usado com o tipo uuid do Postgres, que aceita qualquer dado com o comprimento correto.
  • Alguns preferem uma chave primária sequencial de 64 bits e uma chave aleatória adicional de 64 bits para uso externo, a fim de ocultar informações sobre o tamanho dos dados e a data de criação.
  • UUIDs são úteis para gerar chaves a partir de muitas fontes separadas que depois precisarão ser mescladas.
  • Há debate sobre a necessidade de “validar” GUIDs/UUIDs. Eles geralmente são tratados como identificadores opacos.
  • A escolha entre UUIDv7 e ULIDs depende dos requisitos específicos; os ULIDs oferecem 6 bits extras de aleatoriedade em comparação com o que os UUIDs usam para metadados.