sistemas de información ii tema 8. estructuras de datos en ... · sistemas de información ii tema...
TRANSCRIPT
1
Sistemas de Información II
Tema 8. Estructuras de datos en memoria secundaria
Carlos Castillo
UPF – 2008
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).
2
Consulta
ÍndiceDatos
Respuesta
IndexaciónÍndice
Datos
3
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
4
Índices en ficheros secuenciales
5
Fichero secuencial
10 | Juan20 | Pedro
30 | Diego40 | Ana
50 | María60 | Iván
Bloques
Persona(idpersona int, nombre char(12))
Asumimos bloque es de tamaño 32 bytes(anormalmente pequeño)
6
Índice denso
10 | Juan20 | Pedro
30 | Diego40 | Ana
50 | María60 | Iván
Todos los elementos están en el índice
10 B1R120 B1R230 B2R140 B2R250 B3R160 B3R2
ÍndiceDatos
7
Otro ejemplo índice denso
0 1
0123456789012345678
JUANPEDRODIEGOTOMAS
0
4
9
14
Índice (4 ints)
Datos (19 bytes)
Veloz en la recuperaciónde registros por número
ej.: recuperar registro 2
8
Índice disperso
10 | Juan20 | Pedro
30 | Diego40 | Ana
50 | María60 | Iván
Sólo algunos de los elementos están en el índice
Densidad del índice = claves indexadas / claves totales
10 B1R130 B2R150 B3R1
ÍndiceDatos
9
Índice primario
Aaron, Ed B1Adams, John B2...Wright, Pam Bn
Bloque 1Aaron, Ed – Acosta, Marc
Bloque 2Adams, John – Akers, Jan
...
Bloque nWright, Pam – Zimmer, Byron
Índice sobre el atributo según el cual están ordenados los elementos, con el primerelemento de cada bloque
Es un índice disperso
10
Cálculo costo accesosin í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
11
Cálculo costo accesocon í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
12
Desventajas de este índice
Inserción y borrado son costosos
Solución:
Inserción: desbordamiento de bloques
Borrado: marca de “borrado” por elemento
13
Índice de agrupación
Registros ordenados por un campo que no es único.
Ej.: cod_aero, num_vuelo
Cod_aero BloqueAAR B1LAN B1QAT B2VAR B3
Bloque 1AAR, 222AAR, 333LAN, 444
Bloque 2LAN, 555LAN, 666QAT, 777
Bloque 3VAR, 888
14
Índice de agrupación con bloques separados
Se reserva espacio en cada bloque
Cod_aero BloqueAAR 1LAN 2QAT 4...
Bloque 1AAR, 222AAR, 333#next #
Bloque 2LAN, 444LAN, 555LAN, 666next 3
Bloque 3LAN,777##next #Bloque 4
QAT,888QAT,999#next #
15
Índice secundario
Se construye sobre un campo que no es clave primaria
Es un índice denso (cada registro tiene un lugar en el índice)
16
Índice secundario,sobre campo único
Ej.:
Pais( id_pais, nombre_pais )
nombre_pais id_bloqueArgentina 3Argelia 1Burundí 3Camerún 2Chad 2...
Bloque 11, Francia2, Argelia3, Suecia
Bloque 24, Camerún5, Chad6, México
Bloque 37, Burundí8, Noruega9, Argentina
17
Índice secundario,sobre campo no-único
Ej.: Persona( dni, nombre, apellido )
nombre id_indiceAnna 1Joan 2Jordi 3Xavier 4
Bloque 1x, Anna, xx, Joan, x
Bloque 2x, Jordi, xx, Anna, x
Bloque 3x, Joan, xx, Jordi, x
1B1R1, B2R2
2B1R2, B3R1
3B3R2, B2R1
Se utiliza un nivel intermedio de indirección
18
Índices multinivel
19
B-Tree
“Block-tree”
[Bayer & McCreight, 1972]
Árbol balanceado
Típicamente (mínimo) 3 niveles
Variante B+ es más popular
20
Nodo hoja (externo)
34 82
Al registro 34
Al registro 82
Al siguiente hermano
95
Al registro 95
21
Nodo interno
21 52 75
x < 21
21 <= x < 52 52 <=x < 75
75 <=x
21 52
75
22
B-Tree13
7 23 31 43
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
23
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)
24
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)
25
Insertar � 12� en B-Tree (trivial)13
7 23 31 43
2 3 5 7 11 12 13 17 19 23 29 31 37 41 43 47
26
Insertar � 40� en B-Tree13
7 23 31 43
2 3 5 7 11 13 17 19 23 29
31 37
43 47
40 41
27
Insertar � 40� en B-Tree (cont.)13 40
7 23 31
2 3 5 7 11 13 17 19 23 29
31 37
43 47
40 41
43
28
Borrado de � 7� en B-Tree13
7 23 31 43
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
29
Borrado de � 7� en B-Tree (cont.)13
5 23 31 43
2 3 5 11 13 17 19 23 29 31 37 41 43 47
30
Borrado de � 11� en B-Tree13
5 23 31 43
2 3 5 11 13 17 19 23 29 31 37 41 43 47
31
Borrado de � 11� en B-Tree (cont.)13
5 23 31 43
2 3 5 13 17 19 23 29 31 37 41 43 47
32
Borrado de � 11� en B-Tree (cont.)13
13 23 31 43
2 3 5 13 17 19 23 29 31 37 41 43 47
33
Borrado de � 11� en B-Tree (cont.)23
13 31 43
2 3 5 13 17 19 23 29 31 37 41 43 47
34
Contenidos del B-Tree
Un B-Tree de orden k (datos por nodo) y altura h, ¿cuántos elementos puede tener?
35
Hashing
36
Función de Hashing
N claves en undominio de tamaño D
N << D
Típicamenteenteros entre0 y M
Con M > N
h(.)
37
Función de hashing típica
int hashfunction(char *s) {
int i;
for( i=0; *s; s++ ) {
i = 131*i + *s;
}
return( i % M );
}
38
Ejemplo simple
http://en.wikibooks.org/wiki/Data_Structures/Hash_Tables
39
Colisión: solución conlista enlazada
http://en.wikibooks.org/wiki/Data_Structures/Hash_Tables
40
Colisión: solución conlinear probing
http://en.wikibooks.org/wiki/Data_Structures/Hash_Tables
41
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
42
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
43
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