Pros y los contras de formas de almacenar un entero sin signo sin un tipo de datos unsigned int

StackOverflow https://stackoverflow.com/questions/2288881

Pregunta

Tengo valores que son enteros sin signo de 64 bits, y necesito para almacenarlos en MongoDB, que no tiene ningún tipo unsigned int. Veo tres posibilidades principales para almacenarlos en otros tipos de campo, y la conversión de entrar y salir:

El uso de un int firmado es probablemente más fácil y más eficiente del espacio, pero tiene la desventaja de que no son legible por humanos y si alguien se olvida de hacer la conversión, algunos de ellos trabajará, que puede ocultar errores.

binario es probablemente más difícil para los programadores inexpertos a tratar, y también sufre de no-humano-lectura.

Una representación de serie es el menos eficiente del espacio (~ 40 bytes en Unicode vs 8 bytes por campo), pero al menos todos los posibles valores se asignarán correctamente, y para consultar solamente una conversión a cadena se requiere en lugar de una más complicado conversión.

Necesito estos valores para estar disponible en diferentes plataformas, por lo que una solución única específica del controlador no es una opción.

Cualquier principales pros y los contras que he perdido? ¿Cuál usarías?

¿Fue útil?

Solución

Me meto simplemente los números en cadenas. Es el más fácil y la solución más compatible. La mayoría de los lenguajes de programación comunes proporcionan cadena a la conversación número en sus bibliotecas estándar. Si alguien tiene que leer su base de datos con un programa diferente en el futuro que no es necesario que la figura de su formato de almacenamiento binario. Otra ventaja es que se puede almacenar un número mayor que un Int64 sin firmar si es necesario.

Otros consejos

Yo diría que ir con el binario - es la única solución por encima de donde conseguir los criterios de ordenación en las consultas de la derecha va a ser trivial

.

¿Por qué un valor de cadena tiene que estar en Unicode? Conoce el valor siempre será dígitos para que pueda utilizar un varchar estándar, que no significa más de 20 bytes. Para ser honesto, realmente depende de cómo se utilizará el valor. ¿Va a ser utilizado en una gran cantidad de combinaciones a la fuente que está utilizando no firmados 64 enteros? Si es así, tendrá que haber una conversión en cada fila. ¿Es sólo va a ser utilizado como referencia o para filtrar los valores específicos (a diferencia de una unión a la mongodb)? Si es así, entonces un valor de cadena llevará a cabo lo suficientemente bien.

Otra solución, si es posible, sería añadir una columna int 64-firmado en el mongodb que representa la versión firmada del 64 unsigned int y luego usar el int firmado en su base de datos. De esta manera usted puede unirse a las manzanas y las manzanas y se puede comparar los valores de un sistema a otro.

Teniendo en cuenta lo que ha dicho, todavía sostengo que una columna varchar llevará a cabo lo suficientemente bien y hace que el valor humano legible.

Editar Otra solución sería la de almacenar el valor en un int de 64 bits con signo y añadir un método para su artículo que calcula el valor de 64 bits sin signo para que los usuarios puedan verificar el valor.

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