Está en la página 1de 105

TEMA 7

Introducción a las Estructuras de


Datos en Disco

ESTRUCTURAS DEPortada
DATOS Y ALGORITMOS I
Universidad de Almería 2º Grado en Ingeniería Informática
Capítulo 07: Introducción a las Estructuras de Datos en Disco
Escuela Superior de Ingeniería
Departamento de Informática
OBJETIVOS

  Repasar los conceptos de almacenamiento de datos en


archivos.
  Presentar los elementos básicos de las estructuras de
archivos.
  Clasificar las organizaciones básicas de registros en
archivos.
  Presentar y estudiar los árboles multicamino en disco
(índice en disco), cuya idea es generalizar el concepto
de Árbol Binario de Búsqueda (ABB) a lo que se conoce
como Árboles de Búsqueda m-arios. B-tree.

2 Capítulo 07: Introducción a las Estructuras de Datos en Disco


INDICE

  Almacenamiento de datos. Archivos.


  Elementos básicos de las estructuras de
archivos.
  Organizaciones básicas de registros en
archivos.
  Árboles multicamino en disco. B-tree.

3 Capítulo 07: Introducción a las Estructuras de Datos en Disco


INDICE

  Almacenamiento de datos. Archivos.


  Elementos básicos de las estructuras de
archivos.
  Organizaciones básicas de registros en
archivos.
  Árboles multicamino en disco. B-tree.

4 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Almacenamiento de datos. Archivos
Archivo ⇒ Conjunto de bytes existentes en algún
dispositivo de almacenamiento (por ejemplo, un disco, una
cinta magnética, un DVD, etc.)
  En sistemas operativos como LINUX se dice que
cualquier dispositivo del sistema se puede considerar
como si fuera un archivo ⇒ Un teclado, impresora, disco,
DVD, una partición, etc., serían también tratados como
archivos.
  Desde el punto de vista de un programa de usuario, éste
indicará al sistema operativo (SO) que asocie un archivo
físico a un archivo lógico, y a partir de entonces sólo se
comunicará con el archivo lógico.
5 Capítulo 07: Introducción a las Estructuras de Datos en Disco
Almacenamiento de datos. Archivos
Archivo ⇒ Identificado por un nombre y la descripción de
la carpeta o directorio que lo contiene.
  Tipos de Archivos ⇒ Binarios y de texto.
  Operaciones más importantes sobre archivos ⇒ Crear,
destruir, abrir, cerrar, leer, escribir y posicionamiento.
  Cuando creamos estructuras de archivos, estamos
imponiendo un orden a los datos, y existen varias formas
de implantar este orden. La más básica consiste en un
archivo de tipo stream (traducido como flujo, y
considerado desde el punto de vista lógico como un flujo
unidimensional de bytes).

6 Capítulo 07: Introducción a las Estructuras de Datos en Disco


INDICE

  Almacenamiento de datos. Archivos.


  Elementos básicos de las estructuras de
archivos.
  Organizaciones básicas de registros en
archivos.
  Árboles multicamino en disco. B-tree.

7 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Elementos básicos de una estructura de archivos
Estructuras de campos
  Campo ⇒ La menor unidad lógica de información con
significado en un archivo.
  Campo ⇒ Concepto lógico importante para la estructura
del archivo, pero no tiene que existir físicamente.
  Estructuras de campos (estructurar archivo en campos)
  Campos de longitud fija.
  Comenzar cada campo con un indicador de longitud.
  Utilizar un delimitador al final de cada campo.
  Utilizar una expresión del tipo clave = valor para identificar
cada campo y su valor.

8 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Elementos básicos de una estructura de archivos
Estructuras de registros
  Registro ⇒ Se define como un conjunto de campos que
permanecen unidos desde un punto de vista de alto nivel
organizativo.
  El registro, al igual que ocurre con el campo, es un
concepto lógico de un nivel conceptual superior al campo
y con significado propio.
  Los registros, al igual que los campos, no tienen que
existir en el archivo en sentido físico.

9 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Elementos básicos de una estructura de archivos
Estructuras de registros
  Estructuras de registros (estructurar archivo en registros)
  Registros de longitud fija en número de bytes.
  Registros de longitud fija en número de campos.
  Comenzar cada registro con un indicador del número de
bytes de longitud.
  Utilizar un archivo auxiliar donde se indica la posición de
inicio de cada registro.
  Utilizar un delimitador al final de cada registro.

10 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Elementos básicos de una estructura de archivos
Buffers y bloques de registros
  Se han desarrollado diferentes técnicas para obtener
mejores resultados en cuanto a minimizar los accesos a
disco. El uso de zonas de memoria a modo de buffers y
la agrupación de sectores en bloques son dos muestras
de los métodos más empleados por el SO para este fin.
  Buffer ⇒ Un buffer no es más que una porción de
memoria RAM que se utiliza a modo de caché para la
transferencia de datos desde el disco al procesador o
viceversa → El buffer se gestiona desde el SO, y es éste
quien lo mantiene, dotando al menos uno para cada
archivo abierto, aunque puede haber más.
11 Capítulo 07: Introducción a las Estructuras de Datos en Disco
Elementos básicos de una estructura de archivos
Buffers y bloques de registros
  El SO necesita tener control sobre el estado de todos los
sectores (unidad mínima de transferencia de información
entre el disco y el subsistema de E/S) en un disco.
  El SO utiliza un múltiplo del sector como unidad mínima
de transferencia de información de E/S, llamada cluster o
bloque dependiendo del gestor de archivos.
  Bloque ⇒ Espacio mínimo que puede ocupar un archivo
en disco (o en un dispositivo de almacenamiento).
  Un archivo no tiene por qué tener el mismo tamaño
desde el punto de vista físico en distintos sistemas de
archivos ⇒ Diferentes tamaños de bloque.
12 Capítulo 07: Introducción a las Estructuras de Datos en Disco
Elementos básicos de una estructura de archivos
Buffers y bloques de registros
  Esta forma de gestionar el espacio en disco por el SO,
repercute directamente sobre cómo se deberían
manipular nuestros registros de datos.
  Factor de Bloqueo ⇒ Determina cuántos registros
habrá en un bloque, dividiendo el tamaño de bloque
entre el tamaño de registro (suponiendo que un registro
sea de longitud fija e inferior a la del bloque).
  Dependiendo del tipo de registros que pertenecen a un
archivo se pueden distinguir dos tipos de organizaciones
en bloques (emblocamiento) ⇒ Fijo y variable.

13 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Elementos básicos de una estructura de archivos
Operaciones sobre registros ⇒ Inserción, borrado y
actualización. Estas operaciones van a requerir de otras
operaciones para gestionar la fragmentación del archivo
(interna y externa) en un dispositivo de almacenamiento.
  Inserción
  Si el archivo no mantiene ningún orden particular, se debe
buscar un bloque con suficiente espacio vacío para colocar
el nuevo registro, y en caso de no encontrar ninguno,
obtendremos un bloque nuevo donde lo introduciremos.
  Si el archivo mantiene un orden establecido (e.g. según
clave primaria) ⇒ Localizar primer bloque según orden y
determinar si hay espacio vacío en el bloque o no.

14 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Elementos básicos de una estructura de archivos
Inserción
  Si hay espacio suficiente en el bloque desplazar los
registros para hacer espacio y colocar el nuevo registro en
el lugar adecuado.
  Si no hay espacio en el bloque para colocar el nuevo
registro, entonces tendremos que buscarle otro bloque.
•  Añadir un bloque nuevo o bloque de desbordamiento u
overflow que será direccionado desde el bloque anterior a
partir de un puntero de overflow que existe en la cabecera
del bloque original que se había quedado sin espacio.
•  Encontrar espacio en un bloque vecino o próximo,
reorganizando los registros en dichos bloques para que sigan
manteniendo el orden establecido.

15 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Elementos básicos de una estructura de archivos
Eliminación
  En caso de tener una tabla de offsets, podemos eliminar el
registro simplemente desplazando los otros para dejar el
espacio libre en el centro del bloque. De esta forma queda
el espacio compactado, sin fragmentar.
  Si no tenemos una tabla de offsets o no podemos
desplazar los registros ⇒ Mantener una lista de registros
borrados o espacio libre en el bloque que nos permita
conocer qué espacio libre hay y su tamaño.
  Otra técnica es colocar una marca de borrado en cada
registro eliminado ⇒ Tabla de registros eliminados → El
espacio libre que queda puede ser recuperado realizando
un proceso de compactación general del archivo.
16 Capítulo 07: Introducción a las Estructuras de Datos en Disco
Elementos básicos de una estructura de archivos
Actualización
  Si los registros son de longitud fija, las modificaciones de
estos no afectan al almacenamiento, ya que el tamaño del
registro no varía, sólo cambia su contenido.
  Si los registros son de longitud variable, tenemos todos los
problemas de la inserción y del borrado juntos,
exceptuando la necesidad de crear marcas de borrado (en
su caso). Se pueden dar dos casos:
•  Si la nueva versión del registro es de un tamaño mayor que la
antigua, es necesario tomar espacio adicional del bloque ⇒
Desplazar otros registros dentro del bloque, e incluso la creación de
un bloque de overflow.
•  Si el nuevo registro es de menor tamaño, podemos utilizar técnicas
de recuperación de espacio expuestas anteriormente.

17 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Elementos básicos de una estructura de archivos
Acceso a registros ⇒ En estructuras de archivos el
registro es la mínima unidad de información que será leída
o escrita a la vez → Necesitamos técnicas para movernos
eficientemente con esta organización de datos.
  Claves de búsqueda
  Es conveniente tener identificados cada uno de los registros del
archivo con una clave (llave o key) basada en su contenido ⇒
Conseguiremos realizar búsquedas más eficientes. La clave es
otra herramienta conceptual (como campo, registro, archivo, etc.)
  Podemos tener claves que identifiquen de forma única a un
registro ⇒ Claves primarias o primary keys. Otras claves que
pueden definirse y que no tienen porqué ser únicas son las
claves secundarias.

18 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Elementos básicos de una estructura de archivos
Búsqueda secuencial (búsqueda iterativa de un registro
en un archivo)
  La eficiencia de una búsqueda secuencial es en promedio N/2,
siendo N el número de registros del archivo, y por tanto, el orden
de eficiencia es O(N) ⇒ Registros no organizados en bloques.
  Podemos mejorar el rendimiento de la búsqueda transfiriendo
bloques de registros en lugar de registros individuales (registros
organizados en bloques). Aunque aumentará el tiempo de
transferencia (que es proporcional a la cantidad de datos), el
tiempo de búsqueda se reducirá notablemente, y en conjunto, el
coste de la búsqueda será mucho menor. No obstante, el orden
de eficiencia continúa siendo O(N). En promedio, sin embargo, el
número de accesos se puede calcular como (N/2)*FB, donde FB
es el factor de bloqueo (número de registros por bloque).

19 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Elementos básicos de una estructura de archivos
  Búsqueda secuencial
  La búsqueda secuencial puede ser recomendable en las
siguientes situaciones:
•  Búsqueda de patrones en archivos ASCII.
•  Archivos con pocos registros.
•  Búsqueda en archivos almacenados en cintas.
•  Búsqueda por claves secundarias con un gran número de
resultados por clave.
  Acceso directo e índices
  El acceso directo es la alternativa más radical al acceso
secuencial. Diremos que tenemos acceso directo a un registro
cuando podemos posicionarnos directamente al comienzo del
mismo y leerlo.

20 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Elementos básicos de una estructura de archivos
Acceso directo e índices
  El orden de eficiencia será, por tanto, constante O(1),
independientemente del número de registros del archivo. En
ocasiones, la posición de cada registro se almacena en un
archivo secundario o índice, o bien, si prescindimos de estos,
podemos conocer su posición a partir del número de registro
relativo (RRN) con respecto al inicio del archivo (0, 1, 2, 3, . . . ).
Este RRN suele asignarse a cada registro y se almacena con él
según el orden de almacenamiento en el archivo.
  Para trabajar con el RRN de forma eficiente necesitamos que los
registros sean de longitud fija. En caso de que los registros sean
de longitud variable no podemos obtener la posición del registro
de forma directa.
  Posición del registro en el archivo = RRN * longitud del registro.

21 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Almacenamiento de datos. Archivos
Resumen ⇒ Modo de acceso → Se denomina modo de acceso
a la forma en que el dispositivo que maneja el soporte al que
accedemos se posiciona en un determinado lugar del mismo
para realizar una operación de lectura o escritura de un registro.
Es determinado por el programador de la aplicación en función
del soporte utilizado y del tipo de organización. Hay dos modos
de acceso básicos:
  Acceso secuencial a un registro supone acceder inicialmente al
primer registro del archivo y después, consecutivamente, a todos
los sucesivos hasta llegar al registro deseado.
  Acceso directo sólo se puede dar en los soportes direccionales,
como los discos magnéticos, y consiste en el posicionamiento
sobre cualquier registro sin necesidad de haber accedido antes a
los anteriores.
22 Capítulo 07: Introducción a las Estructuras de Datos en Disco
INDICE

  Almacenamiento de datos. Archivos.


  Elementos básicos de las estructuras de
archivos.
  Organizaciones básicas de registros en
archivos.
  Árboles multicamino en disco. B-tree.

23 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Organizaciones básicas de registros en archivos
Formas de organizar los registros en archivos
  Organización apilada.
  Organización secuencial.
  Organización encadenada.
  Organización directa.
  Organización indexada.
  Organización apilada. Archivos de registros no
ordenados.
  Este tipo de organización recibe su nombre de la forma en que
se incorporan nuevos registros al archivo, ya que se hace del
mismo modo que en las pilas. Es decir, los nuevos registros
siempre se incorporan al final, tras el último registro existente.

24 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Organizaciones básicas de registros en archivos
Organización apilada (archivos de registros no
ordenados)
  No existe, por tanto, ningún orden establecido, ni existen
referencias que indiquen la posición de un registro en el archivo.
  El acceso a la información sólo puede ser secuencial, de tal
manera que para acceder a un registro siempre será necesario
pasar por todos los anteriores desde el principio del archivo.
  Según la estructura de los registros que contienen estos archivos
se pueden clasificar en estructurados y no-estructurados:
•  No-estructurados pueden contener registros sin estructura definida,
con diferente nº de campos, y campos con diferente tipo de datos.
•  Estructurados (de longitud fija o variable), tienen una estructura
perfectamente definida; todos con el mismo nº de campos, siendo
estos del mismo tipo, y manteniendo el mismo orden en el registro.

25 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Organizaciones básicas de registros en archivos
Organización apilada (archivos de registros no
ordenados).
  Características:
•  Forma menos estructurada existente de organización de
archivos.
•  Su uso data de los comienzos de los sistemas automáticos
de procesamiento de información.
•  Se justifica su uso en la actualidad cuando se necesita una
adquisición muy rápida de la información, siendo en estos
casos desaconsejable su procesamiento en tiempo real.
•  También se aconseja cuando se desconoce el dominio de la
información adquirida.

26 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Organizaciones básicas de registros en archivos
Organización apilada (archivos de registros no
ordenados).
  Desventajas
•  Costes de tratamiento muy elevados.
•  Costes de almacenamiento muy altos.
•  Requieren reorganizaciones periódicas, sobre todo si la
volatilidad de la información es alta.
•  El control de la información es difícil de realizar, ya que
permiten distintas ocurrencias del mismo dato en diferentes
posiciones del archivo (información redundante).

27 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Organizaciones básicas de registros en archivos
Organización secuencial. Archivos de registros
ordenados.
  En las organizaciones secuenciales todos los registros están
ordenados en función de una clave. Una clave es un término
que puede estar compuesto por uno o varios campos y que
permite la identificación inequívoca de un registro, o que permite
la ordenación de estos en el archivo.
  Los registros pueden ser de longitud variable o fija. En archivos
con registros de longitud variable, el acceso es secuencial ya
que no es posible determinar directamente la posición de un
registro en el archivo. Cuando los registros son de longitud fija, el
acceso se puede realizar de forma directa si disponemos de una
clave única (clave primaria) y de un algoritmo que calcule la
posición relativa del registro en el archivo a partir de esta clave.

28 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Organizaciones básicas de registros en archivos
Organización secuencial. Archivos de registros
ordenados
  La inserción es una operación compleja debido al orden
establecido en el archivo, y más costosa que en la organización
apilada. En primer lugar debemos localizar la posición de
inserción del nuevo registro. Si no hay un hueco libre habrá que
desplazar todos los registros inferiores y finalmente se inserta el
registro. Está claro que esta operación es muy costosa porque
supone el desplazamiento de gran cantidad de datos, O(N).
  Si las inserciones son frecuentes, para evitar este problema se
puede emplear una zona de desbordamiento (en el propio
archivo o en un archivo auxiliar). En esta zona se insertarán
directamente los nuevos registros desordenadamente como si
una organización apilada. Eficiencia de la inserción será O(1).

29 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Organizaciones básicas de registros en archivos
Organización secuencial. Archivos de registros
ordenados
  Si el criterio de búsqueda no se realiza por la clave, el proceso
será secuencial y el costo computacional tan elevado como en
las organizaciones apiladas, O(N).
  Si la búsqueda es por clave, el costo es muy bajo, ya que
pueden utilizarse algoritmos rápidos, como la búsqueda binaria
que tiene un orden de eficiencia O(log2N). Si la búsqueda en la
zona ordenada del archivo no ha tenido éxito y existe una zona
de desbordamiento, habrá que buscar en ésta de forma
secuencial la clave deseada, incrementándose de manera
considerable el tiempo de acceso.
  El borrado consistirá simplemente el marcar el registro con un
carácter especial, O(1).

30 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Organizaciones básicas de registros en archivos
Organización secuencial. Archivos de registros
ordenados.
  El empleo de archivos con organización secuencial resuelve
algunos de los problemas que planteaban las organizaciones
apiladas y mejora el coste computacional de otras operaciones.
No obstante siguen siendo poco eficientes cuando existen zonas
de desbordamiento.
  Por ello suelen desaconsejarse cuando el tamaño del archivo es
grande o cuando la información es muy volátil por las continuas
reorganizaciones que requieren.

31 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Organizaciones básicas de registros en archivos
Organización encadenada. Archivos con registros
enlazados
  Cuando es necesario manejar medios y grandes volúmenes de
datos es recomendable almacenar ésta en varios archivos
relacionados entre sí, con el fin de reducir la redundancia y
controlar la consistencia de los datos almacenados.
  Las clases de objetos del mundo real o entidades se pueden
representar por uno o varios archivos, y una relación entre dos o
varias clases de objetos por un nuevo archivo. Por tanto, que
nuestro sistema pueda operar con múltiples archivos a la vez.
  Si los registros de un archivo están relacionados a su vez con
otros objetos de otros archivos, será necesario poder almacenar
información de esta relación en el propio archivo ⇒ Definir
atributos especiales denominados punteros.

32 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Organizaciones básicas de registros en archivos
Organización encadenada. Archivos con registros
enlazados
  Puntero ⇒ Un atributo de un registro cuya función es la de
señalar a otro registro del mismo o distinto archivo con el
cual se encuentra relacionado (no confundir con los
punteros del lenguaje de programación C/C++).
  Un puntero permitirá mantener una relación física o lógica
entre registros de archivos (no entre direcciones de
memoria). Por lo tanto, un puntero podrá contener:
•  Dirección de máquina de un registro (cilindro, pista, sector).
•  Dirección relativa de un registro con respecto al BOF (begin of file).
•  La identificación de un registro (o valor simbólico) a partir de la cual
puede obtenerse alguna de las dos direcciones anteriores.

33 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Organizaciones básicas de registros en archivos
Organización encadenada. Archivos con registros
enlazados
  Los archivos que están basados en una organización
encadenada si alguno de sus atributos es un puntero a
otro registro del mismo archivo o de otro diferente. Desde
un punto de vista lógico, los registros pueden verse como
eslabones de una cadena. Los punteros podrán
representar:
•  Relaciones entre registros.
•  Relaciones entre archivos.
•  Relaciones entre tipos de entidades.
•  Un orden o secuencia entre los registros de un archivo, permitiendo
tener un archivo ordenado por varias claves a la vez.

34 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Organizaciones básicas de registros en archivos
Organización encadenada. Archivos con registros
enlazados
  Los archivos que intervienen en las cadenas de registros
pueden estar compuestos de registros de longitud fija o
variable, siendo alguno de sus atributos un puntero.
  Cadena ⇒ Una colección de registros referenciados, cada
uno ocupando una posición relativa con respecto al
primero (cabecera) en base a un predicado de ordenación
(compuesto por uno o varios atributos).
  Cadena ⇒ Lista encadenada de registros.
  Normalmente, las organizaciones encadenadas se basan
en la existencia de archivos secuenciales (ordenados por
una sola clave).
35 Capítulo 07: Introducción a las Estructuras de Datos en Disco
Organizaciones básicas de registros en archivos
Organización encadenada. Archivos con registros
enlazados
  Este tipo de organizaciones encadenadas se aconseja
para el uso de registros estructurados (con estructura fija
definida) y de longitud fija.

36 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Organizaciones básicas de registros en archivos
Organización directa. Archivos relativos (hashing).
  Organización directa ⇒ Existe otro tipo de organización
primaria basada en el direccionamiento calculado o
hashing, que proporciona un acceso muy rápido a los
registros con cierta condición de búsqueda.
  La condición de búsqueda suele estar basada en un solo
campo o atributo llamado campo de direccionamiento
calculado, y si este campo es la clave del archivo se
denomina clave de direccionamiento calculado.
  También se necesitará una función h llamada función de
direccionamiento calculado o función hash ⇒ Devuelve
para cada registro la posición del mismo en función de la
clave (también puede devolver la dirección de bloque).
37 Capítulo 07: Introducción a las Estructuras de Datos en Disco
Organizaciones básicas de registros en archivos
Organización directa. Archivos relativos (hashing)
Hashing estático cerrado ⇒ El hashing estático se
denomina así porque requiere conocer a priori el número
de registros que se van a almacenar. Si la función hash
direcciona registros, se llamará hashing cerrado, y si
devuelve la dirección de bloques de registros, le
llamaremos hashing abierto.
  El hashing cerrado se implementa como una tabla o array
de registros. Suponiendo que tenemos M registros, la
función hash h deberá transformar el campo o clave k en
un valor ente [0..M-1]. Como ya sabemos, las funciones
hash suelen tener la forma: h(k) = k mod M.

38 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Organizaciones básicas de registros en archivos
Organización directa. Archivos relativos (hashing)
  Problema ⇒ Las funciones hash no garantizan que para
cada dos claves distintas existan siempre dos valores de
direccionamiento diferentes.
  En los casos en que la función hash devuelve una misma
dirección para distintos valores de la clave k diremos que
se ha producido una colisión y para resolverlas tenemos
varios métodos de resolución de colisiones:
•  Direccionamiento abierto ⇒ Se examina el archivo hasta
encontrar la primera posición libre.
•  Encadenamiento ⇒ Consiste en mantener unas áreas de
desbordamiento extendiendo el array mediante el uso de punteros.
La colisión se resuelve colocando el registro en este área y
encadenándolo al registro anterior con un puntero.

39 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Organizaciones básicas de registros en archivos
Organización directa. Archivos relativos (hashing)
  Métodos de resolución de colisiones:
•  Direccionamiento abierto
•  Encadenamiento
•  Hashing múltiple ⇒ Consiste en aplicar una segunda función hash.
Si se siguen produciendo colisiones puede aplicarse una tercera
función y también aplicar directamente direccionamiento abierto.
  El objetivo de la función hash es distribuir los registros
uniformemente en el espacio de direcciones de manera que
minimice el número de colisiones y se ocupen el mayor número
de posiciones del array. Estudios demuestran que es
recomendable tener tablas que no superen el de 70% al 90% de
espacio ocupado para evitar las colisiones y para que no se
desperdicie demasiado espacio.

40 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Organizaciones básicas de registros en archivos
Organización directa. Archivos relativos (hashing)
Hashing abierto ⇒ Para adecuar el hashing a las
características del almacenamiento en disco lo que se
hace es dividir el espacio de direcciones de destino en
cubetas, siendo éstas bloques de disco o bien un grupo
de bloques contiguos. La función hash establecerá una
correspondencia entre la clave del registro y un número de
cubeta relativo, en lugar de asignar una dirección absoluta.
  Con este método, el problema de las colisiones no es muy
grave porque se asignan a una cubeta tantos registros
como caben en ella. Sin embargo, si una cubeta se llena
debemos tener un mecanismo que permita la inserción en
otro lugar manteniendo enlazada la lista de registros.

41 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Organizaciones básicas de registros en archivos
Organización directa. Archivos relativos (hashing)
  El hashing que asigna un número fijo de cubetas se
denomina hashing estático abierto. Este tiene varios
problemas ya que puede ocurrir que se desperdicie mucho
espacio o por el contrario, que nos falte. Para solucionar
estas cuestiones se ha diseñado el hashing dinámico.
  Resumen (organización directa) ⇒ Los datos se colocan y
se acceden de forma aleatoria mediante su posición, es
decir, indicando el lugar relativo que ocupan dentro del
conjunto de posiciones posibles.

42 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Organizaciones básicas de registros en archivos
Organización directa. Archivos relativos (hashing)
  Resumen (organización directa) ⇒ En esta organización
se pueden leer y escribir registros, en cualquier orden y en
cualquier lugar. Presenta el inconveniente de que es tarea
del programador establecer la relación entre la posición
que ocupa un registro y su contenido. Además puede
desaprovecharse parte del espacio destinado al archivo,
ya que pueden quedar huecos libres entre unos registros y
otros. Su principal ventaja es la rapidez de acceso a un
registro cualquiera, puesto que no es preciso pasar por los
registros anteriores.

43 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Organizaciones básicas de registros en archivos
Organización indexada. Archivos con índices
  Organización indexada ⇒ Es otro tipo de organización
basada en índices, que proporciona un acceso rápido y
ágil a los registros con cierta condición de búsqueda.
  Índice ⇒ Estructuras auxiliares diseñadas para acelerar
operaciones que no son eficientes sobre organizaciones
básicas de archivos.
  Índice ⇒ Herramienta conceptual que permite imponer un
orden en un archivo sin necesidad de reorganizarlo, con la
ventaja de que puede haber varios índices definidos sobre
un archivo, basándose en distintas claves, lo cual nos
permite tener múltiples caminos de acceso al archivo.

44 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Organizaciones básicas de registros en archivos
Organización indexada. Archivos con índices
  Índice ⇒ Colección de entradas de datos que
proporcionan un camino eficiente para localizar todas las
entradas de datos con un valor de la clave de búsqueda k.
Cada entrada de datos k* contiene toda la información
necesaria para recuperar todos los registros con el valor
de la clave de búsqueda k (por ejemplo, un puntero al
registro referenciado).
  Una entrada de datos k* nos permitirá recuperar uno o
más registros con el valor de la clave k. Existen varias
alternativas sobre qué se debe almacenar en las entradas
de datos de un índice y éstas se indican a continuación.

45 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Organizaciones básicas de registros en archivos
Organización indexada. Archivos con índices
  Una entrada de datos k* debe almacenar en las entradas
de datos de un índice:
•  Una entrada de datos k* es un registro de datos con valor de
la clave de búsqueda k.
•  Una entrada de datos k* es un par <k, Rid> donde Rid es el
identificador del registro cuyo valor de clave es k (puntero).
•  Una entrada de datos k* es un par <k, ListaDeRid> donde
ListaDeRid es una lista de identificadores de registros cuya
clave de búsqueda es k.
  En el primer caso, el índice no necesita almacenar
registros de datos de forma separada a los propios datos.

46 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Organizaciones básicas de registros en archivos
Organización indexada. Archivos con índices
  Los casos segundo y tercero, que contienen entradas que
apuntan a registros de datos, son independientes de la
organización usada para el archivo de datos.
  Tipos de índices basados en sus propiedades:
•  Índices agrupados y no agrupados (clustered/unclustered).
•  Índices densos y dispersos (dense/sparse).
•  Índices primarios y secundarios.
•  Índices sobre claves múltiples.
•  Índices multinivel ⇒ Consisten en tener una especie de
índice de un índice → B-tree.

47 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Organizaciones básicas de registros en archivos
Organización indexada. Archivos con índices
  Tipos de organizaciones indexadas:
•  Organización secuencial indexada ⇒ Consta de tres áreas →
Área de índices, área primaria y área de excedentes.
•  El tipo de sus registros contiene un campo clave.
•  Los registros de datos están situados en un archivo
direccionable por el orden de los valores indicados por el
campo clave.
•  Un índice para cada posición direccionable, la dirección de la
posición y el valor clave. En resumen, el índice contiene la
clave del último registro y la dirección de acceso al primer
registro del bloque.
•  Organización indexada simple.
•  Organización indexada basada en índices multinivel.

48 Capítulo 07: Introducción a las Estructuras de Datos en Disco


INDICE

  Almacenamiento de datos. Archivos.


  Elementos básicos de las estructuras de
archivos.
  Organizaciones básicas de registros en
archivos.
  Árboles multicamino en disco. B-tree.

49 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Introducción
  Los B-trees (árboles-B) son muy usados en Bases de
Datos.
  Necesidades de las aplicaciones de BD:
•  Gestión de índices en BD (muchos datos).
•  El acceso secuencial y directo deben ser rápidos.
•  Datos almacenados en memoria secundaria (disco) en
bloques.
•  Operaciones de búsqueda ⇒ Muchos accesos a disco.
  Existen muchas variantes del B-tree: B+-tree y B*-tree.
  Idea ⇒ Generalizar el concepto de Árbol Binario de
Búsqueda (ABB) a Árboles de Búsqueda m-arios en disco.

50 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Introducción
x
  B-tree (árbol-B)

ABB: grado(nodo) = 2
<x >x

Árbol de búsqueda m-ario


grado(nodo) = m a b c
Cada nodo tiene m – 1 >a
<a >b
claves y m enlaces >c
<b <c
(punteros) a nodos hijo

51 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Introducción
  B-tree de orden m
•  Multirrama de grado m ⇒ Altura de un árbol completo con n
valores de clave = logm n.
•  Perfectamente equilibrado en altura.
•  Crece hacia arriba (bottom-up).
•  Idea ⇒ Conseguir mayor grado de ramificación, para que el
árbol tenga menor altura.
•  Objetivo ⇒ Realizar inserciones, extracciones y búsquedas
con el menor número de accesos a disco.
  Los B-trees de orden 2 no presentan interés.
•  Se considerarán solamente los casos de m ≥ 3. Y en un B-tree de
orden m, cada nodo tiene m enlaces y m – 1 claves, que deben
llenarse como mínimo hasta la mitad de su capacidad, excepto raíz.

52 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Introducción
  Definición formal de B-tree de orden m:
•  Cada nodo (página), excepto la raíz y las hojas, tiene entre
⎡m/2⎤ y m hijos (enlaces o punteros).
•  Cada nodo, excepto la raíz, tiene entre ⎡m/2⎤ – 1 y m – 1
claves (donde m es el orden del árbol).
•  La raíz tiene al menos 2 hijos (a menos que sea hoja).
•  Todos los nodos hojas (con enlaces nulos) están al mismo
nivel.
  Por ejemplo, en un B-tree de orden 7 (m):
•  Cada nodo tiene entre ⎡7/2⎤ = 4 y 7 hijos.
•  Puede tener 3, 4, 5 ó 6 valores de clave.
•  El nodo raíz puede contener de 1 a 6 valores de clave.

53 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Introducción
Formato del nodo de un B-tree de orden m:
Nodo[Enlace0, Clave1, Enlace1, Clave2, ..., Enlacem-2, Clavem-1, Enlacem-1]
•  Clavei son valores de clave tales que Clavei-1 < Clavei (1≤i<m), y
•  Enlacei (0≤i<m) son enlaces (punteros) a subárboles hijos.
•  ∀i (1≤i≤m-2), Enlacei apunta a un nodo cuyas claves son mayores o
iguales que Clavei y menores que Clavei+1
•  Enlace0 apunta a un nodo cuyas claves son menores que Clave1
•  Enlacem-1 apunta a un nodo cuyas claves son mayores o iguales a
Clavem-1
•  En cada nodo se accede a todos sus elementos en bloque, y luego
se va procesando cada elemento según convenga.

54 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Introducción
  Ejemplo de un B-tree de orden m = 5
l

d g o s w

a b c e f h i j k m n p q r t u v x y z

55 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Acotación de la altura
B-tree de orden m, con n valores de clave y altura h ≥ 1

Nivel Nº mínimo de enlaces


1 2
2 2* ⎡m/2⎤
3 2* ⎡m/2⎤2
4 2* ⎡m/2⎤3
... ...
h-1 2* ⎡m/2⎤h-2

56 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Acotación de la altura
Se cumple que el número de enlaces nulos de un B-tree es n +
1 ⇒ Nº mínimo de enlaces en el nivel h ≤ nº de enlaces nulos del
B-tree: h −1
⎡ m⎤
2⎢ ⎥ ≤ n+1 aplicando logaritmos
⎢2⎥
⎡ m⎤
h −1
n+1 n+1
log ⎡ m ⎤ ⎢ ⎥ ≤ log ⎡ m ⎤ h − 1 ≤ log ⎡ m ⎤
⎢⎢ 2 ⎥⎥ ⎢ 2 ⎥ ⎢⎢ 2 ⎥⎥ 2 ⎢⎢ 2 ⎥⎥ 2

n+1
⇒ altura (h) verifica: h ≤ log ⎡ m ⎤ +1
⎢⎢ 2 ⎥⎥ 2

57 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Operación de Búsqueda sobre un B-tree
  El nodo sobre el que vamos a buscar debe estar en memoria
principal ⇒ Leerlo de disco.
  Sea x el elemento a buscar:
  1. Si n (número de elementos actuales del nodo) es suficientemente
grande, se puede utilizar la búsqueda binaria. En caso contrario, una
búsqueda secuencial será suficiente.
  2. Si la búsqueda es infructuosa se estará en una de las siguientes
situaciones:
•  2.1. Clavei-1< x < Clavei para 1 < i ≤ n. La búsqueda continúa en el nodo
apuntado por Enlacei-1, x ≥ Clavem-1 ⇒ Búsqueda por Enlacem-1
•  2.2. Claven < x. La búsqueda continúa en el nodo apuntado por Enlacen
•  2.3. x < Clave1. La búsqueda continúa en el nodo apuntado por Enlace0
  3. Si en algún caso el puntero Enlacei es nulo, es decir, si no hay nodo
hijo, entonces no hay ningún elemento x en todo el árbol y se acaba la
búsqueda.

58 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Operación de Inserción sobre un B-tree
  Inserción con Partición-1/2
Se busca la clave a insertar ⇒ Algoritmo de búsqueda.
Si la clave no está en el árbol ⇒ La búsqueda termina en
un nodo hoja.
Se inserta en el nodo hoja apropiado el par (Dato, Nulo).
Si el nodo contiene después de la inserción:
•  menos de m claves ⇒ Finaliza el proceso.
•  m valores de clave ⇒ El nodo se ha sobrecargado
(overflow) y es necesario dividirlo en dos, de ahí el nombre
de Partición-1/2.

59 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Inserción. Ejemplo de inserción sobre un B-tree (m = 5)

I47 c 47 I49 c 47 49

I30 c 30 47 49 I60 c 30 47 49 60

I10 c 10 30 47 49 60 nodo sobrecargado

60 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Inserción sobre un B-tree con Partición-1/2
El nodo sobrecargado (desbordado, overflow) ⇒ Nodo, se
divide en dos nodos: Nodo y Nuevo.
Se distribuyen las claves de forma equitativa entre ambos.
  El par (clave central, dirección del nuevo nodo):
  Se inserta en el nodo padre de Nodo.
  Puede dar lugar a una nueva Partición-1/2.
  Si es necesario dividir el nodo raíz:
  Se crea una nueva raíz conteniendo únicamente el valor de
clave central y dos direcciones (antigua raíz y nuevo nodo).
  El árbol aumenta un nivel (altura).

61 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
  Inserción sobre un B-tree con Partición-1/2
Padre Padre

Nodo Nodo Nuevo

nodo sobrecargado
Raíz
Raíz
Nodo Nuevo

raíz sobrecargada
62 Capítulo 07: Introducción a las Estructuras de Datos en Disco
Árboles multicamino en disco. B-tree
Inserción sobre un B-tree con Partición-1/2
Si Nodo contiene m valores de clave está sobrecargado
Nodo [m, Enlace0, Clave1, Enlace1, ..., Clavem, Enlacem]
Clavei < Clavei+1 1 ≤ i ≤ m
Se va a dividir en dos nodos: Nodo y Nuevo

Nodo [⎡m/2⎤-1, Enlace0, Clave1, Enlace1, ..., Clave⎡m/2⎤-1, Enlace⎡m/2⎤-1]


Nuevo [m-⎡m/2⎤,Enlace⎡m/2⎤, Clave⎡m/2⎤+1, Enlace⎡m/2⎤+1, ..., Clavem, Enlacem]

El par (Clave⎡m/2⎤, DirNuevo) se inserta en el padre de Nodo

Peor caso ⇒ Se propaga hasta la raíz

63 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Inserción. Ejemplo de inserción sobre un B-tree (m = 5)
división de la raíz c 10 30 47 49 60 nodo sobrecargado
I10
a 47

c 10 30 f 49 60 Partición-1/2

I35,55,50,15 a 47

c 10 15 30 35 f 49 50 55 60

64 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Inserción. Ejemplo de inserción sobre un B-tree (m = 5)

I58 a 47
nodo sobrecargado

c 10 15 30 35 f 49 50 55 58 60

a 47 55
Partición-1/2
c 10 15 30 35 f 49 50 g 58 60

65 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Inserción. Ejemplo de inserción sobre un B-tree (m = 5)

I37 nodo
sobrecargado a 47 55

c 10 15 30 35 37 f 49 50 g 58 60

a 30 47 55
Partición-1/2
c 10 15 d 35 37 f 49 50 g 58 60

66 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Inserción. Ejemplo de inserción sobre un B-tree (m = 5)
I68,40,65,36,66 nodo
a sobrecargado
30 47 55

c 10 15 d 35 36 37 40 f 49 50 g 58 60 65 66 68

a 30 47 55 65
Partición-1/2
c
10 15 d 35 36 37 40 f 49 50 g 58 60 h 66 68

67 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Inserción. Ejemplo de inserción sobre un B-tree (m = 5)
nodo
I43
sobrecargado a 30 47 55 65

c 10 15 d 35 36 37 40 43 f 49 50 g 58 60 h 66 68

división de la raíz a 30 37 47 55 65 nodo sobrecargado

c d e f g h
10 15 35 36 40 43 49 50 58 60 66 68

Partición-1/2
68 Capítulo 07: Introducción a las Estructuras de Datos en Disco
Árboles multicamino en disco. B-tree
Inserción. Ejemplo de inserción sobre un B-tree (m = 5)

t 47

Partición-1/2
a 30 37 b 55 65

c d e f g h
10 15 35 36 40 43 49 50 58 60 66 68

69 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Análisis de la inserción con Partición-1/2
La eficiencia del algoritmo de inserción se mide en función
del número de accesos a disco (memoria externa).
Comienza buscando el valor de clave a insertar:
  Conduce hasta un nodo hoja (si no está en el árbol).
  El número de accesos coincide con la altura del árbol.
  Cuando el valor de clave se inserta en el nodo hoja:
  No hay sobrecarga y se realiza un acceso (actualización).
  El nodo se ha sobrecargado y se realiza una Partición-1/2:
•  Modifica dos nodos (Nodo y Nuevo) y cada modificación se refleja en un
acceso.
•  Una clave y un enlace se deben insertar en el padre.
•  La secuencia de particiones finaliza cuando una clave se añade a un nodo
sin sobrecargarlo dando lugar a un acceso.

70 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Análisis de la inserción con Partición-1/2
Nmax accesos por inserción (Partición-1/2).
La búsqueda requiere h accesos (altura) a disco.
Cada vez que se aplica la Partición-1/2 se realizan 2
accesos (un por cada nodo implicado).
Añadir una clave a un nodo sin sobrecargarlo aporta 1 acceso
Si el nº de nodos que se subdividen es k (particiones)
  Nº total de accesos a disco/inserción es h+2*k+1
Suponiendo que existe suficiente memoria principal para mantener
los h nodos accedidos en la búsqueda
  Como máximo se puede partir un nodo por nivel, k ≤ h
  Nº máximo de accesos a disco/inserción es 3*h+1

71 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Análisis de la inserción con Partición-1/2
Nmax nodos y cota superior del nº Partición-1/2
Se comienza con un árbol vacío ⇒ se insertan n valores de
clave y se obtiene un B-tree de altura h:
  Se denota por p al número de nodos del B-tree final.
  Nº total de nodos partidos es como mucho p – h.
•  Las raíces NO se crean por partición de un nodo que ya existe.
  Se puede acotar el valor de p para un B-tree de orden m con
n valores de clave con la siguiente expresión:
n−1
p ≤ 1+
⎡ m⎤
⎢⎢ 2 ⎥⎥ − 1

72 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Análisis de la inserción con Partición-1/2
Número mínimo de valores de clave.
En un B-tree de orden m con p nodos creado mediante
inserciones con Partición-1/2 es:

⎛ ⎡ m⎤ ⎞
1 + ⎜ ⎢ ⎥ − 1⎟ ∗ ( p − 1)
⎝⎢2⎥ ⎠
La raíz tiene al menos un valor de clave.
Los restantes nodos tienen al menos ⎡m/2⎤ - 1.

73 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Análisis de la inserción con Partición-1/2
Nº promedio de accesos por inserción Partición-1/2.
Valor esperado de Particiones-1/2 por clave insertada:
Numero de particiones p− h
s≤ ≤ <
n ⎛ ⎡ m⎤ ⎞
1 + ( p − 1)∗ ⎜ ⎢ ⎥ − 1⎟
⎝⎢2⎥ ⎠
p−1 1
< ≤
⎛ ⎡ m⎤ ⎞ ⎡ m⎤
( p − 1)∗ ⎜⎝ ⎢ 2 ⎥ − 1⎟⎠ ⎢⎢ 2 ⎥⎥ − 1
⎢ ⎥
Para m = 200, el valor esperado de particiones-1/2 por valor de
clave insertado es menor que 1/99.
El valor esperado de accesos a disco es: h+2*s+1 < h+101/99.

74 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Otras variantes para la inserción
  Inserción con rotaciones ⇒ Mejora el algoritmo de inserción
con Partición-1/2.
  Objetivo ⇒ Reducir la frecuencia de partición de los nodos
usando una rotación local (hacia la Derecha y hacia la
Izquierda). Antes de aplicar la partición se tienen que verificar
varios casos para poder rotar.
Inserción con Partición-2/3 ⇒ Mejora el algoritmo de inserción con
Partición-1/2 en que deja sus valores de clave mejor distribuidos
entre los tres nodos y redunda beneficiosamente en posteriores
inserciones.
Se parten dos nodos en tres, cada uno contiene: ⎣(2*m-2)/3⎦
⎣(2*m-1)/3⎦ ⎣2*m/3⎦ valores de clave. Considerar varias condiciones

75 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Operación de Extracción sobre un B-tree (idea)
El elemento a borrar se encuentra en un nodo hoja ⇒ Se suprime.
La clave a borrar no se encuentra en un nodo hoja ⇒ Entonces
debe sustituirse por la clave que se encuentra más a la izquierda en
el subárbol derecho o por la clave que se encuentra más a la
derecha en el subárbol izquierdo (sucesores en simétrico).
Debe verificarse el valor n (nº claves) después de la extracción:
  1. Si n ≥ ⎡m/2⎤ – 1 ⇒ Se trasladan las claves hacia la izquierda y termina la operación de
borrado.
  2. En caso contrario, se exploran los nodos hermanos adyacentes. Si en alguno de ellos n >
⎡m/2⎤ – 1 ⇒ Uno de los elementos sube al nodo padre para que descienda de éste otra
clave al nodo que se quiere restaurar.
  3. Si en los nodos hermanos contiguos n = ⎡m/2⎤ – 1 ⇒ Se fusiona con uno de sus
hermanos adyacentes, incluyendo en el nuevo nodo el elemento del padre situado entre
ambas páginas. Esta fusión puede dejar al padre con un número de elementos por debajo
del mínimo ⇒ Comienza de nuevo todo el proceso, que puede propagarse hasta la raíz en el
peor de los casos.
  4. Si se utiliza el último elemento de la raíz ⇒ El número de niveles del árbol disminuye en
una unidad (altura).

76 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Operación de Extracción sobre un B-tree (idea)
Distinguir la extracción de un valor de clave situado en:
  Un nodo hoja.
  Un nodo no hoja ⇒ Se busca el sucesor (en simétrico), se
sustituye por él y se vuelve al 1º caso.
Un nodo está bajo mínimo (underflow) si tiene menos de ⎡m/
2⎤ - 1 valores de clave.
Si después de la extracción un nodo está bajo mínimo
  Si su hermano inmediato derecho tiene más de ⎡m/2⎤ - 1
valores de clave ⇒ Se realiza una rotación de derecha a
izquierda.
  Si no tiene hermano inmediato derecho o está al mínimo ⇒ Se
intenta una rotación de izquierda a derecha con el hermano
inmediato izquierdo.
  Si no es posible la rotación se aplica una recombinación.
77 Capítulo 07: Introducción a las Estructuras de Datos en Disco
Árboles multicamino en disco. B-tree
Ejemplo de extracción sin consecuencias (m = 5)
E80 t 47

a 30 37 b 55 65 70

c f
10 15 49 50
d g
35 36 58 60
e h
40 43 66 68 i
72 75 80 85

78 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Ejemplo de extracción sin consecuencias (m = 5)
E80 t 47

a 30 37 b 55 65 70

c f
10 15 49 50
d g
35 36 58 60
e h
40 43 66 68
i
72 75 85
superior al mínimo nº de valores de clave
79 Capítulo 07: Introducción a las Estructuras de Datos en Disco
Árboles multicamino en disco. B-tree
Ejemplo de extracción sin consecuencias (m = 5)
t 47
E66

a 30 37 b 55 65 70

c f
10 15 49 50
d g
35 36 58 60
e h
40 43 66 68
i
72 75 85

80 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Ejemplo de extracción sin consecuencias (m = 5)
E66 t 47

a 30 37 b 55 65 70

c f
10 15 49 50
d g
35 36 58 60
e h
40 43 nodo bajo 68
i
mínimo 72 75 85
¿Tiene más de ⎡m/2⎤ - 1 valores de clave?
81 Capítulo 07: Introducción a las Estructuras de Datos en Disco
Árboles multicamino en disco. B-tree
Ejemplo de extracción sin consecuencias (m = 5)
t 47

a 30 37 b 55 65 72

c f
10 15 49 50
d g
35 36 58 60
e h
40 43 68 70
i
75 85
Rotación de derecha a izquierda
82 Capítulo 07: Introducción a las Estructuras de Datos en Disco
Árboles multicamino en disco. B-tree
Extracción sobre un B-tree con Recombinación-1/2
Reg está bajo mínimo (nº claves < ⎡m/2⎤ - 1), no tiene
hermano inmediato Izq, y Der con un nº claves = ⎡m/2⎤ - 1.
Se sitúan en un solo nodo, Reg, los valores de clave y los
enlaces de Reg y Der y la clave del Padre que los separaba.
  Número de valores de clave de Reg después de la
recombinación-2/1 es:
(⎡m/2⎤ - 2) + ( ⎡m/2⎤ - 1) + 1 = 2*⎡m/2⎤ - 2 ≤ m - 1
nodo bajo Padre Padre
mínimo
Reg Der Reg

83 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Extracción sobre un B-tree con Recombinación-1/2
Reg está bajo mínimo (nº claves < ⎡m/2⎤ - 1), no tiene
hermano inmediato Der, y Izq con un nº claves = ⎡m/2⎤ - 1.
Se sitúan en un solo nodo, Reg, los valores de clave y los
enlaces de Izq y Reg y la clave del Padre que los separaba.
  Número de valores de clave de Izq después de la
recombinación-2/1 es:
(⎡m/2⎤ - 2) + ( ⎡m/2⎤ - 1) + 1 = 2*⎡m/2⎤ - 2 ≤ m - 1
Padre nodo bajo Padre
mínimo
Izq Reg Izq

84 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Ejemplo de extracción con Recombinación-1/2 (m=5)
E49 t 47

a 30 37 b 55 65 72

c f
10 15 49 50
d g
35 36 58 60
e h
40 43 68 70
i
75 85

85 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Ejemplo de extracción con Recombinación-1/2 (m=5)
E49 t 47

a 30 37 b 55 65 72

c f
10 15 50
d g
35 36 58 60
e h
40 43 68 70
nodo bajo i
mínimo 75 85
nº de claves=⎡m/2⎤ - 1
86 Capítulo 07: Introducción a las Estructuras de Datos en Disco
Árboles multicamino en disco. B-tree
Ejemplo de extracción con Recombinación-1/2 (m=5)
t 47

a 30 37 b 65 72

c f
10 15 50 55 58 60
d h
35 36 68 70
e i
40 43 75 85
Recombinación-2/1

87 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Extracción sobre un B-tree con Recombinación-3/2
Reg está bajo mínimo (nº claves < ⎡m/2⎤ -1), Izq y Der al
mínimo (nº claves = ⎡m/2⎤ -1).
Se sitúan en dos nodos Izq y Der los valores de clave y los
enlaces de Reg, Izq y Der y las dos claves del Padre situadas
entre los enlaces de Izq y Der.
  El número de valores de clave de Izq y Der después de la
recombinación-3/2 es:
⎡(3*⎡m/2⎤-3)/2⎤ y ⎣(3*⎡m/2⎤-3)/2⎦
  El valor de clave central de los tres nodos se sitúa en el padre.

88 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Extracción sobre un B-tree con Recombinación-3/2
Padre nodo bajo
mínimo
Izq Reg Der

Padre

Izq Der

89 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Ejemplo de extracción con Recombinación-3/2 (m=5)
E60 t 47

a 30 37 b 55 65 72

c f
10 15 49 50
d g
35 36 58 60
e h
40 43 68 70
i
75 85

90 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Ejemplo de extracción con Recombinación-3/2 (m=5)
E60 t 47

a 30 37 b 55 65 72

c f
10 15 49 50
d g
35 36 58
e h
40 43 68 70
nodo bajo i
75 85
mínimo
nº de claves=⎡m/2⎤ - 1
91 Capítulo 07: Introducción a las Estructuras de Datos en Disco
Árboles multicamino en disco. B-tree
Ejemplo de extracción con Recombinación-3/2 (m=5)
t 47

a 30 37 b 58 72

c f
10 15 49 50 55
d h
35 36 65 68 70
e i
40 43 75 85
Recombinación-3/2

92 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Ejemplo de extracción con Recombinación-3/2 (m=5)
E47 t 47

a 30 37 b 55 65 72

c f
10 15 49 50
d g
35 36 58 60
e h
40 43 68 70
i
75 85

93 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Ejemplo de extracción con Recombinación-3/2 (m=5)
E47 t 47

a 30 37 b 55 65 72

c f
10 15 49 50
d g
35 36 58 60
e h
40 43 68 70
Sucesor i
75 85

94 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Ejemplo de extracción con Recombinación-3/2 (m=5)
E47 t 49

a 30 37 b 55 65 72

c f
10 15 50
d g
35 36 58 60
e nodo h
40 43 bajo 68 70
i
mínimo 75 85
nº de claves=⎡m/2⎤ -1

95 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Ejemplo de extracción con Recombinación-3/2 (m=5)
t 49

a 30 37 b 65 72

c f
10 15 50 55 58 60
d h
35 36 68 70
e i
40 43 75 85
Recombinación-3/2

96 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
B+-tree y B*-tree
  Introducción al B+-tree (árbol-B+)
•  B-tree es una estructura eficiente para localizar un elemento
identificado por una clave ordenable entre un conjunto.
•  Una lista doblemente encadenada es buena cuando se
precisa iteración secuencial.
•  Objetivo ⇒ Proporcionar la facilidad de la iteración
secuencial unida a la eficiencia discriminante del B-tree.
  Primera aproximación al B+-tree:
•  Se construye una lista doblemente encadenada ⇒ Con nodos
capaces de contener múltiples elementos.
•  Sobre ella se construye un B-tree ⇒ Los nodos de la lista son sus
nuevos nodos hoja y los nodos hoja reales del B-tree están un nivel
por encima y referencian a nodos de la lista.

97 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
B+-tree y B*-tree
  Primera aproximación al B+-tree
•  Se construye una lista doblemente encadenada ⇒ Con nodos
capaces de contener múltiples elementos.
•  Sobre ella se construye un B-tree ⇒ Los nodos de la lista son sus
nuevos nodos hoja y los nodos hoja reales del B-tree están un nivel
por encima y referencian a nodos de la lista.

B-tree

98 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
B+-tree y B*-tree
  Definición de B+-tree
En los nodos del B-tree:
•  No es necesario almacenar todos los valores de clave.
•  Sólo los valores necesarios para que conduzcan hasta el
nodo hoja con el elemento buscado.
•  No tienen por qué ser elementos presentes en el contenedor.
En los nodos hoja:
•  Se almacenan todos los elementos completos, parejas
(clave, valor).
•  El valor puede no existir o ser una referencia para acceder al
auténtico valor almacenado en otro lugar.

99 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
B+-tree y B*-tree
  Definición de B+-tree (árbol-B+) de orden m
El número de elementos de los nodos hoja no tiene por qué ser
igual al orden del B-tree. Para simplificar:
•  Si el B-tree es de orden m.
•  En los nodos hoja se almacenarán como máximo m - 1 elementos
Cada nodo no hoja tiene como máximo m hijos.
Cada nodo no hoja, excepto la raíz, tiene como mínimo ⎡m/2⎤
hijos.
La raíz tiene al menos 2 hijos si no es hoja y un valor de clave
si es hoja.
Los nodos hoja tienen al menos ⎡m/2⎤ - 1 valores de clave.
Los nodos hoja tienen como máximo m - 1 valores de clave.

100 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
Ejemplo de un B+-tree de orden 5 (m = 5)

d g n q t

a b c d e f g h i j k l m n o p q r s t u v x

101 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
B+-tree y B*-tree
  Introducción al B*-tree
Es una variante muy interesante del B-tree.
Peculiaridad ⇒ Garantiza la utilización de al menos
las dos terceras partes (2/3) del espacio disponible de
cada nodo.
Objetivo ⇒ Mejorar la utilización del espacio en
disco y disminuir la longitud del camino de
búsqueda.

102 Capítulo 07: Introducción a las Estructuras de Datos en Disco


Árboles multicamino en disco. B-tree
B+-tree y B*-tree
  Definición de B*-tree de orden m
Cada nodo, excepto la raíz, tiene como máximo m
hijos.
Cada nodo, excepto la raíz, tiene como mínimo:
⎡(2*m-1)/3⎤ hijos
La raíz tiene como mínimo 2 hijos y como máximo:
2* ⎡(2*m-1)/3⎤ - 1 hijos
Todos los nodos hojas están situados al mismo nivel.
Se utilizan los 2/3 del espacio disponible en cada nodo y
la altura del árbol es menor.
103 Capítulo 07: Introducción a las Estructuras de Datos en Disco
Árboles multicamino en disco. B-tree
Ejemplo de un B*-tree de orden 7 (m = 7)
09 20 31 42 50 58 71 80

01 02 04 05 06 08 83 84 85 87

10 11 13 14 16 19 73 74 77 79

21 23 25 28 59 60 63 64 66 68

32 34 37 39 51 52 54 55 56 57

43 45 46 47 48 49

104 Capítulo 07: Introducción a las Estructuras de Datos en Disco


EDA I
Contraportada
2º GRADO EN INGENIERÍA INFORMÁTICA

Francisco Guil (fguil@ual.es)


Antonio Corral (acorral@ual.es)
Departamento de Informática

105 Capítulo 07: Introducción a las Estructuras de Datos en Disco

También podría gustarte