Fragmentación vertical

Anuncio
Diseño de fragmentación vertical
Diseño de Fragmentación Vertical
El objetivo de la fragmentación vertical es
particionar una relación en un conjunto de
relaciones mas pequeñas de tal manera
que muchas aplicaciones de usuarios
corran en un solo fragmento.
La
fragmentación
vertical
es
mas
complicada que la fragmentación horizontal.
Esto es debido al número total de posibles
de maneras de fragmentar una tabla crece
exponencialmente.
Por ejemplo:
En fragmentación horizontal, si el número
total de predicados simples en P es n,
existen
2n
posibles
predicados
miniterminos que pueden ser definidos.
En fragmentación vertical , si una relación
tiene m atributos no primarios, el número
de posibles fragmentos es igual a B(m), el
cuál es el enésimo número Bell. Para
valores grandes de m, B(M) aprox. mm; por
ejemplo: si m=10, B(10)=115,000; si m=15,
B(15)=109 ; para m=30, B(30) = 1023 |
Dos enfoques heurísticos
fragmentación vertical:
existen
para
1. Agrupación: alcance en el cuál atributos son
progresivamente agregados para constituir
fragmentos.
2. Particionamiento: alcance en el cuál las
relaciones globales son progresivamente
divididas en fragmentos
En ambos casos en cada iteración buscan la mejor
opción factible basándose en fórmulas que indican
cuál es la mejor agrupación o particionamiento
posible.
Requerimientos de información
de la fragmentación vertical
afinidad de atributos
Afinidad de atributos nos indica que tan
relacionados está los atributos respecto de
las aplicaciones.
El requerimiento principal de información
relacionado a las aplicaciones es su
frecuencia de acceso.
Establescamos lo siguiente:
Q = { q1, q2,..,qq}
aplicaciones.
conjunto de querys de las
R (A1, A2, .., An)
relación.
Para cada query qi y cada atributo AJ asociamos
un valor de uso de atributo que definiremos como:
__
| 1 si AJ es referenciado por qi
use (qi , AJ ) = |
|__ 0 si AJ no es referenciado por qi
Ejemplo 1:
Considere la sig. tabla:
J ( NoJ, nombreJ, pto, cd)
Y los sigs. querys:
q1: SELECT pto
FROM J
WHERE NoJ = $value
q2: SELECT nombreJ, pto
FROM J
q3: SELECT nombreJ
FROM J
WHERE cd = $value
q4: SELECT SUM (pto)
FROM J
WHERE cd = $value
Denotemos a:
A1 = NoJ ; A2 = nombreJ;
A3 = pto ;
A4 = cd.
El valor de uso de cada atributo es mostrado en
la siguiente matriz:
A1
A2
A3
A4
Q1
1
0
1
0
Q2
0
1
1
0
Q3
0
1
0
1
Q4
0
0
1
1
Matriz de Uso de atributos
Estos valores no representan el peso de las
frecuencias de acceso de las aplicaciones,
esta puede ser incluida en la definición de la
medida de afinidad de atributos, aff(Ai , Aj ),
que mide el grado de enlazamiento entre dos
atributos de una relación de acuerdo a como
ellos son accesados por las aplicaciones y se
define de la sig. manera:
Aff(Ai , Aj) =
Σ
Σ refl (qk) accl (qk)
∀k | use(qk,Ai )=1^ use(qk, Aj)=1 ∀Sl
Donde:
refl (qk) es el número de accesos a los
atributos (AI ,Aj) para cada ejecución de la
aplicación qk en el sitio Sl .
accl (qk) es la frecuencia con que una
aplicación qk se ejecuta en el sitio Sl.
El resultado es una matriz n*n, que
llamaremos la matriz de afinidad de atributos.
Ejemplo 2
Continuemos con el ejemplo 1; por simplicidad
establescamos refl (qk) = 1 para todo qk y Sl .
Establezcamos las siguientes frecuencias de las
aplicaciones.
acc1 (q1) = 15
acc1 (q2) = 5
acc1 (q3) = 25
acc1 (q4) = 3
acc2 (q1) = 20
acc2 (q2) = 0
acc2 (q3) = 25
acc2 (q4) = 0
acc3 (q1) = 10
acc3 (q2) = 0
acc3 (q3) = 25
acc3 (q4) = 0
La afinidad entre A1 y A3 puede ser calculada de
la sig. manera:
Aff(A1 , A3)
= Σ Σ accl (qk)
= acc1 (q1) + acc2 (q1) + acc3 (q1)
= 15 + 20 + 10 = 45
La matriz de afinidad (AA) es la sig.
A1
A2
A3
A4
A1
45
0
45
0
A2
0
80
5
75
A3
45
5
53
3
A4
0
75
3
78
La matriz de afinidad nos ayudará en el
proceso de fragmentación, el cuál en
forma general constará de dos pasos:
1.- Agrupar aquellos atributos con mayor
afinidad.
2.- Dividir la relación de acuerdo a la
agrupación.
Algoritmo de Agrupación
Un algoritmo de enlace de energía (BEA)
deberá ser usado para esta actividad. El
algoritmo BEA toma como entrada la matriz de
afinidad de atributos (AA), permuta sus
renglones y columnas y genera una matriz de
afinidad agrupada (CA). Las permutaciones son
realizadas de tal manera que se maximize la
siguiente medida de afinidad global (AM) :
n
n
AM = Σ Σ aff(Ai,Aj) [aff(Ai,Aj-1)+aff(Ai,Aj+1)+aff(Ai-1,Aj) + aff(Ai+1,Aj)]
i = 1 j =1
Donde:
aff(A0,Aj) = aff(Ai,A0)=aff(An+1,Aj) = aff(Ai,An+1) = 0
Debido a que la matriz AA es simétrica, AM se
puede definir:
n
n
AM = Σ Σ aff(Ai,Aj) [aff(Ai,Aj-1)+aff(Ai,Aj+1)]
i = 1 j =1
El algoritmo BEA (para generar la matriz CA):
Inicio
CA(*,1) = AA (*,1)
CA(*,2) = AA(*,2)
índice = 3
Mientras índice <= n haz
Para i haz desde 1 hasta (índice -1)
contribucion(Ci-1, Cindice , Ci ) /* Ci es la columna i */
fin_para
contribución(Cíndice-1, C índice , Cíndice+1 )
loc= colocación dada por máximo valor de contribución
Para j haz desde índice hasta (loc+1) en paso de -1
CA(*, j) = CA(*, j-1)
fin_para
CA(*,loc) = AA(*,índice)
índice = índice +1
fin_mientras
ordena los renglones de acuerdo al orden relativo de las columnas
fin { BEA}
Donde
contribución(Ai ,Ak ,Aj) = 2 bond(Ai,Ak) + 2 bond(Ak,Aj) 2 bond(Ai,Aj )
Donde
n
bond(Ax,Ay) = Σ aff(Az,Ax) * aff(Az,Ay)
z=1
Ejemplo 3:
Considere la matriz AA y calculemos la
contribución de mover el atributo A4 entre los
atributos A1 y A2:
contribución(A1,A4,A2) = 2bond(A1,A4)+2bond(A4,A2) - 2bond(A1,A2)
2bond(A1,A4) = 2 (45*0 + 0*75 + 45*3 + 0*78) = 270
2bond(A4,A2) = 2 (0*0 + 75*80 + 3*5 + 78*75) = 23730
2bond(A1,A2) = 2 (45*0 + 0*80 + 45*5 + 0*75) = 450
contribución(A1,A4,A2) = 270 + 23730 - 450 = 23550
Ejemplo 4:
Considere la relación J y la matriz de afinidad AA del
ejemplo 2.
Siguiendo el algoritmo BEA
Inicialización de CA
CA
índice = 3
i=1
contribución(C0,A3,C1) = 8820.
i=2
contribución(C1,A3,C2) = 10150.
contribución(C2,A3,C4) = 1780.
loc = 2 { colocamos a atributo 3 en columna 2}
índice = 4
i=1
contribución(C0,A4,C1) = 270.
i=2
contribución(C1,A4,C2) = -7014.
i=3
contribución(C 2,A4,C3) = 23186.
contribución(C3,A4,C5) = 23730.
loc = 4 { colocamos a atributo 4 en
columna 4}
Ordenando renglones de acuerdo a orden de
columnas
CA (final)
Partición de la matriz CA
El objetivo de la actividad de división
es encontrar un conjunto de atributos que
sean accedidos por la mayor cantidad de
distintas aplicaciones.
Considere la sig. matriz CA; si un punto a lo largo de la
diagonal es establecido, dos conjuntos de atributos son
identificados. Un conjunto { A1,A2,..,Ai }, denotado por
TA, está colocado en la esquina superior izquierda y el
segundo conjunto { Ai+1,..,An }, denotado BA, está en la
esquina inferior derecha.
Establezcamos lo siguiente:
Q = { q1, q2,..,qq} -> conjunto de aplicaciones.
AQ(qi ) = { Aj | use (qi , Aj ) = 1}
-> conjunto de atributos accesados por la aplicacion qi
TQ = { qi | AQ(qi) esta incluído en TA}
-> conjunto de aplicaciones que accesan solo a TA
BQ = { qi | AQ(qi) esta incluído en BA}
-> conjunto de aplicaciones que accesan solo a BA
OQ = Q - { TQ U BQ}
-> conjunto aplicaciones que accesan a TA y BA
Si existen n atributos de una relación
existen n-1 posibles posiciones donde el
punto de división puede ser colocado a lo largo
de la diagonal de la matriz CA asociada a esa
relación. La mejor posición para la división es
aquella que produce los conjuntos TQ y BQ tal
que el acceso total a un solo fragmento es
maximizado mientras el acceso total a ambos
fragmentos es minimizado.
Por tanto definimos las siguientes ecuaciones.
Σ
ε
Σ
∀
Σ
ε
Σ
∀
Σ
ε
Σ
∀
La solución al problema de optimización es
encontrar el punto x (1 <= x <= n-1) tal que la
expresión
es maximizada.
Un aspecto importante es que la expresión
anterior define dos fragmentos tal que los
valores de CTQ y CBQ son muy parecidos.
Existen dos detalles del planteamiento expuesto:
1.
La matriz es dividida solamente en dos grupos. Una
solución a esta situación es aplicar recursivamente el
algoritmo de partición binaria para cada uno de los
grupos obtenidos durante la partición previa.
2.
Un grupo de atributos pudiera encontrarse en la mitad
de la matriz (no en una esquina). Para solucionar esto
tendremos que rotar columnas y renglones de la
matriz: la columna más a la izquierda de la matriz CA
es rotada para que sea ahora la columna mas a la
derecha y el renglón de más arriba es rotado hacia el
renglón mas bajo. La idea es mover el bloque de
atributos a la esquina superior izquierda.
Algoritmo de Partición
// Entrada: Matriz CA y tabla; Salida: Conjunto de fragmentos F = {f1, f2}
inicio
mejorZ = -infinito
repite
para i haz desde n-1 hasta 1 en paso de -1
calcula CTQi
calcula CBQi
calcula COQi
z = CTQi * CBQi - COQi 2
si (z > mejor) entonces
mejorZ = z
graba la estructura de la matriz rotada(TA,BA)
fin_si
fin para
llamar a función ROTAR(CA)
hasta no mas rotaciones posibles
reconstruye CA de acuerdo a la estructura asociada a mejorZ.
f1 = PTA (R) U K { K es la llave de R}
f2 = PBA (R) U K
F = { f1 , f2 )
fin {partición}
Si aplicamos el algoritmo de partición a la
matriz CA obtenida en el ejemplo 4, obtenemos
los fragmentos f1 = { A1, A3} y f2 = { A1, A2, A4},
es decir, f1 = { NoJ , pto} y f2 = { NoJ, NombreJ,
Cd }
Descargar