what replicated replicar replica allow mongodb enums

replicar - replicated to allow failover in mongodb



Tienda enumeraciĆ³n MongoDB (1)

TL; DR: Las cadenas son probablemente la opción más segura , y la diferencia de rendimiento debe ser despreciable. Los enteros tienen sentido para las grandes colecciones donde se debe indexar la enumeración. YMMV.

Pensé en almacenarlo utilizando números enteros, lo que supondría que usa menos espacio que almacenar cadenas para todo lo que fácilmente podría expresarse como un número entero

Cierto.

Otra ventaja que veo al usar enteros es que si quisiera cambiar el nombre de un logro o rango, podría cambiarlo fácilmente sin tener que tocar la base de datos.

Este es un beneficio clave de los enteros en mi opinión. Sin embargo, también requiere que se asegure de que los valores asociados de la enum no cambien. Si arruinas eso, es casi seguro que harás estragos , lo que es una gran desventaja.

Un beneficio que veo por usar cadenas es que los datos requieren menos procesamiento antes de ser usados

Si en realidad está usando un tipo de datos enum, es probable que sea algún tipo de entero internamente, por lo que el entero debería requerir menos procesamiento. De cualquier manera, esa sobrecarga debe ser despreciable.

¿Hay una razón fuerte para usar enteros o cadenas?

Estoy repitiendo mucho de lo que se ha dicho, pero tal vez eso ayude a otros lectores. Resumiendo:

  • Mezclar el mapa de valores de enumeración causa estragos. Imagina que tus estados Declined se interpretan repentinamente como Accepted , porque Declined tenía el valor ''2'' y ahora se Accepted porque reordenaste la enumeración y olvidaste asignar valores manualmente ...
  • Las cuerdas son más expresivas.
  • Los enteros ocupan menos espacio. El espacio en disco no importa, por lo general, pero el espacio del índice consumirá RAM, lo cual es costoso.
  • Las actualizaciones de enteros no cambian el tamaño del objeto. Las cadenas, si sus longitudes varían mucho, pueden requerir una reasignación. Sin embargo, el relleno de cuerdas y el factor de relleno deberían aliviar esto.
  • Los enteros pueden ser indicadores (todavía no se pueden consultar), desafortunadamente, vea SERVER-3518
  • Los enteros pueden ser consultados por $gt / $lt para que pueda implementar eficientemente $or complejos $or consultas, aunque ese es un requisito bastante arcano y no hay nada de malo en $or consultas ...

Estoy almacenando enums para cosas como rangos (administrador, moderador, usuario ...) y logros para cada usuario en mi base de datos Mongo. Por lo que sé, Mongo no tiene un tipo de datos de enumeración, lo que significa que tengo que almacenarlo con otro tipo.

Pensé en almacenarlo utilizando números enteros, lo que supondría que usa menos espacio que almacenar cadenas para todo lo que fácilmente podría expresarse como un número entero. Otra ventaja que veo con el uso de enteros es que si quisiera cambiar el nombre de un logro o rango, podría cambiarlo fácilmente sin siquiera tener que tocar la base de datos. Un beneficio que veo por el uso de cadenas es que los datos requieren menos procesamiento antes de que se utilicen y es más legible para los humanos, lo que podría ayudar a localizar errores.

¿Hay mejores maneras de almacenar enumeraciones en Mongo? ¿Hay una razón fuerte para usar enteros o cadenas? (Tratando de mantenerse alejado de una pregunta que es mejor)