A diferencia de nuestros anteriores posts , este post no esta
enfocado al analista de negocio o el tomador de desiciones que
utiliza el data warehouse y el sistema o aplicaciones analiticas de
inteligencia de negocios, si no que esta mas enfocado al equipo
técnico detrás de un proyecto de este tipo(project
managers,arquitectos de sistemas, desarrolladores de
sistemas,administradores de sistemas y de bases de datos,ingenieros
de datos,etc).
Todo aquel que haya tomado un curso de bases de datos, conoce la
importancia de la apliacion de índices para mejorar el desempeño de
una base de datos,pero la pregunta es , cuantas personas o equipos
detrás de la construcción y mantenimiento de un sistema aplican lo
aprendido en la teoría para mejorar el funcionamiento de un sistema
real en su día a día? . Lamentablemente la respuesta es que muy
pocas personas(o casi ninguna) lo hacen a pesar de que de manera
académica se ve su importancia y los beneficios obtenidos, esto por
muchas posibles razones,según mi experiencia y charlas con colegas
ingenieros de sistemas, algunas de estas razones son:
-
La constante presión y tiempos apretados para proyectos de este
tipo obligan a que el equipo “funcione” y cumpla su objetivo,
sin importar si lo hace de manera óptima y eficiente.
-
Aun que la importancia de los indices es recalcada en los cursos, la
teoría nunca se pone en práctica ya que los cursos universitarios
se enfocan en un buen diseño de la base de datos pretendiendo
cumplir con los requerimientos funcionales,sin dar importancia a el
rendimiento del sistema.
-
Muchas personas, no conocen la importancia(o incluso que es) de la
aplicación de indices nisiquiera de manera teorica ya que el curso
se enfoca en crear un buen diseño y sentencias y herramientas de
implementacion y manipulación de ese diseño.
-
Muchas veces el adminsitrador de bases de datos piensa que es tarea
del desarrollador y el desarrollador piensa que es tarea del
administrador de base de datos. En realidad es una tarea conjunta en
donde ambos deberían de aportar , el desarrollador comunmente tiene
un mayor conocimiento y detalle de la manera y frecuencia en que las
aplicaciones acceden a la información y el administrador de base de
datos conoce como esta realiza internamente estos accesos.
-
Simplemente al equipo no le importa o es algo para lo que no se
desea invertir esfuerzo.
En el ámbito de proyectos y sistemas de inteligencia de negocios y
data warehouse, este problema se presenta aún con mas frecuencia a
pesar de que debería de ser mas importante ya que uno de los
objetivos de un sistema de Dwh es agilizar y minimizar el tiempo de
acceso a la información, en este caso el problema se presenta
debido a las razones ya mencionadas(agendas apretadas,desconocimiento
del tema, mala planificación,indiferencia) y otras razones tales
como:
-
Se utiliza un motor de base de datos optimizado para sistemas
analiticos(por ejemplo motorores de bases de datos columnares) y se
tiene la falsa creencia o se escucha el falso mito, de que estos
motores de base de datos, no necesitan(o incluso no poseen) indices.
(Ver al final del post : Ejemplo Aplicado)
-
Se tiene la falsa creencia ,de que al tener la información en un
diseño optimizado para analisis(como un modelo estrella) se hace
innecesario contar con indices ya que no hay manera de agilizar el
acceso a la información.
-
Nuevamente , mala planificación y no contar con tiempo en la agenda
para realizar esto.
En mi experiencia trabajando para una consultora con expertise en
BI/DWH , la aplicación de indices nunca estuvo en el plan del
proyecto , y se contemplaba como una alternativa, hasta que el
performance del sistema se veía degradado.
Según los expertos(y creadores originales) de las técnicas y
patrones del modelado dimensional para sistemas de BI/DWH , el diseño
de un plan de índices es tan importante, como el diseño del modelo
dimensional ,el tiempo para esta actividad debe estar contemplado en
el plan del proyecto y debe ser realizado posteriormente(al menos en
una versión inicial) justo después de tener el diseño del modelo
dimensional realizado y un perfilamiento inicial de la data
realizado(para conocer cantidad de registros,tipos de datos , valores
unicos en cada tabla). Para mayor información de esto , se puede
consultar la metodología o ciclo de vida Kimball y el libro “The
Data Warehouse Lifecycle Toolkit”
Ejemplo
Como se mencionó, una de las razones por las cuales erróneamente no
se aplican índices en un sistema de BI/DWH ,es que muchas veces se
utiliza un motor de base de datos optimizado para analíticos, por
ejemplo una base de datos columnar(como amazon Redshift o Sybase IQ) y se tiene la idea equivocada de
que esto hace innecesaria la aplicación de índices, o incluso que
el motor de base de datos no brinda esta característica.
En mi experiencia en multiples proyectos con motores de base de datos columnares ,esta fue una tarea menospreciada y
olvidada en muchas ocasiones ,pero cuando se presento la necesidad de
realizara, se obtuvieron beneficios destacables,por ejemplo para el motor de base de
datos columnar Sybase IQ(al igual que la mayoría en el mercado) ofrece multiples tipos
de indices y cada tipo se encuentra destinado a cierta tarea, según
factores como:
-
Tipo de dato
-
Cardinalidad de valores en una tabla
-
Es una columna utilizada para un join?
-
Es una dimension o un indicador?
Para el caso de amazon redshift, el concepto de indice no aplica en el sentido convencional, pero este maneja diferentes conceptos tales como sortkeys,distribution keys y encoding. Que tipo de cada uno de estos aplicar depende mucho de la estructura , cardinalidad , uso(por ejemplo si es ROLAP o OLTP,para ROLAP si es dimension o fact table) , como ejemplos tenemos:
- Para surrogate keys conviene usar encoding o compresion tipo delta.
- Para llaves foraneas(en una fact table) a dimensiones con cardinalidad menor a 255 valores, usar bytedict(equivalente a indices bitmap en Sybase IQ).
pero los beneficios pueden ser enormes, tanto en performance como en storage(lo cual se traduce en ahorro de dinero).
Referencias
utiles
-
Para aprender mas sobre índices en general(para los motores de base
de datos mas comunes) consultar:
Para aprender mas sobre la metodología Kimball , y sus
recomendaciones sobre el plan y aplicación de indices, consultar:
-
Para aprender mas sobre los diferentes tipos de indices y su
aplicación en el motor SAP Sybase IQ, consultar mi siguiente post
:)