Pergunta

Preciso gerar ID de registro exclusivo para a string exclusiva fornecida.

Tentei usar o formato UUID que parece ser bom.

Mas sentimos que isso é longo.

Portanto, precisamos cortar a sequência UUID 9F218A38-12CD-5942-B877-80ADC0589315 para menor. Ao remover '-', podemos salvar 4 chars. Qual é a parte mais segura a ser removida do UUID? Não precisamos de identificação universalmente única, mas gostamos de usar o UUID como fonte, mas reduzindo as cordas.

Precisamos de ID exclusivo específico para o site/banco de dados (Serviços de dados SQL Server/ADO.NET).

Qualquer ideia ou amostra de qualquer idioma está bem

desde já, obrigado

Foi útil?

Solução

Por que não apenas convertê -lo em uma string base 64? Você pode reduzir para 22 caracteres dessa maneira.

Armazenando uuid como string base64

Outras dicas

Se você estiver usando o MS-SQL, provavelmente deve usar o tipo de dados exclusivo do INDINDENTIFIER, ele é compacto (16 bytes) e, como o mecanismo SQL sabe disso, ele pode otimizar índices e consultas usando-o.

Um UUID fornece (quase) 128 bits de exclusividade. Você pode reduzi-lo para 16 bytes binários ou 22 caracteres codificados por 64. Eu não recomendaria remover qualquer parte de um UUID, caso contrário, apenas perde o sentido. Os UUIDs foram projetados para que todos os 128 bits tenham significado. Se você quiser menos do que isso, deve usar outro esquema.

Por exemplo, se você puder garantir que apenas a versão 4 UUIDs sejam usados, poderá levar apenas os primeiros 32 bits ou apenas os últimos 32 bits. Você perde a singularidade, mas tem números bastante aleatórios. Apenas evite os bits fixo (versão e variante).

Mas se você não puder garantir isso, terá problemas reais. Para a versão 1 UUIDS, os primeiros bits não serão únicos para os UUIDs gerados no mesmo dia, e os últimos bits não serão únicos para os UUIDs gerados no mesmo sistema. Mesmo se você CRC, o UUID, não é garantido que você terá 16 ou 32 bits de singularidade.

Nesse caso, basta usar algum outro esquema. Gere um número aleatório de 32 bits usando o gerador de números aleatórios do sistema e use-o como seu ID exclusivo. Não confie nos Uuids se você pretende remover seu comprimento.

O UUID tem 128 bits ou 16 bytes. Sem codificação, você pode obtê -lo tão baixo quanto 16 bytes. Os uuids são comumente escritos em hexadecimal, tornando -os 32 cordas legíveis de bytes. Com outras codificações, você obtém resultados diferentes:

  1. Base-64 transforma 3 bytes de 8 bits em 4 caracteres de 6 bits, então 16 bytes de dados se tornam 22 caracteres
  2. Base-85 transforma 4 bytes de 8 bits em 5 caracteres de 6,4 bits, então 16 bytes de dados se tornam 20 caracteres

Tudo depende se você deseja strings legíveis e de como uma codificação padrão/comum deseja usar.

Um UUID tem 128 bits. Você já pensou em fazer um CRC disso? Isso pode reduzir facilmente 16 ou 32 bits e usaria todas as informações originais. Se um CRC não for bom o suficiente, você sempre poderá usar os primeiros bytes de um hash adequado (SHA256, por exemplo).

Se você realmente quer apenas cortar o UUID, o formato é descrito em RFC 4122. Você deve descobrir quais partes sua implementação não precisa disso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top