Pergunta

Qual seria o tipo de dados mais eficiente para armazenar um UUID / GUID em bancos de dados que não têm um tipo nativo UUID / GUID de dados? 2 Os valores BIGINT?

E o que seria o código mais eficiente (C # preferido) para converter de e para um GUID para esse tipo?

Graças.

Foi útil?

Solução

É difícil dizer o que seria o mais eficiente sem saber o banco de dados você está usando.

A minha primeira inclinação seria a utilização de uma coluna binary(16).

Quanto utilizando esse valor em C #, do tipo System.Guid tem um construtor que aceita uma matriz byte[], e um ToByteArray() método que retorna uma matriz de bytes.

Outras dicas

Na minha experiência, o UUID divididos em dois inteiros ainda será mais eficiente do que usando um campo caractere. Diferentes bancos de dados reagem de maneiras diferentes embora. Agrupamento pode fazer a diferença lá também. Dito isto, há geralmente muito maiores de desempenho "pecados" de todo aplicações, e eu não acho que isso seria uma coisa importante de qualquer maneira para muitas aplicações. Você vai ter que julgar a si mesmo baseado fora de quão ocupado é esta parte do seu aplicativo vai conseguir? Você precisa o absoluto mais rápido consultando possivelmente por UUID? Será que 600ns vs 400ns uma grande diferença de tempo para você?

Se houver vai ser um monte de SQL manual de doen com a db, em seguida, ter uma chave que está compreendendo um UUID de campos separados tipo de fede quando você precisa fazer uma inserção e há nenhum padrão db para ele. Isso também é um problema com caracteres embora.

Se você tem uma camada de abstração de banco de dados, em seguida, combinar vários campos da tabela para obter o seu UUID não deve ser um grande negócio.

Olhando para a classe .NET guid , existem algumas maneiras de inicializar um guid:

Guid (Int32, Int16, Int16, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte) Guid (string)

Embora possa ser mais eficiente, em teoria, para armazenar o número inteiro em um banco de dados (você poderia usar pouco mudando para realmente armazenar 4 números inteiros de 32 bits .. mas você teria que calcular isso quando carregar e salvar cada tempo. Além disso, levaria 4 campos no banco de dados .. Eu poderia imaginar que iria acabar por ser menos eficiente.

Adicionar na impossibilidade de ler isto diretamente no seu banco de dados para depuração / testando propósitos, e eu diria mãos-down que é melhor para armazenar uma string. É apenas um campo de 32 caracteres (36 se você incluir os traços), e é muito fácil de se converter. guid. ToString () e new Guid (stringValue);

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