Pregunta

¿Cuál sería el tipo de datos más eficiente para almacenar un UUID / GUID en bases de datos que no tienen un tipo de datos nativo UUID / GUID? 2 BIGINTs?

¿Y cuál sería el código más eficiente (C # preferido) para convertir ay desde un GUID a ese tipo?

Gracias.

¿Fue útil?

Solución

Es difícil decir cuál sería el más eficiente sin conocer la base de datos que está utilizando.

Mi primera inclinación sería usar una columna binary (16) .

En cuanto al uso de ese valor en C #, el tipo System.Guid tiene un constructor que acepta una matriz de byte [] y un método ToByteArray () que devuelve una matriz de bytes.

Otros consejos

En mi experiencia, el UUID dividido en dos enteros aún será más eficiente que usar un campo char. Sin embargo, diferentes DBs reaccionan de diferentes maneras. La colación también podría hacer una diferencia allí. Dicho esto, generalmente hay un rendimiento mucho más grande " pecados " en todas las aplicaciones, y no creo que esto sea una cosa importante para muchas aplicaciones. Tendrá que juzgarse basándose en qué tan ocupada va a estar esta parte de su aplicación. ¿Necesita la consulta más rápida posible posiblemente por UUID? ¿600ns vs 400ns es una gran diferencia para ti?

Si va a haber una gran cantidad de archivos de sql manual con la base de datos, entonces tiene una clave que comprende un UUID de campos separados que apesta cuando se necesita hacer una inserción y no hay db predeterminado. Aunque eso también es un problema con los caracteres.

Si tiene una capa de abstracción de base de datos, entonces combinar varios campos de tabla para obtener su UUID no debería ser un gran problema.

Mirando la clase guid de .NET , hay varias formas de inicializar un guid:

Guid (Int32, Int16, Int16, Byte, Byte, Byte, Byte, Byte, Byte, Byte, Byte) Guid (cadena)

Aunque puede ser más eficiente, en teoría, almacenar el número entero en una base de datos (puede usar el desplazamiento de bits para almacenar realmente 4 enteros de 32 bits .. pero tendría que calcular esto al cargar y guardar cada Además, tomaría 4 campos en la base de datos ... Me imagino que terminaría siendo menos eficiente.

Agregue la imposibilidad de leer esto directamente en su base de datos para fines de depuración / prueba, y diría sin rodeos que es mejor almacenar una cadena. Es solo un campo de 32 caracteres (36 si incluye los guiones), y es muy fácil de convertir. guid. ToString () y new Guid (stringValue);

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top