Está en la página 1de 9

UTN Crdoba

Ingenieria en Sistemas de Informacin


Ctedra: Diseo de Lenguajes de Consulta

Ficha de clase nmero: 09


Fecha:

Semana del 04/05 al 08/05 de 2009

Docente:

Ing. Valerio Frittelli

Tema Principal:
Temas Particulares:

1.)

Indexacin de Archivos: Arboles B.


Concepto de indexacin. Indices basados en Arboles B. Reglas de
formacin de un rbol B.

Indexacin de archivos: conceptos bsicos.

Al almacenar registros en un archivo, tarde o temprano se presenta la necesidad de


realizar una bsqueda de un registro particular en el archivo, y se pretende que esa bsqueda
sea rpida. Hemos visto que si el archivo est ordenado podemos hacer una bsqueda binaria
(y obtener un tiempo de bsqueda O(log(n), siendo n la cantidad de registros del archivo).
Mejor an: si organizamos el archivo como una tabla hash obtendremos tiempos de bsqueda
an mejores (en tiempo casi constante...) Entonces, no parece que haya nada que agregar al
tema...
Sin embargo, notemos que en las soluciones propuestas se debe reorganizar el
contenido del archivo para favorecer una bsqueda rpida. En el caso de la bsqueda binaria,
la reorganizacin consiste simplemente en ordenarlo. Y en el caso del hash, hay que
replantear por completo la estructura interna del archivo, al punto que un recorrido secuencial
del mismo pasa a carecer de sentido. El punto, entonces, no es menor: no siempre se querr
cambiar la estructura del archivo, o no siempre ser de ayuda hacerlo, o directamente podra
no ser posible hacerlo. Qu pasara si la estrategia para buscar rpido fuera mantener
ordenado el archivo por un atributo, pero luego se necesitara buscar por otros atributos? Qu
pasara si el archivo estuviera organizado como tabla hash y se requirieran recorridos
secuenciales (ordenados o no...)? En definitiva: qu hacer si el archivo se organiza de
acuerdo a ciertas necesidades de consulta, pero luego se requieren vistas distintas del
contenido del archivo?
Piense que esto es lo que tpicamente ocurre en una tabla de una base de datos: algunas
aplicaciones necesitan buscar por legajo, otras por apellido y nombre, otras por direccin
postal, etc. Sencillamente, no sera prctico que el archivo cambie su ordenamiento interno o
su estructura cada vez que se dispara una consulta de naturaleza diferente, y mucho menos se
puede aceptar que el archivo se "replique" varias veces (una por cada tipo de consulta
posible...)
La solucin clsica para estos problemas de "vistas mltiples" para el mismo contenido
del archivo, son los archivos ndice, o simplemente, ndices. En un sentido amplio, un ndice
es una estructura de datos (normalmente almacenada en memoria secundaria) que permite un
rpido acceso a los elementos contenidos en otra estructura (que tpicamente es otro archivo).
Puede establecerse una analoga entre el ndice de un libro y el libro mismo: si queremos
saber en qu pgina est un tema dado, se busca en el ndice (en lugar de hacer un recorrido
secuencial pgina a pgina en el libro) y el ndice nos dice en qu pgina buscar.
Tpicamente un ndice se organiza como un rbol de bsqueda balanceado, de forma
que garantice bsquedas de orden logartmico. La idea es que si m es un archivo en el que se
quiere hacer bsquedas mediante ndices (o simplemente, busquedas indexadas) y t es un

UTN Crdoba

Ingenieria en Sistemas de Informacin


Ctedra: Diseo de Lenguajes de Consulta

ndice para m, entonces t contendr un nodo por cada registro de m. Si cada registro contiene
un atributo k mediante el cual se quiere hacer la bsqueda, entonces cada nodo de t, contendr
el valor del atributo k y mediante ese valor se ordenar el rbol. Adems, cada nodo en t
tendr la direccin en m del registro con el valor respectivo del atributo k (el nmero relativo
del registro que contiene a ese valor en k):

2
5

ndice1:
ordenado
por legajo

archivo

2
0

3
0

legajo

30

25

20

Ana

Juan

Pedro

nombre

2000

1200

1500

sueldo

ndice2:

Juan

ordenado
por nombre
Ana

Pedro

Como se ve, se puede tener varios ndices a la vez sobre el mismo archivo, organizando
a cada ndice por un atributo de bsqueda diferente, sin tocar la estructura del archivo
original, y sin que esos ndices dependan el uno del otro...
Si bien en la grfica mostramos a cada ndice como un rbol binario, est claro que en
la prctica un ndice para un archivo debe cumplir ciertos requisitos esenciales, pues de otro
modo el proceso de indexacin fallara o no tendra un tiempo de bsqueda aceptable. Por lo
pronto, el rbol de bsqueda no debera ser binario: si el archivo a indexar tiene una gran
cantidad de registros (lo cual en la prctica es lo comn...) entonces el rbol tendra
demasiados niveles y por lo tanto su altura sera tambin grande. An cuando se supone que el
rbol implementa algn mecanismo de equilibrado, una gran altura va en contra de un tiempo
aceptable de bsqueda.
Y por otra parte, parece obvio que el rbol no debera organizarse en memoria
principal: si el archivo es muy grande el ndice podra no entrar en memoria, y an si entra
podra no quedar lugar para otros ndices que se requieran para ese achivo.
Hasta 1972 no se haba ideado una estructura de ndice que realmente fuera eficiente en
el acceso rpido a archivos. Las diversas tcnicas de equilibrado de rboles clsicas (como los

UTN Crdoba

Ingenieria en Sistemas de Informacin


Ctedra: Diseo de Lenguajes de Consulta

rboles AVL), eran claramente insuficientes para indexar grandes archivos. Pero entonces algo
cambi...
2.)

Arboles B.

En 1972, dos desarrolladores llamados R. Bayer y E. McCreight, trabajando para la


Boeing Corporation, publicaron un artculo (con el ttulo de "Organization and Maintenance
of Large Ordered Files") en el nmero 1 de la revista especializada Acta Informtica que
pasara a la historia como el artculo de presentacin de los Arboles B. Dos o tres dcadas ms
tarde, los rboles B eran ya el estndar indiscutido en cuanto a soporte de ndices para acceso
rpido a grandes archivos de registros. El contenido de la publicacin original de estos dos
autores, se anexa en un documento pdf adjunto a esta ficha.
Un rbol B es esencialmente un rbol de bsqueda multicamino (n-ario) balanceado,
almacenado en disco, y usado como soporte muy eficiente para ndices de grandes archivos.
Garantiza un tiempo de bsqueda de orden logartmico, al mismo tiempo que logra un muy
buen balance en cuanto al uso del espacio de almacenamiento del ndice. Hoy en da los
rboles B estn en el corazn de todos los sistemas de indexacin de bases de datos
comerciales, aunque en forma de variantes respecto del planteo original de Bayer y
McCreight.
Anecdticamente, digamos que sus creadores nunca dijeron porqu llamaron B al rbol
B... Se ha especulado con que esa B viene de balanceado. Otras especulaciones sugieren que
la B es una especie de propaganda subliminal a la firma Boeing para la que ambos trabajaban.
Y muchos directamente han asumido que la B es por Bayer, llegando incluso a designar como
rboles de Bayer a los rboles B... Pero si bien esto ltimo parece un justo tributo a R. Bayer,
la pregunta que nos hacemos es: qu hubo de McCreight en ese caso?
Como se dijo, un rbol B es un rbol de bsqueda de caminos mltiples. Esto implica
que cada nodo del rbol puede tener varios hijos, y a su vez implica que cada nodo puede
tener varias claves o valores (de hecho, la forma tpica de implementar el conjunto de claves
de un nodo es a travs de un arreglo ordenado). En el lxico propio de los rboles B, un nodo
se designa como pgina. La idea central es que un rbol B se graba en un archivo (el archivo
ndice) pgina por pgina. Cuando el ndice se abre, se carga en memoria la pgina raiz del
rbol, y slo la pgina raiz. La clave deseada se busca en esa pgina, y si est en ella se
detiene el proceso (que en este caso slo llev una operacin de acceso a disco). Si la clave
no est, se determina en cul de las hijas de la raiz debera estar, y se carga esa pgina. Otra
vez, se busca la clave, y as se prosigue, de forma que la raiz siempre est en memoria y cada
nueva pgina que se carga reemplace a la ltima cargada. Si la cantidad de claves que se
almacena en cada pgina es adecuada, veremos que se puede garantizar que un rbol B
encontrar la clave (o ver que no existe) en no ms de dos accesos directos (seeking) a disco
incluso si el archivo tiene un nmero tan desopilante como un milln de registros...
Las caractersticas estructurales de un rbol B se resumen en cuatro reglas, que
enunciamos:
i.)
ii.)

Sea n un parmetro que designaremos como el orden del rbol. Entonces cada pgina del rbol
(salvo eventualmente la pgina raiz) debe tener un mnimo de n claves en todo momento.
El nmero mximo de claves que una pgina puede tener es 2*n.

UTN Crdoba

Ingenieria en Sistemas de Informacin


Ctedra: Diseo de Lenguajes de Consulta

iii.)

Hay slo dos tipos de pginas: las hojas (que no tienen hijos) y las pginas que tienen
exactamente m + 1 pginas hijas, siendo m el nmero de claves que efectivamente hay en esa
pgina.

iv.)

Todas las pginas hoja deben aparecer juntas en el mismo nivel (que no puede ser otro que el
ltimo nivel... como es obvio...)

Estas cuatro reglas indican en forma taxativa lo que se puede y no se puede hacer al ir
formando un rbol B. Veremos a continuacin, que cada una de ellas cumple un papel
importante en cuanto al proceso de auto-balanceo del rbol: al igual que un rbol AVL, los
rboles B insertan una clave y luego verifican si esa insercin provoc algn tipo de
desbalance, procediendo a restaurar el equilibrio si fuera el caso.
Supongamos que se quiere mostrar la forma en que va creciendo un rbol B de orden 2
(n=2) a medida que se insertan claves. Supongamos que el rbol arranca vaco, y que se
quieren insertar las siguientes primeras cuatro claves: 10, 20, 40 y 30. Como el rbol est
vaco, no contiene ninguna pgina an. Debemos crear la pgina raiz entonces. La regla ii)
nos dice que debemos prever lugar mximo para 2*n claves = 4 claves. Lo comn es dibujar
cada pgina como si fuera un arreglo de tamao 2*n. Las claves que se insertan (al igual que
en un rbol de bsqueda comn) se insertan como parte de una hoja, y dentro de la hoja
husped se almacenan ordenadas de menor a mayor. La raiz quedara as luego de crearla e
insertar las primeras cuatro claves citadas (note que la regla i exige que una pgina siempre
tenga al menos n = 2 claves, pero la raiz est exenta de esa regla: de otro modo, nunca
podramos tener un rbol B vaco o con menos de n claves cuando recin se crea...)

10

20

30

40

Supongamos que ahora queremos insertar la clave x = 25. La nica pgina que tiene el
rbol ya no tiene lugar para una nueva clave, por lo tanto debemos crear al menos una pgina
nueva. Sin embargo, no podemos crear pginas de cualquier forma... Las reglas estructurales
del rbol sugieren que hay slo una forma de hacerlo: suponga que x = 25 realmente pudo
insertarse. En ese caso, la secuencia ordenada quedara as:
promover al nivel superior

10

20

25

30

40

Puede verse que ahora el nmero de claves es impar (2*n + 1 claves) y por lo tanto el
valor del medio de la secuencia es la mediana de la misma. Lo que se hace es tomar el valor
mediano, y promoverlo a la pgina que estuviera en el nivel superior de esta que fue
rebalsada. Si no hubiera ninguna pgina en el nivel superior (pues la pgina rabalsada es la
raiz) entonces se crea una nueva raiz que slo contendr al valor promovido (el 25 en nuestro
caso). Pero en la pgina original quedan exactamente 2*n claves, tales que la mitad son
menores que el promovido y la otra mitad son mayores... se arman dos pginas con esos
valores, que quedarn como hijas de la raiz:
25

4
10

20

menores que 25

30

40
mayores que 25

UTN Crdoba

Ingenieria en Sistemas de Informacin


Ctedra: Diseo de Lenguajes de Consulta

Como se ve, en el rbol resultante se cumplen todas las reglas: las dos pginas hoja
estn juntas en el ltimo nivel. Ninguna pgina (salvo la raiz) tiene menos de n = 2 claves. Y
la nica pgina que tiene hijos, tiene exactamente 2 hijos, los cual es igual al nmero m de
claves que tiene esa pgina (la raiz, con m = 1 clave efectivamente contenida) ms uno.
Note que el rbol ha crecido un nivel: de altura h = 1 mientras slo tena cuatro claves,
pas a tener altura h = 2 con la quinta clave. Veremos que en el nico caso en que el rbol
gana altura es cuando se parte la raiz (lo que ocurri en este caso...)
Supongamos que ahora se quieren insertar las claves 5, 15 y 23. Las claves entran por
la raiz, y bajan por el rbol buscando una hoja con lugar libre para insertarse. Las claves 5 y
15 no tendrn problemas, pero la clave 23 provocar un desborde de la pgina izquierda del
25:

25

10

15

20

30

23

menores que 25

40
mayores que 25

El 15 es el mediano en la hoja desbordada, y por lo tanto debe promoverse al nivel


superior. En este caso, en ese nivel hay una pgina (la raiz) que tiene lugar libre. Por lo tanto,
el 15 se alojar en esa pgina. Como ahora la raiz tendr m = 2 claves efectivas, no podr
seguir teniendo slo un hijo: deber tener m + 1 = 3 hijos. Pero esto no es problema: la
pagina desbordada se parti en dos, quedando la mitad de las claves menores que 15 y la otra
mitad mayores. Esas claves arman dos pginas que quedarn como hijos del 15. La pgina
con el 30 y el 40 no sufre cambios:

15

10
menores que 15

25

20

23

mayores que 15 y
menores que 25

30

40
menores que 15

UTN Crdoba

Ingenieria en Sistemas de Informacin


Ctedra: Diseo de Lenguajes de Consulta

Observe que se parti una pgina pero el rbol no gan altura: el impacto del quiebre
de la pgina fue absorbido "a lo ancho" en el rbol (lo cual no produce merma en el
rendimiento de una bsqueda: mientras no crezca la altura, el crecimiento horizontal no es
problema). Podemos decir entonces que los rboles B son muy estables en cuanto a su
crecimiento en altura: debe quebrarse la raiz para que la altura crezca, pero ese
acontecimiento depende que primero se quiebre una larga serie de pginas inferiores antes de
provocar el rebalsamiento en la raiz... De hecho, en este momento el rbol necesitara el
quiebre de tres pginas para que la raiz se quiebre a su vez... Para verlo, adelantmonos en el
proceso. Supongamos que ya se han insertado las claves 45, 50 y 60 (provocando un quiebre y
enviando el 45 a la raiz) y luego las claves 65, 70 y 80 (provocando otro quiebre y enviando el
65 a la raiz). El rbol quedara as:

15

10

20

25

45

23

30

65

40

50

60

70

80

Si ahora se insertan las claves 85, 90 y 95, el valor 95 provocar el desborde de la


ltima pgina de la derecha del rbol. En ese momento el 85 quedar como mediano y ser
promovido al nivel superior. Pero en ese nivel, la raiz no tiene lugar y se desborda a su vez,
provocando que el 45 sea promovido hacia arriba: antes de las particiones, el rbol quedara
as:

15

10

20

25

23

45

65

30

40

85

50

60

70

80

85

90

La solucin: se crea una nueva raiz con el 45. El rbol crece un nivel, y las pginas se
reparten as:

45

15

10

20

25

23

65

30

40

50

60

85

70

80

90

95

95

UTN Crdoba

Ingenieria en Sistemas de Informacin


Ctedra: Diseo de Lenguajes de Consulta

En nuestro modelo hemos supuesto que el orden n del rbol es 2, y eso sirve a los
efectos didcticos. Pero en la prctica, el orden del rbol se elige de forma tal que cada pgina
pueda tener un nmero alto de claves: De hecho, se suele hacer que el orden elegido garantice
que el tamao final en bytes de una pgina sea un mltiplo de 512, de forma que el tamao de
una pgina coincida o sea mltiplo del factor de paginacin usado por el sistema operativo
husped: de esta forma, se aprovecha al mximo la capacidad de lectura y grabacin del
sistema.
Note que si el orden del rbol es n = 500, entonces una pgina puede tener hasta 1000
claves. Si la raiz tiene 1000 claves, deber tener 1001 pginas hijas que pueden a su vez tener
hasta 1000 claves cada una... Eso implica que el rbol podr contener un milln de claves... en
slo dos niveles de rbol. En la prctica, la pgina raiz est siempre en memoria mientras el
ndice est abierto (slo se accede a disco para cargarla la primera vez, cuando el ndice se
abre). Por lo tanto, encontrar una clave requerir como mximo dos operaciones de acceso
directo a disco (que en la prctica es slo una... pues dijimos que la raiz slo se levanta de
disco una vez, al principio...)
Esa notable eficiencia se ve incrementada con otras caractersticas destacables: la regla
i estructural del rbol garantiza que al ir a disco a buscar una pgina, esa pgina tendr un
nmero razonable de claves (50% llena) que haga que valga la pena la prdida de tiempo de ir
al disco a buscarla. Y la regla ii nos protege de la posibilidad de levantar una pgina tan llena
de claves que no quepa en memoria. La regla iii garantiza que no iremos a disco nunca a
buscar una pgina vaca. Y la iv es la que finalmente fuerza a que el rbol se mantenga
siempre en equilibrio, y se expanda hacia lo ancho en lugar de hacerlo hacia arriba.
3.)

Variantes a los rboles B.

Desde 1972 a la fecha se han estudiado a fondo las propiedades de los rboles B, y
como no poda ser de otra forma, se plantearon muchas variantes estructurales. Una de ellas
fue planteada por Knuth en 1973, y se llam Arbol B* (B estrella o B star). Esencialmente se
trata de una variante que garantiza que cada pgina tendr al menos dos tercios de su
capacidad ocupada (y no slo la mitad)
Otra variante muy conocida es la designada como rbol B+ (B ms o B plus). La idea
es simple: un rbol B ofrece un posibilidad rpida de acceder a un registro del archivo, pero
no ofrece la propiedad de recorrer en forma secuencial ordenada ese mismo archivo. Los
rboles B+ constituyen una extensin natural al rbol B permitiendo esa caracterstica. En un
rbol B+, todas las claves se almacenan en la hojas del ltimo nivel. Las pginas intermedias
contienen valores duplicados de esas claves, slo para proporcionar rutas de recorrido de
bsqueda que lleguen hasta las hojas. Hasta aqu, el rbol sigue sirviendo para bsquedas
rpidas. Pero el detalle final es que las hojas del ltimo nivel se enlazan entre ellas formando
una lista, que puede recorrerse desde el principio (si entramos al archivo por la clave menor) o
desde cualquier otra parte (entrando al ndice por una clave cualquiera, llegamos hasta ella en
la hoja del ltimo nivel y recorremos desde alli en adelante en orden de lista):
un rbol B+
10

10

30

20

23

7
30

40

UTN Crdoba

Ingenieria en Sistemas de Informacin


Ctedra: Diseo de Lenguajes de Consulta

Bibliografa: Si bien los profesores de la ctedra preparan una serie de fichas de


consulta y gua para los temas de la asignatura, debe entenderse que para un
dominio completo de estos temas y para el desarrollo ptimo de las tareas y
ejercicios que se piden es fuertemente recomendable que los alumnos estudien e
investiguen a fondo en otras fuentes. Va para ello la siguiente bibliografa de
consulta y ampliacin de temas:

Deitel, H., Deitel, P. (2005 o posterior). "Java Cmo Programar" .


Mxico: Prentice Hall. ISBN: 970-26-0518-0 [disponible en biblioteca
del Departamento de Sistemas]

Drozdek, A. (2007). "Estructura de Datos y Algoritmos en Java".


Mxico D.F.: Thomson. ISBN: 9789706866110 [disponible en
biblioteca del Departamento de Sistemas]

Eckel, B. (2002 aunque existe edicin posterior). "Piensa en Java".


Madrid: Pearson Educacin. ISBN: 9788489660342. [disponible en
biblioteca del Departamento de Sistemas]

Horstmann, C., y Cornell G. (2000). Core Java 2 Volume I:


Fundamentals. (Disponible en espaol) Upper Saddle River:
Prentice Hall. ISBN: 84-205-4832-4 [disponible en biblioteca central]

Horstmann, C., y Cornell G. (2001). Core Java 2 Volume II:


Advanced Features. (Disponible en espaol) Palo Alto: Prentice Hall.
ISBN: 84-8322-310-4 [disponible en biblioteca central]

Langsam, Y., Augenstein, M., y Tenenbaum, A. (1997). Estructura


de Datos con C y C++ (2da. Edicin). Mxico: Prentice Hall. ISBN:
968-880-798-2 [disponible en biblioteca central]

Sedgewick, Robert (1995). Algoritmos en C++. Reading: Addison


Wesley Daz de Santos. ISBN: 978-0-201-62574-5 [disponible en
biblioteca central]

Weiss, M. A. (2000). Estructuras de Datos en Java Compatible con


Java 2. Madrid: Addison Wesley. ISBN: 84-7829-035-4 [disponible
en biblioteca central]

UTN Crdoba

Ingenieria en Sistemas de Informacin


Ctedra: Diseo de Lenguajes de Consulta

También podría gustarte