- 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
Opiniões no Hacker News
uuiddo Postgres, que aceita qualquer dado com o comprimento correto.