sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Impacto en el rendimiento del tipo de datos de índice en MongoDB?

Un requisito de almacenamiento de valores enteros es menor, pero por supuesto, no muy significativo. El algoritmo de clasificación/indexación de un número sería ligeramente más rápido que una cadena normalmente, pero la diferencia sería extremadamente pequeña ya que la cadena también es muy corta.

No esperaría una diferencia de rendimiento convincente entre los dos. Si planea almacenar direcciones IPV6, el problema será que BSON (http://bsonspec.org/ #/especificación ) no tiene un tipo de datos simple para almacenar un número de 16 bytes, por lo que no es necesariamente una opción natural para almacenar solo como un número.

Al final, es probable que solo use cadenas si desea evitar la traducción del almacenamiento a la pantalla, o si desea que las consultas sean más naturales para escribir para la mayoría de nosotros :):

db.ips.find({addr: "192.168.1.1"})

Si usa cadenas, también le sugiero que considere almacenar como una cadena de formato fijo como 192.168.001.001 si desea realizar búsquedas más complejas, como una búsqueda por rango. Dado que una cadena almacenada con un formato fijo coherente se ordenará de forma natural, puede usarla de más formas de las que podría usar de otro modo. Si los rangos no son importantes, no es necesario almacenar de esta manera.

Con un formato fijo, podría hacer una consulta como:

db.ips.find({ addr: {
                 $gte: "192.168.000.000",
                 $lte: "192.168.000.255" } })

Eso encontraría todas las direcciones IP entre (inclusive) 192.168.0.0 y 192.168.0.255 .

Idealmente, tendrá un índice en el campo de cualquier manera:

db.ips.ensureIndex({ addr: 1 })