algoritmos en memoria secundaria

Anuncio
Sistemas de Información II
Tema 8. Estructuras de
datos en memoria
secundaria
Bibliografía:
Elmasri y Navathe: “Fundamentos de Sistemas de Bases de
Datos”
3ª edición, 2002 (Capítulo 6).
Garcia-Molina, Ullman y Widom: “Database systems: the
complete book”. Prentice-Hall (Capítulos 12 y 13).
Carlos Castillo
UPF – 2008
1
Índice
Indexación
Datos
Consulta
Índice
Datos
Respuesta
2
Indexación
Índice
Estructura que permite encontrar
rápidamente un registro de datos
Requerimientos
Bajo sobrecosto (overhead) en espacio
Alta velocidad de búsqueda
[Opcional] Alta velocidad de inserción
[Opcional] Alta velocidad de borrado
3
Índices en ficheros
secuenciales
4
Fichero secuencial
10 | Juan
20 | Pedro
30 | Diego
40 | Ana
Bloques
50 | María
60 | Iván
Persona(idpersona int, nombre char(12))
Asumimos bloque es de tamaño 32 bytes
(anormalmente pequeño)
5
Índice denso
10
20
30
40
50
60
B1R1
B1R2
B2R1
B2R2
B3R1
B3R2
Índice
10 | Juan
20 | Pedro
30 | Diego
40 | Ana
50 | María
60 | Iván
Datos
Todos los elementos están en el índice
6
Otro ejemplo índice denso
0 1 Datos (19 bytes)
0123456789012345678
JUANPEDRODIEGOTOMAS
0
Índice (4 ints)
4
Veloz en la recuperación
de registros por número
9
ej.: recuperar registro 2
14
7
Índice disperso
10 B1R1
30 B2R1
50 B3R1
Índice
10 | Juan
20 | Pedro
30 | Diego
40 | Ana
50 | María
60 | Iván
Datos
Sólo algunos de los elementos están en el índice
Densidad del índice = claves indexadas / claves totales
8
Índice primario
Índice sobre el atributo según el cual están
ordenados los elementos, con el primer
elemento de cada bloque
Es un índice disperso
Aaron, Ed
B1
Adams, John B2
...
Wright, Pam Bn
Bloque 1
Aaron, Ed – Acosta, Marc
Bloque 2
Adams, John – Akers, Jan
...
Bloque n
Wright, Pam – Zimmer, Byron
9
Cálculo costo acceso
sin índice
Datos
Número de registros
r = 30,000 registros
Tamaño del bloque
B = 1,024 bytes
Tamaño del registro
R = 100 bytes
¿Costo búsqueda binaria?
Elementos por bloque = R/B ~ 10
Bloques totales = r / 10 = 3,000 bloques
Costo búsqueda binaria = log2(3000) ~ 12
10
Cálculo costo acceso
con índice
Datos
Número de registros
r = 30,000 registros
Tamaño del bloque
B = 1,024 bytes
Tamaño del registro
R = 100 bytes
Tamaño de la clave
V = 9 bytes
Tamaño del #bloque P = 6 bytes
¿Costo búsqueda binaria?
Tamaño del índice: (V+P)*3,000 = 45,000
Número de bloques: 45,000/1,024 = 44
Búsqueda binaria = log2(44) ~ 6 + 1 = 7
11
Desventajas de este índice
Inserción y borrado son costosos
Solución:
Inserción: desbordamiento de bloques
Borrado: marca de “borrado” por elemento
12
Índice de agrupación
Registros ordenados por un campo que
no es único.
Ej.: cod_aero, num_vuelo
Cod_aero Bloque
AAR
B1
LAN
B1
QAT
B2
VAR
B3
Bloque 1
AAR, 222
AAR, 333
LAN, 444
Bloque 2
LAN, 555
LAN, 666
QAT, 777
Bloque 3
VAR, 888
13
Índice de agrupación con
bloques separados
Se reserva espacio en cada bloque
Cod_aero
Bloque
AAR
1
LAN
2
QAT
4
...
Bloque 1
AAR, 222
AAR, 333 Bloque 2
LAN, 444
#
next # LAN, 555
LAN, 666Bloque 3
next 3 LAN,777
#
#
next #Bloque 4
QAT,888
QAT,999
#
next #
14
Índice secundario
Se construye sobre un campo que no
es clave primaria
Es un índice denso (cada registro tiene
un lugar en el índice)
15
Índice secundario,
sobre campo único
Ej.:
Pais( id_pais, nombre_pais ) Bloque 1
nombre_pais
Argentina
Argelia
Burundí
Camerún
Chad
...
id_bloque
3
1
3
2
2
1, Francia
2, Argelia
3, Suecia
Bloque 2
4, Camerún
5, Chad
6, México
Bloque 3
7, Burundí
8, Noruega
9, Argentina
16
Índice secundario,
sobre campo no-único
Ej.: Persona( dni, nombre, apellido )
1
B1R1, B2R2
nombre id_indice
Anna
1
Joan
2
Jordi
3
Xavier
4
2
B1R2, B3R1
3
B3R2, B2R1
Bloque 1
x, Anna, x
x, Joan, x
Bloque 2
x, Jordi, x
x, Anna, x
Bloque 3
x, Joan, x
x, Jordi, x
Se utiliza un nivel intermedio de indirección
17
Índices multinivel
18
B-Tree
“Block-tree”
[Bayer & McCreight, 1972]
Árbol balanceado
Típicamente (mínimo) 3 niveles
Variante B+ es más popular
19
Nodo hoja (externo)
34
82
95
Al siguiente hermano
Al registro 34
Al registro 82
Al registro 95
20
Nodo interno
21
52
75
x < 21
75 <=x
75
21
21 <= x < 52
52
52 <=x < 75
21
B-Tree
13
7
2
3
5
7
11
23 31 43
13 17 19
23 29
31 37 41
43 47
22
Búsqueda en B-Tree
Buscar un elemento
Nodo hoja: búsqueda binaria entre los
punteros
Nodo interno: búsqueda binaria y
descender por el nodo apropiado
Búsqueda de elementos dentro de un
rango (WHERE x > 10 AND x < 20)
23
Reglas del B-Tree
La raíz tiene 1 elemento (2 punteros) al
menos
Todas las hojas están al mismo nivel
Existe una ocupación mínima (no sólo
máxima)
En nuestros ejemplos es 1
Existe una ocupación máxima (en este
caso k=3)
24
Insertar 12 en B-Tree (trivial)
13
7
2
3
5
7
11 12
23 31 43
13 17 19
23 29
31 37 41
43 47
25
Insertar 40 en B-Tree
13
7
2
3
5
7
11
23 31 43
13 17 19
23 29
31 37
43 47
40 41
26
Insertar 40 en B-Tree (cont.)
13 40
7
2
3
5
7
11
23 31
13 17 19
43
23 29
31 37
43 47
40 41
27
Borrado de 7 en B-Tree
13
7
2
3
5
7
11
23 31 43
13 17 19
23 29
31 37 41
43 47
28
Borrado de 7 en B-Tree (cont.)
13
5
2
3
5
11
23 31 43
13 17 19
23 29
31 37 41
43 47
29
Borrado de 11 en B-Tree
13
5
2
3
5
11
23 31 43
13 17 19
23 29
31 37 41
43 47
30
Borrado de 11 en B-Tree (cont.)
13
5
2
3
5
23 31 43
13 17 19
23 29
31 37 41
43 47
31
Borrado de 11 en B-Tree (cont.)
13
13
2
3
5
23 31 43
13 17 19
23 29
31 37 41
43 47
32
Borrado de 11 en B-Tree (cont.)
23
13
2
3
5
31 43
13 17 19
23 29
31 37 41
43 47
33
Contenidos del B-Tree
Un B-Tree de orden k (datos por nodo)
y altura h, ¿cuántos elementos puede
tener?
34
Hashing
35
Función de Hashing
N claves en un
dominio de tamaño D
N << D
h(.)
Típicamente
enteros entre
0yM
Con M > N
36
Función de hashing típica
int hashfunction(char *s) {
int i;
for( i=0; *s; s++ ) {
i = 131*i + *s;
}
return( i % M );
}
37
Ejemplo simple
http://en.wikibooks.org/wiki/Data_Structures/Hash_Tables
38
Colisión: solución con
lista enlazada
http://en.wikibooks.org/wiki/Data_Structures/Hash_Tables
39
Colisión: solución con
linear probing
http://en.wikibooks.org/wiki/Data_Structures/Hash_Tables
40
Hashing en memoria
secundaria
Se usa M pequeño (M < N)
Cada bucket de la tabla de hashing es
uno de los M bloques
Se admiten k colisiones, k=registros
por bloque
Los bloques pueden tener punteros a
bloques para desbordamiento
Cuando se llena (M*k) puede ser muy
lento hacer rehashing
41
Hashing extensible
La función de hashing tiene x bits
Se ocupa primero 1 bit => sólo 2
buckets
Cuando se produce overflow, se
reorganiza para ocupar 2 bits => 4
buckets
La tabla de hashing crece
dinámicamente duplicando su tamaño
42
Resumen
Los SGBD ocultan una alta complejidad
Conocer cómo se organizan cada motor
de bases de datos ayuda a obtener
mejor eficiencia
Índices generan sobrecosto en espacio
y sobrecosto en tiempo al modificar los
datos => usar responsablemente
43
Descargar