Quais são os uuid e por que eles são úteis? – Cloudsavvy Ti

Um identificador exclusivo universal (UUID) é uma forma específica de identificador que pode ser considerado exclusivo com segurança para a maioria dos propósitos práticos. Dois UUIDs gerados corretamente têm uma chance quase insignificante de serem idênticos, mesmo que sejam criados em dois ambientes diferentes de partes separadas. É por isso que se diz que os UUIDs são universalmente únicos.

Neste artigo, veremos as características dos UUIDs, como sua singularidade funciona e os cenários em que eles podem facilitar a identificação de ativos. Embora discutiremos os UUIDs da perspectiva do software comum que interage com os registros do banco de dados, eles são amplamente aplicáveis ​​a qualquer caso de uso em que seja necessária a geração descentralizada de IDs exclusivos.

índice

  1. O que realmente é um UUID?
  2. Casos de uso de UUID
  3. Avisos quando UUIDs encontram bancos de dados
  4. Resumo

O que realmente é um UUID?

Um UUID é simplesmente um valor que você pode considerar exclusivo com segurança. O risco de uma colisão é tão baixo que você pode optar por ignorá-lo completamente. Você pode ver UUIDs referidos por termos diferentes (GUID ou Globally Unique Identifier é a semântica preferida da Microsoft), mas o significado e o efeito permanecem os mesmos.

Um UUID verdadeiro é um identificador exclusivo gerado e representado por um formato padronizado. UUIDs válidos são definidos pela RFC 4122; esta especificação descreve algoritmos que podem ser usados ​​para gerar UUIDs que preservam a exclusividade nas implementações, sem uma autoridade central de emissão.

O RFC inclui cinco algoritmos diferentes, cada um dos quais usa um mecanismo diferente para gerar um valor. Aqui está um breve resumo das "versões" disponíveis:

  • Versão 1 – Baseada em tempo – Combine um carimbo de data/hora, uma sequência de relógio e um valor específico do dispositivo gerador (geralmente seu endereço MAC) para produzir uma saída exclusiva para esse host naquele momento.
  • Versão 2 – DCE Security – Esta versão foi desenvolvida como uma evolução da versão 1 para uso com o Distributed Computing Environment (DCE). Não é muito usado.
  • Versão 3: Baseado em Nome (MD5) – MD5 gera um "namespace" e um "name" para criar um valor exclusivo para esse nome dentro do namespace. Gerar outro UUID com o mesmo namespace e nome produzirá uma saída idêntica, portanto, esse método fornece resultados reproduzíveis.
  • Versão 4 – Aleatório – A maioria dos sistemas modernos tende a usar o UUID v4, pois usa a fonte de números aleatórios ou pseudo-aleatórios do host para gerar seus valores. As chances do mesmo UUID ocorrer duas vezes são praticamente insignificantes.
  • Versão 5: Baseado em nome (SHA-1) – Semelhante à versão 3, mas usa o algoritmo SHA-1 mais forte para codificar o namespace e o nome de entrada.

Embora a RFC se refira aos algoritmos como versões, isso não significa que você deva sempre usar a versão 5 porque parece ser a mais recente. Qual escolher depende do seu caso de uso; em muitos cenários, a v4 é escolhida devido à sua natureza aleatória. Isso o torna o candidato ideal para cenários simples de "me dê um novo identificador".

Os algoritmos de geração geram um inteiro sem sinal de 128 bits. No entanto, os UUIDs são normalmente vistos como strings hexadecimais e também podem ser armazenados como uma sequência binária de 16 caracteres. Aqui está um exemplo de uma string UUID:

 16763be4-6022-406e-a950-fcd5018633ca

O valor é representado por cinco grupos de caracteres alfanuméricos separados por hífens. Os hífens não são um componente obrigatório da string; sua presença depende dos detalhes do histórico da especificação UUID. Eles também tornam o identificador muito mais fácil para os olhos humanos perceberem.

Casos de uso de UUID

O principal caso de uso para UUIDs é a geração descentralizada de identificadores exclusivos. Você pode gerar o UUID em qualquer lugar e tratá-lo com segurança como exclusivo, independentemente de vir de seu código de back-end, de um dispositivo cliente ou de seu mecanismo de banco de dados.

Os UUIDs facilitam a determinação e a manutenção da identidade de objetos em ambientes desconectados. Historicamente, a maioria dos aplicativos usava um campo inteiro com incremento automático como chave primária. Ao criar um novo objeto, você pode não saber seu ID até que ele tenha sido inserido no banco de dados. Os UUIDs permitem determinar a identidade muito mais cedo em seu aplicativo.

Aqui está uma demonstração básica do PHP que demonstra a diferença. Vamos primeiro dar uma olhada no sistema baseado em números inteiros:

 class BlogPost { public function __construct ( public readonly ?int $Id , public readonly string $ Headline , public readonly ?AuthorCollection $Authors = null ) { } } #[POST("/posts")] function createBlogPost (HttpRequest $Request): void { $headline = $Request -> getField("Headline"); $blogPost = new BlogPost(null, $headline); }

Precisamos inicializar a propriedade $Id como null porque não podemos saber qual é o id real até que ele seja mantido no banco de dados. Isso não é ideal – $Id não deve realmente ser anulável e permite que instâncias do BlogPost existam em um estado incompleto.

Mudar para UUID resolve o problema:

 class BlogPost { public function __construct ( public readonly string $ Uuid , public readonly string $ Headline , public readonly ?AuthorCollection $ Authors = null ) { } } #[POST("/posts")] function createBlogPost(HttpRequest $Request): void { $headline = $Request -> getField("Headline"); $blogPost = new BlogPost("16763be4-...", $headline); }

Post IDs agora podem ser gerados dentro do aplicativo sem o risco de valores duplicados. Isso garante que as instâncias de objeto sempre representem um estado válido e não precisem de propriedades de ID anuláveis ​​complicadas. O modelo também simplifica o manuseio da lógica transacional; Registros filhos que precisam de uma referência ao pai (como nossas associações de Author ) podem ser inseridos imediatamente, sem uma viagem de ida e volta ao banco de dados para recuperar o ID atribuído ao pai.

No futuro, seu aplicativo de blog pode levar mais lógica ao cliente. Talvez a interface ganhe suporte para escrita offline completa, criando efetivamente instâncias BlogPost que persistem temporariamente no dispositivo do usuário. O cliente agora pode gerar o UUID da publicação e passá-lo para o servidor quando a conectividade de rede for restaurada. Se o cliente recuperasse posteriormente a cópia de rascunho do servidor, ele poderia compará-la com os estados locais restantes, pois o UUID já seria conhecido.

Os UUIDs também ajudam a combinar dados de várias fontes. A combinação de tabelas de cache e banco de dados que usam chaves inteiras pode ser tediosa e propensa a erros. Os UUIDs oferecem exclusividade não apenas nas tabelas, mas em todo o universo. Isso os torna melhores candidatos para estruturas e dados replicados que geralmente são movidos entre diferentes sistemas de armazenamento.

Avisos quando UUIDs encontram bancos de dados

As vantagens dos UUIDs são bastante interessantes. No entanto, existem vários truques a serem observados ao usá-los em sistemas reais. Um grande fator a favor dos IDs inteiros é que eles são fáceis de redimensionar e otimizar. Os mecanismos de banco de dados podem indexar, classificar e filtrar facilmente uma lista de números que só vão em uma direção.

O mesmo não pode ser dito para UUIDs. Para começar, os UUIDs são quatro vezes maiores que os inteiros (36 bytes versus 4 bytes); para grandes conjuntos de dados, isso pode ser uma consideração importante por si só. Os valores também são muito mais complicados de classificar e indexar, principalmente para os UUIDs aleatórios mais comuns. Sua natureza confusa significa que eles não têm ordem natural. Isso prejudicará o desempenho da indexação se você usar um UUID como chave primária.

Esses problemas podem ser exacerbados em um banco de dados bem normalizado que faz uso intenso de chaves estrangeiras. Agora você pode ter muitas tabelas relacionais, cada uma contendo referências a seus UUIDs de 36 bytes. Eventualmente, a memória adicional necessária para realizar combinações e classificações pode ter um impacto significativo no desempenho do sistema.

Você pode atenuar parcialmente os problemas armazenando seus UUIDs como dados binários. Isso significa uma coluna BINARY(16) em vez de VARCHAR(36) . Alguns bancos de dados como o PostgreSQL incluem um tipo de dados UUID ; outros como o MySQL têm funções que podem converter uma string UUID em sua representação binária e vice-versa. Essa abordagem é mais eficiente, mas lembre-se de que você ainda usará recursos adicionais para armazenar e selecionar seus dados.

Uma estratégia eficaz pode ser manter inteiros como chaves primárias, mas adicionar um campo UUID adicional para a referência do aplicativo. As tabelas de links relacionais podem usar IDs para melhorar o desempenho à medida que o código recupera e insere objetos de nível superior com UUIDs. Tudo depende do seu sistema, sua escala e suas prioridades: quando você precisa de geração de IDs descentralizada e uniões de dados simples, os UUIDs são a melhor escolha, mas você precisa reconhecer as vantagens e desvantagens.

Resumo

UUIDs são valores únicos que você pode usar com segurança para geração de identidade descentralizada. Colisões são possíveis, mas devem ser tão raras que possam ser descartadas. Se você estivesse gerando um bilhão de UUIDs por segundo por um século inteiro, a chance de encontrar uma duplicata seria de cerca de 50%, supondo que houvesse entropia suficiente disponível.

UUIDs podem ser usados ​​para estabelecer identidade independente do banco de dados, antes que ocorra uma inserção. Isso simplifica o código no nível do aplicativo e evita que objetos identificados incorretamente existam no sistema. Os UUIDs também ajudam a replicar dados, garantindo exclusividade, independentemente do armazenamento de dados, dispositivo ou ambiente, ao contrário das chaves inteiras tradicionais que funcionam no nível da tabela.

Embora os UUIDs sejam agora onipresentes no desenvolvimento de software, eles não são uma solução perfeita. Os recém-chegados tendem a ficar obcecados com a possibilidade de colisões, mas essa não deve ser sua primeira consideração, a menos que seu sistema seja tão sensível que você precise garantir a exclusividade.

O desafio mais óbvio para a maioria dos desenvolvedores é armazenar e recuperar os UUIDs gerados. Ingenuamente usar um VARCHAR(36) (ou remover hífens e usar VARCHAR(32) ) pode prejudicar seu aplicativo ao longo do tempo, pois a maioria das otimizações de indexação de banco de dados será ineficaz. Investigue os recursos de gerenciamento de UUID integrados ao seu sistema de banco de dados para garantir que você obtenha o melhor desempenho possível de sua solução.

  • Telegram é um hotspot para vender contas financeiras roubadas
  • A atualização OOB do Windows Server 2019 corrige reinicializações, Hyper-V, erro ReFS

descubra mais conteúdo

Google Pixel Watch também tem detecção de queda, mas não até o próximo ano

As melhores xícaras de café aquecidas de 2022

Como automatizar seu iPhone com base na hora, atividade ou localização

"Isso deve ter sido antes do meu tempo"

Por que a NASA enviou Snoopy para a Lua? – Revisão geek

O que é uma carga fantasma?

Um identificador universalmente exclusivo ou identificador universalmente exclusivo é um número de 16 bytes. Portanto, o número de UUIDs possíveis é 16³², ou cerca de 3,4 × 10³⁸.

Qual é o número UUID?

UUID : Significa Identificador Único Universal. O UUID é o equivalente ao Folio Fiscal, é composto por 32 dígitos hexadecimais, apresentados em 5 grupos separados por hífens.

Como o UUID é gerado?

O UUID versão 1 é gerado a partir do valor time (relógio do sistema) e um ID de nó (geralmente o endereço MAC); a versão 2 do UUID é gerada a partir de um identificador (geralmente um identificador de grupo ou usuário), a hora e um ID de nó; versão 3 e 5 do UUID são produtos

O que é o UUID no Windows?

Um UUID é uma string que contém um conjunto de dígitos hexadecimais. Cada interface tem um UUID diferente. Para obter mais informações, consulte String UUID . UUIDs vazios são conhecidos como UUIDs nulos em vez de UUIDs NULL.

O que é SQL UUID?

Função UUID () no MySQL

No MySQL, um valor UUID é um número de 128 bits representado como uma string utf8, e o formato do número hexadecimal será o seguinte. Aqui, os três primeiros números são gerados a partir das partes baixa, média e alta de um carimbo de data/hora.

Ir arriba