Indices en MongoDB

Los índices son un factor de tuning de rendimiento fundamental en cualquier base de datos, y también en MongoDB!

Los índices en MongoDB tienen una correspondencia con índices de una bd relacional por lo que resultan familiares a los que vienen de SQL.

MongoDB usa índices B-Tree y soporta índices secundarios.

El tipo y frecuencia de las queries deben tenerse en cuenta a la hora de seleccionar los índices, ya que estos imponen un overhead en las escrituras y en el uso de recursos (disco y memoria).

Tipos de índices

MongoDB tiene un modelo de consultas rico que permite acceder de forma sensible a los datos. Por defecto MongoDB crea un índice sobre el campo _id del documento.

Todos los índices creados por el usuario son índices secundarios, cualquier campo puede usarse como índice secundario, incluyendo campos con arrays.

Las opciones de indices incluyen:

· Indices compuestos : permite usar más de un índice para una consulta. Esta capacidad es útil cuando se ejecutan consultas ad-hoc y los patrones de acceso de datos no son conocidos de antemano.

· Índices únicods: MongoDB rechazará inserciones de nuevos documentos o actualización de un documento con un valor existente para el field para el que se ha creado el índice único. Por defecto todos los índices se establecen como NO únicos.

· Índices de array: índices para campos de tipo array, cada valor del array se almacena como una entrada de índice separada.

· Índices TTL: índices Tiempo de vida (TTL) permiten al usuario especificar un período de tiempo después del cual la base de datos elimina automáticamente los datos. Un uso común de TTL es en aplicaciones que mantienen una ventana de historial para las acciones del usuario tales como clickstreams.

· Índices geospaciales: para optimizar consultas relativas a la ubicación dentro de un espacio de dos dimensiones. la tierra. Estos índices permiten lanzar consultas de documentos que contienen un polígono o puntos, los más cercanos a un punto o línea, que están dentro de un círculo, rectángulo o polígono; o que cruzan un círculo, rectángulo o polígono.

· Índices Sparse: estos índices sólo contienen entradas para los documentos que contienen la el campo especificado. Como MongoDB permite que el modelo de datos varíe de un documento a otro, es común para algunos campos estén sólo en un subconjunto de todos los documentos. Permite índices más pequeños y eficientes.

· Índices Hash: permite calcular un hash del valor de una campo e indexar el valor. Se usan para permitir sharding basado en hash haciendo una distribución simple y uniforme de los documentos a través de fragmentos.

· Índices de búsqueda de texto: MongoDB ofrece un servicio de búsqueda de texto, permite añadir uno o varios atributos.

El Motor de almacenamiento de MongoDB soporta todos los tipos de índices, a diferencia de algunas bases de datos relacionales, donde según el motor pueden usarse uno o otros índices.

Optimización del rendimiento con indices

El optimizaador de consultas de MongoDB selecciona el índice de forma automática ejecutando planes de queries y seleccionado el plan que da mejor tiempo de respuesta.

El optimizador puede sobreescribirse con el método cursor.hint().

Como en las bd relacionales el DBA puede revisar los planes de consultas y asegurarse de que las consultas se ejecutan con el índice correcto.

La función explain() da informes sobre tiempos, documentos, índices usados, memoria,…

El Profiler de Mongo se usa durante depuración para por ejempll logear operaciones cuyo tiempo duran más de un cierto tiempo.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s