1 deJulio de 2000 Vol. 1 No.1


CÓMO DISEÑAR GRANDES VARIABLES EN BASES DE DATOS MULTIDIMENSIONALES
Manuel de la Herrán Gascónhttp://www.eside.deusto.es/profesores/mherran/
Ingeniero Informático por la Universidad de Deusto

Vicent Castellar-Busó http://www.uv.es/~buso/
Doctor en Matemáticas por la Universidad de Valencia

(continuación...)

Cómo reducir el tiempo de las agregaciones

En algunas implementaciones de bases de datos multidimensionales, el tiempo necesario para precalcular todas las posibles agregaciones de una variable multidimensional es excesivo. Aunque hay espacio suficiente para poseerlas todas, no hay tiempo suficiente para calcularlas.

Si el número de agregaciones es excesivo, una solución es no precalcularlas todas, y calcularlas bajo demanda. Es decir, simplemente podemos dejar de agregar en una dimensión, agregando en todas las demás y calcular en esa dimensión únicamente los valores solicitados por el usuario.

Por ejemplo, si la dimensión D1 posee cuatro valores que son: T, V1, V2 y V3, siendo T el padre de V1, V2 y V3, una variable cualquiera dimensionada por D1, como por ejemplo

V1(D1 D2 D3 D4 D5 D6 D7)

podría no necesitar ser agregada por D1 siempre que, en vez de consultar directamente V1, se consultase una fórmula F1 que calculase sobre la marcha el acumulado T en caso de solicitarse, es decir:

F1 =

f D1 = 'T'
V1(D1 'V1') + V1(D1 'V2') + V1(D1 'V3')
else
V1

Si la estructura de la jerarquía fuese más compleja, la fórmula quedaría más compacta haciéndola recursiva. Por ejemplo, si T tuviese dos hijos subtotales ST1 y ST2 los cuales a su vez, tuvieran los hijos, por una parte, ST1A, y ST1B y por otra ST2A, ST2B, y ST2C respectivamente, el total de la fórmula podría calcularse a partir de los subtotales:

F1 =

if D1 = 'T'
F1(D1 'ST1') + F1(D1 'ST2')
else if D1 = 'ST1'
V1(D1 'ST1A') + V1(D1 'ST1B')
else if D1 = 'ST2'
V1(D1 'ST2A') + V1(D1 'ST2B') + V1(D1 'ST2C')
else
V1

Podríamos aplicar este método por más de una dimensión. Por ejemplo, si en la variable

V1(D1 D2 D3 D4 D5 D6 D7)

quisiéramos realizar bajo demanda las agregaciones por D1 y D2, bastaría con agregar por el resto de dimensiones y crear dos fórmulas como F1 y F2, consultando F2 en vez de V1.

F1 =

if D1 = 'T'
V1(D1 'V1') + V1(D1 'V2')
else
V1
F2 =
if D2 = 'T'
F1(D2 'V1') + V1(D2 'V2') + V1(D2 'V3')
else
F1

F2 realiza bajo demanda las agregaciones en D2 y para ello consulta F1, que es quien agrega D1 leyendo de V1. El principal problema de esta solución es que las modificaciones de la dimensión deberán reflejarse en estas fórmulas. Para facilitar este trabajo, puede ser muy útil construir un programa que recorra la estructura jerárquica de la dimensión y genere el texto de la fórmula que refleja las relaciones entre valores.

Resumiendo, si el tamaño de una variable es excesivo, podemos reducirlo descomponiendo la variable en otras a las cuales le falte alguna de las dimensiones, consultando una fórmula que extraiga cada vez la información de la variable correspondiente.

Si las agregaciones son lentas, podemos no agregar por todas las dimensiones y calcular bajo demanda las agregaciones restantes. En este caso, es interesante que la dimensión excluida de la agregación sea grande

.


Dirección General de Servicios de Cómputo Académico-UNAM
Ciudad Universitaria, M
éxico D.F.