10.05.2013 Views

Organizacion de Archivos: secuencial desordenado/ordenado + ...

Organizacion de Archivos: secuencial desordenado/ordenado + ...

Organizacion de Archivos: secuencial desordenado/ordenado + ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Almacenamiento y Recuperación <strong>de</strong> la<br />

Información<br />

Estructuras basicas <strong>de</strong> archivos<br />

<strong>Archivos</strong> Secuenciales<br />

2do Semestre 2005<br />

Wenceslao Palma M. <br />

www.inf.utfsm.cl/~wpalma/ari


Una estructura <strong>de</strong> archivos es una técnica para agrupar físicamente los registros <strong>de</strong> un archivo en<br />

dispositivos <strong>de</strong> almacenamieno secundario.<br />

Para escoger una estructura <strong>de</strong> archivo se consi<strong>de</strong>ran aspectos tales como:<br />

Características <strong>de</strong> los dispositivos <strong>de</strong> almacenamiento.<br />

Sistema operativo.<br />

Software para la administración <strong>de</strong> los archivos.<br />

Necesida<strong>de</strong>s <strong>de</strong>l usuario para almacenar y accesar datos.


Criterios importantes:<br />

Acceso rápido para la recuperación <strong>de</strong> datos.<br />

Alto rendimiento para las transacciones <strong>de</strong> procesamiento.<br />

Uso eficiente <strong>de</strong>l espacio en disco.<br />

Protección ante pérdida <strong>de</strong> datos y fallas.<br />

Minimización <strong>de</strong> la necesidad <strong>de</strong> reorganización <strong>de</strong> los datos.


Lógicamente, un archivo es una colección <strong>de</strong> registros estructurados, generalmente, en torno a una<br />

clave. Esta organización <strong>de</strong> datos consi<strong>de</strong>ra la visión <strong>de</strong>l programador <strong>de</strong> aplicaciones sobre el archivo,<br />

la cual es in<strong>de</strong>pendiente <strong>de</strong>l dispositivo; interesa más su uso que sus atributos físicos. Dicho<br />

programador <strong>de</strong> aplicaciones es la persona que visualiza un archivo como una colección <strong>de</strong> registros<br />

lógicos, aplicándoles las siguientes operaciones:<br />

Recorrer el archivo<br />

Agregar registros al archivo<br />

Eliminar registros <strong>de</strong>l archivo<br />

Modificar valores <strong>de</strong>l archivo<br />

Or<strong>de</strong>nar el archivo


En la organización lógica <strong>de</strong> una archivo, se distinguen dos conceptos importantes:<br />

a) Registro: correspon<strong>de</strong> a la <strong>de</strong>finición <strong>de</strong> cada uno <strong>de</strong> los registros <strong>de</strong> datos que serán usados <strong>de</strong>ntro<br />

<strong>de</strong> una aplicación, y cuya extensión <strong>de</strong>termina el tipo <strong>de</strong> archivo que lo contiene, el cual pue<strong>de</strong> ser:<br />

Archivo <strong>de</strong> Largo Fijo: el archivo se compone <strong>de</strong> registros <strong>de</strong>l mismo tipo.<br />

Archivo <strong>de</strong> Largo Variable:<br />

El archivo se compone <strong>de</strong> registros <strong>de</strong>l mismo tipo, pero al menos uno <strong>de</strong> los campos<br />

tiene un número <strong>de</strong> ocurrencias variable.<br />

El archivo se compone <strong>de</strong> registros <strong>de</strong>l mismo tipo, pero el largo <strong>de</strong> al menos uno <strong>de</strong> sus<br />

campos es variable.<br />

El archivo se compone <strong>de</strong> registros <strong>de</strong>l mismo tipo, pero uno <strong>de</strong> los campos es opcional<br />

en cuanto a su tipo.<br />

El archivo se compone <strong>de</strong> más <strong>de</strong> un tipo <strong>de</strong> registro.


) Campo o Atributo: ítem <strong>de</strong> dato que <strong>de</strong>scribe una característica <strong>de</strong> la entidad representada por un<br />

registro lógico. Este campo pue<strong>de</strong> tener nombres como:<br />

Clave Candidata: atributo(s) que no soporta(n) valores repetidos, y que por lo mismo, pue<strong>de</strong>(n)<br />

i<strong>de</strong>ntificar en forma única a un registro <strong>de</strong>ntro <strong>de</strong>l archivo.<br />

I<strong>de</strong>ntificador o Clave Primaria:clave candidata escogida como clave <strong>de</strong> acceso principal al archivo,<br />

dado su constante uso en los accesos al mismo.<br />

Clave Alternativa: clave candidata que no es escogida como i<strong>de</strong>ntificador.<br />

Clave Secundaria: atributo que permite valores repetidos.<br />

Clave Inteligente: atributo cuyo contenido permite <strong>de</strong>rivar información adicional <strong>de</strong> la entidad a la<br />

cual pertenece.<br />

Los registros, compuestos <strong>de</strong> diversos atributos, se van a organizar entre sí, para formar lo que se<br />

entien<strong>de</strong> por un archivo. En general, las tres estructuras <strong>de</strong> archivos más comunes son la <strong>secuencial</strong>, la<br />

directa, y el esquema jerárquico (o <strong>de</strong> árbol).


<strong>Archivos</strong> <strong>secuencial</strong>es<br />

Los registros son almacenados en secuencia, uno tras otro. Caracteristicas:<br />

Simple <strong>de</strong> usar.<br />

Conviene cuando se utilizan todos o la mayoria <strong>de</strong> los registros.<br />

El espacio <strong>de</strong> almacenamiento es minimo, solo se almacenan datos.<br />

El or<strong>de</strong>n fisico y logico es el mismo.<br />

Existen dos tipos <strong>de</strong> archivos <strong>secuencial</strong>es: <strong>de</strong>sor<strong>de</strong>nado y or<strong>de</strong>nado.


<strong>Archivos</strong> <strong>secuencial</strong>es <strong>de</strong>sor<strong>de</strong>nados<br />

Los registros se almacenan uno tras otro según or<strong>de</strong>n <strong>de</strong> llegada.<br />

Búsqueda: se realiza en forma lineal.<br />

Inserción: al final <strong>de</strong>l archivo, lo que hace que la operación sea rápida.<br />

Eliminación: se pue<strong>de</strong> realizar <strong>de</strong> dos formas; física y lógica. Si la eliminación es física, será<br />

necesario un corrimiento <strong>de</strong> los datos, lo cual perjudica el rendimiento. Por el contrario si la<br />

operación es lógica se utilizan marcas <strong>de</strong> borrado. Sin embargo, en ambos casos, es necesaria una<br />

reorganización <strong>de</strong> los registros.


<strong>Archivos</strong> <strong>secuencial</strong>es or<strong>de</strong>nados<br />

Los registros se almacenan en forma or<strong>de</strong>nada <strong>de</strong> acuerdo al valor <strong>de</strong> un campo (en la mayoria <strong>de</strong> los<br />

casos clave) <strong>de</strong> or<strong>de</strong>namiento.<br />

Favorece la búsisqueda y generación <strong>de</strong> listados or<strong>de</strong>nados.<br />

Búsqueda: se realiza en forma lineal y binaria .<br />

Inserción: requiere un corrimiento <strong>de</strong> los registros para mantener el or<strong>de</strong>n. Para evitar esto,<br />

existen varias técnicas:<br />

Incluir a cada bloque <strong>de</strong> datos un puntero que direccione a una lista enlazada <strong>de</strong> bloques <strong>de</strong><br />

overflow, don<strong>de</strong> se almacenan los registros en dicha situación.<br />

Utilizar un archivo <strong>de</strong> overflow, el cual en cierta medida se transforma en un archivo <strong>de</strong><br />

transacciones, para almacenar registros. Posteriormente se actualiza el archivo <strong>de</strong> datos<br />

mediante un or<strong>de</strong>namiento y mezcla con el archivo <strong>de</strong> overflow.<br />

Eliminación: al igual que en el caso <strong>de</strong> los archivos <strong>secuencial</strong>es <strong>de</strong>sor<strong>de</strong>nados la eliminación pue<strong>de</strong><br />

ser física o lógica.


Or<strong>de</strong>namiento externo<br />

Los métodos <strong>de</strong> or<strong>de</strong>namiento externo se aplican sobre archivos que no pue<strong>de</strong>n ser almacenados<br />

completamente en memoria principal para su or<strong>de</strong>namiento.<br />

Se habla <strong>de</strong> or<strong>de</strong>namiento externo cuando se utiliza un proceso <strong>de</strong> dos fases: una <strong>de</strong> or<strong>de</strong>namiento y<br />

otra <strong>de</strong> mezcla. La fase <strong>de</strong> or<strong>de</strong>namiento toma datos <strong>de</strong>l archivo (particiones) los <strong>de</strong>ja en memoria<br />

principal, los or<strong>de</strong>na y los retorna al disco. Los registros quedan or<strong>de</strong>nados en forma relativa a la<br />

particion en don<strong>de</strong> se encuentran.<br />

En la fase <strong>de</strong> mezcla se mezclan las particiones generando particiones mas gran<strong>de</strong>s hasta llegar a una<br />

sola: el archivo or<strong>de</strong>nado.


Una variedad <strong>de</strong> operaciones se benefician <strong>de</strong> un conjunto <strong>de</strong> registros or<strong>de</strong>nados.<br />

Por ejemplo:<br />

Una consulta SQL podría requerir una salida or<strong>de</strong>nada <strong>de</strong> los registros que cumplen con alguna<br />

condición.<br />

Select Rut, Nombre, Dirección, Region<br />

From alumnos<br />

Or<strong>de</strong>r BY Region<br />

Al eliminar explícitamente duplicados<br />

Select DISTINCT ciudad<br />

From alumnos<br />

Debido a que no resulta razonable limitar el tamaño <strong>de</strong> un archivo. Cómo es posible or<strong>de</strong>nar los<br />

registros <strong>de</strong> un archivo cuyo tamaño es superior al espacio disponible en memoria principal?


Para tal efecto se consi<strong>de</strong>ra un proceso <strong>de</strong> or<strong>de</strong>namiento y mezcla, mediante el cual el archivo a<br />

or<strong>de</strong>nar se divi<strong>de</strong> y cada una <strong>de</strong> sus partes se or<strong>de</strong>na y mezcla con alguna otra hasta obtener el<br />

resultado esperado.<br />

Es posible realizar lo anterior en una modalidad conocida como dos vías (two­way) siempre que se<br />

cuente con 3 buffers en memoria principal.<br />

Disk<br />

INPUT 1<br />

INPUT 2<br />

Main memory buffers<br />

OUTPUT<br />

Disk


La estrategia <strong>de</strong> solución es la siguiente:<br />

Paso 0.<br />

Se lee cada página <strong>de</strong>l archivo.<br />

Para cada página se realiza un or<strong>de</strong>namiento <strong>de</strong> sus registros.<br />

Se escribe cada página (run) or<strong>de</strong>nada hacia disco.<br />

Paso 1.<br />

.<br />

.<br />

.<br />

.<br />

Paso n.<br />

Seleccionar 2 runs y llevarlas a memoria.<br />

Mezclar sus registros con respecto al criterio <strong>de</strong> or<strong>de</strong>namiento.<br />

Escribir el resultado (run <strong>de</strong> 2 páginas) a disco.<br />

Seleccionar y leer 2 runs escritas en el paso n­1<br />

Mezclar sus registros con respecto al criterio <strong>de</strong> or<strong>de</strong>namiento.<br />

Escribir el resultado (run <strong>de</strong> 2 n páginas) a disco.


En cada paso se leen/escriben las<br />

N páginas <strong>de</strong>l archivo.<br />

El número <strong>de</strong> pasos es<br />

1 + log 2 N<br />

Cada paso involucra operaciones<br />

<strong>de</strong> I/O. La cantidad <strong>de</strong> operaciones<br />

<strong>de</strong> I/O es:<br />

2N(1 + log 2 N), el or<strong>de</strong>n <strong>de</strong><br />

magnitud es O(NlogN)<br />

Si disponemos <strong>de</strong> una mayor<br />

cantidad <strong>de</strong> buffers se podría<br />

reducir el número <strong>de</strong> pasos. Qué<br />

suce<strong>de</strong> si se tienen B buffers?<br />

3,4 6,2 9,4 8,7 5,6 3,1 2<br />

3,4 2,6 4,9 7,8 5,6 1,3 2<br />

2,3<br />

4,6<br />

2,3<br />

4,4<br />

6,7<br />

8,9<br />

4,7<br />

8,9<br />

1,2<br />

2,3<br />

3,4<br />

4,5<br />

6,6<br />

7,8<br />

9<br />

1,3<br />

5,6 2<br />

1,2<br />

3,5<br />

6<br />

Input file<br />

PASS 0<br />

1­page runs<br />

PASS 1<br />

2­page runs<br />

PASS 2<br />

4­page runs<br />

PASS 3


. . .<br />

Disk<br />

INPUT 1<br />

INPUT 2<br />

. . .<br />

INPUT B­1<br />

OUTPUT<br />

. . .<br />

Consi<strong>de</strong>rando B buffers:<br />

Paso 0.<br />

Se generan N/B runs <strong>de</strong> B páginas cada una, excepto la última que podría tener<br />

menos.<br />

Paso 1....<br />

salida.<br />

Disk<br />

Seleccionar B­1 runs <strong>de</strong>l paso anterior.<br />

Realizar una mezcla <strong>de</strong> B­1 vías usando la B­ésima página como buffer <strong>de</strong>


Al igual que en el caso <strong>de</strong> 2 vías se escriben y leen las N páginas <strong>de</strong>l archivo.<br />

En el paso 0 se escriben N/B runs.<br />

El número <strong>de</strong> pasos adicionales es log B­1 N/B. Luego, el total <strong>de</strong> operaciones <strong>de</strong> I/O es 2N<br />

(1+log B­1 N/B), el or<strong>de</strong>n <strong>de</strong> magnitud es O(NlogN) pero en base B­1<br />

N B=3 B=5 B=9 B=17 B=129 B=257<br />

100 7 4 3 2 1 1<br />

1,000 10 5 4 3 2 2<br />

10,000 13 7 5 4 2 2<br />

100,000 17 9 6 5 3 3<br />

1,000,000 20 10 7 5 3 3<br />

10,000,000 23 12 8 6 4 3<br />

100,000,000 26 14 9 7 4 4<br />

1,000,000,000 30 15 10 8 5 4


Sin embargo, la forma en que se utilizan los buffers pue<strong>de</strong> ayudar a reducir el costo <strong>de</strong> las<br />

operaciones involucradas.<br />

Consi<strong>de</strong>re un disco <strong>de</strong> 10000 páginas y espacio <strong>de</strong> almacenamiento en memoria principal <strong>de</strong><br />

64 páginas. El disco posee una latencia <strong>de</strong> 5ms, seek <strong>de</strong> 10ms y pue<strong>de</strong> transferir una página<br />

en 1ms.<br />

Determine el tiempo requerido para or<strong>de</strong>nar el archivo consi<strong>de</strong>rando:<br />

Caso 1: 63 buffers <strong>de</strong> entrada <strong>de</strong> una página cada uno y un buffer <strong>de</strong> salida <strong>de</strong> una página.<br />

Caso 2: 3 buffers <strong>de</strong> entrada <strong>de</strong> 16 páginas cada uno y un buffer <strong>de</strong> salida <strong>de</strong> 16 páginas.<br />

Caso 3: 13 buffers <strong>de</strong> entrada <strong>de</strong> 4 páginas cada uno y un buffer <strong>de</strong> salida <strong>de</strong> 12 páginas.


Sol.:<br />

In<strong>de</strong>pendiente <strong>de</strong> cada caso en el Paso 0 se leen 10000 páginas en grupos <strong>de</strong> 64 y<br />

luego se escribe cada grupo. Al final <strong>de</strong> este paso se generan 10000/64=157 runs <strong>de</strong> 63<br />

páginas cada una.<br />

Caso 1:<br />

Paso 1: se generan 157/63=3<br />

Paso 2: genera 1 run<br />

tiempo <strong>de</strong> cada paso: (10 + 5 + 1)*10000*2=320 seg<br />

tiempo total: 2*320= 640 seg


Caso 2:<br />

Paso 1: 175/3=53<br />

Paso 2: 53/3=18<br />

Paso 3: 18/3=6<br />

Paso 4: 6/3=2<br />

Paso 5: 2/3=1<br />

tiempo por cada paso: (10+5+(1*16))*2*(10000/16)=38.75 seg<br />

tiempo total: 5*38.75=193.75 seg<br />

Caso 3:<br />

Cantidad <strong>de</strong> pasos: log 13 175=2 :­)<br />

tiempo por cada paso: como el buffer <strong>de</strong> entrada es distinto es necesario calcular el<br />

tiempo <strong>de</strong> lectura y escritura por paso.<br />

t_lectura: (10+5+(1*4)*2*(10000/4)=47.5 seg<br />

t_escritura: (10+5+(1*12)*2*(10000/12)=22.52 seg<br />

tiempo total: 2(t_lectura+t_escritura)=140.04 seg


<strong>Archivos</strong> organizados como árboles<br />

Los registros se organizan en bloques los cuales se relacionan en forma jerárquica <strong>de</strong> acuerdo<br />

a un cierto or<strong>de</strong>n entre los valores que contiene cada registro.<br />

Arboles Binarios<br />

La gran ventaja es que permiten búsqueda binaria, pero los tiempos <strong>de</strong> recuperación se<br />

ven afectados por un eventual <strong>de</strong>sbalanceo.<br />

regclave<br />

clave<br />

+<br />

registro completo


Arboles Multiway<br />

P 0<br />

Correspon<strong>de</strong>n a una generalización <strong>de</strong> un árbol binario.<br />

En lugar <strong>de</strong> un registro y 2 punteros, un nodo contiene R registros y R+1 punteros.<br />

Los tiempos <strong>de</strong> recuperación mejoran, pero se requieren operaciones <strong>de</strong> balanceo al<br />

insertar y eliminar un registro.<br />

La estructura <strong>de</strong> un nodo:<br />

K 0<br />

P 1<br />

K 1<br />

K 2<br />

P 2 ................... P n­1<br />

Don<strong>de</strong>: P 0 ........P n son apuntadores a nodos <strong>de</strong> subárboles.<br />

K 0 .........K n­1 son los valores <strong>de</strong> las claves.<br />

Los valores <strong>de</strong> las claves en un nodo estan en or<strong>de</strong>n ascen<strong>de</strong>nte<br />

K i


Todos los valores <strong>de</strong> las claves que estan en los nodos <strong>de</strong>l subárbol apuntado por P i son menores<br />

al valor <strong>de</strong> la clave K i .<br />

Todos los valores <strong>de</strong> las claves que estan en los nodos <strong>de</strong>l subárbol apuntado por P n son<br />

mayores al valor <strong>de</strong> la clave K n­1 .<br />

Los subárboles apuntados por P i también son árboles <strong>de</strong> búsqueda <strong>de</strong> m­vías.<br />

Construya un árbol <strong>de</strong> 3 vías dada la siguiente secuencia<br />

50­100­20­40­15­30­70­120­140­130­136


Arboles B<br />

Correspon<strong>de</strong>n a árboles multiway con operaciones <strong>de</strong> balanceo, es <strong>de</strong>cir, son multiway<br />

balanceados.<br />

Se <strong>de</strong>fine un árbol B <strong>de</strong> or<strong>de</strong>n m a aquél árbol que cumple con las<br />

siguientes condiciones:<br />

● Ningún nodo tiene más <strong>de</strong> m hijos.<br />

● Un nodo interno con k hijos contiene k­1 registros.<br />

● Todos los nodos terminales se encuentran en el mismo nivel.<br />

Ejercicio: Suponga un archivo <strong>de</strong> 40000 registros organizado como árbol B. El tamaño <strong>de</strong><br />

cada registro es 70 bytes.<br />

Si el disco don<strong>de</strong> se almacena utiliza bloques físicos <strong>de</strong> 1KB y punteros a bloque <strong>de</strong> 6 bytes.<br />

Cuál es el or<strong>de</strong>n <strong>de</strong>l árbol?<br />

Cuantos accesos a disco se necesitan como máximo para recuperar un registro si en<br />

promedio los nodos estan llenos en un 70%?<br />

Cuanto tiempo en i/o se necesitan para la operación anterior? Consi<strong>de</strong>re un disco con<br />

los siguientes parámetros; seek:18ms , latencia: 8.3ms, transferencia: 1229 bytes/ms


<strong>Archivos</strong> Directos<br />

Veremos los relacionados a Direccionamiento Indirecto.<br />

El Direccionamiento Directo es un direccionamiento algorítmico. La i<strong>de</strong>a general es alcanzar un<br />

registro usando una función <strong>de</strong> transformación (hashing) sobre una clave (que i<strong>de</strong>ntifica <strong>de</strong> manera<br />

única a cada registro), lo cual llevará a la posición <strong>de</strong>l registro en el medio <strong>de</strong> almacenamiento.<br />

El espacio <strong>de</strong> almacenamiento es dividido en secciones llamadas buckets.<br />

Un bucket almacena uno o más registros en casilleros <strong>de</strong> tamaño fijo llamados slots.<br />

slot<br />

Bucket<br />

registro1<br />

registro2<br />

registro3<br />

registro4<br />

La cantidad <strong>de</strong> registros en un Bucket <strong>de</strong>fine el factor <strong>de</strong> bloqueo (fb).<br />

La función hashing transforma la clave en una dirección <strong>de</strong> bucket relativa.


Se almacena una tabla en el encabezado <strong>de</strong>l archivo para mantener una correpon<strong>de</strong>ncia con los<br />

bloques físicos.<br />

Este enfoque posee 2 <strong>de</strong>sventajas:<br />

(a) Colisiones: para registros con distinta clave es posible que la función <strong>de</strong> transformación<br />

entregue un mismo valor. Es necesario resolver las colisiones ya que pue<strong>de</strong>n generar overflow.<br />

(b) Zona <strong>de</strong> áreas muertas: la función distribuye <strong>de</strong> forma no equitativa los datos entre los<br />

distintos buckets.<br />

Alternativas para resolver colisiones<br />

(a) Overflow Abierto: en este caso la i<strong>de</strong>a es almacenar el registro que está en colisión en el<br />

siguiente slot disponible.<br />

Ventaja: Minimización <strong>de</strong> áreas muertas.<br />

Desventaja: Búsqueda lineal <strong>de</strong> registros en colisión.


(b) Enca<strong>de</strong>namiento: en este caso un bucket sirve como nexo hacia un bucket <strong>de</strong> overflow cuando<br />

sea necesario. Existen dos tipos <strong>de</strong> enca<strong>de</strong>namiento:<br />

● Unificado: bucket <strong>de</strong> overflow es compartido por varios buckets que tienen overflow.<br />

● Exclusivo: cada bucket tiene potencialmente un bucket <strong>de</strong> overflow exclusivo.<br />

registro1<br />

registro2<br />

registro3<br />

registro4<br />

registro5<br />

registro6<br />

Overflow Unificado<br />

Overflow<br />

registro1<br />

registro2<br />

registro3<br />

registro4<br />

registro5<br />

registro6<br />

Overflow Exclusivo<br />

Overflow<br />

Overflow


Todo lo anterior implica:<br />

● Un espacio <strong>de</strong> direcciones fijo.<br />

● Lo normal es que los archivos cambien.<br />

I<strong>de</strong>a: Proponer un mecanismo que permita la expansión dinámica <strong>de</strong>l archivo.<br />

Hashing Dinámico<br />

i<strong>de</strong>a: llegar a los datos por medio <strong>de</strong> estructura <strong>de</strong> acceso jerárquica. Características:<br />

● El número <strong>de</strong> buckets no es fijo.<br />

● Se pue<strong>de</strong> partir con un solo bucket.<br />

● Cuando un bucket se encuentra en overflow se divi<strong>de</strong> en dos buckets consi<strong>de</strong>rando como<br />

criterio <strong>de</strong> división el valor <strong>de</strong>l bit más significativo <strong>de</strong> lo entregado por la función <strong>de</strong><br />

transformación. En este caso se crea una estructura <strong>de</strong> árbol o directorio.


Existen 2 tipos <strong>de</strong> nodo:<br />

nodo interno: guían la búsqueda.<br />

nodo hoja: apuntan hacia un bucket.<br />

0<br />

1<br />

nodo interno<br />

Ejemplo: Suponer buckets con fb=4. Crear un archivo directo en base a:<br />

7 000111<br />

41 101001<br />

21 010101<br />

48 110000<br />

43 101011<br />

6 000110<br />

16 010000<br />

15 001111<br />

42 101010<br />

25 011001<br />

18 010010<br />

20 010100<br />

nodo<br />

hoja


7 000111<br />

41 101001<br />

21 010101<br />

48 110000<br />

43 101011<br />

6 000110<br />

16 010000<br />

15 001111<br />

42 101010<br />

25 011001<br />

18 010010<br />

20 010100<br />

7<br />

41<br />

21<br />

48<br />

Al ingresar 43 el bucket entra en overflow. A<strong>de</strong>más, es<br />

posible ingresar 6 y 16 sin problemas.<br />

0<br />

1<br />

7<br />

21<br />

6<br />

16<br />

41<br />

48<br />

43


7 000111<br />

41 101001<br />

21 010101<br />

48 110000<br />

43 101011<br />

6 000110<br />

16 010000<br />

15 001111<br />

42 101010<br />

25 011001<br />

18 010010<br />

20 010100<br />

Al ingresar 15 hay overflow!!<br />

0<br />

1<br />

0<br />

1<br />

A<strong>de</strong>más, es posible ingresar 42, 25 y 18 sin problemas.<br />

41<br />

48<br />

43<br />

42<br />

7<br />

6<br />

15<br />

21<br />

16<br />

25<br />

18


7 000111<br />

41 101001<br />

21 010101<br />

48 110000<br />

43 101011<br />

6 000110<br />

16 010000<br />

15 001111<br />

42 101010<br />

25 011001<br />

18 010010<br />

20 010100<br />

Al ingresar 20 hay overflow!!<br />

0<br />

1<br />

0<br />

1<br />

41<br />

48<br />

43<br />

42<br />

0<br />

1<br />

7<br />

6<br />

15<br />

21<br />

16<br />

18<br />

20<br />

25


Hashing Extendido<br />

I<strong>de</strong>a: Consi<strong>de</strong>rar una estructura <strong>de</strong> acceso tipo arreglo.<br />

Características:<br />

● La estructura <strong>de</strong> acceso es un arreglo <strong>de</strong> 2^d direcciones <strong>de</strong> buckets.<br />

● d es la profundidad global <strong>de</strong>l directorio.<br />

● Se suponen buckets <strong>de</strong> tamaño fijo.<br />

● En caso <strong>de</strong> overflow es necesario doblar el tamaño <strong>de</strong>l directorio.<br />

● La estructura <strong>de</strong> acceso se construye consi<strong>de</strong>rando el bit menos significativo.


Ejercicio: Consi<strong>de</strong>rando las siguientes transformaciones <strong>de</strong> claves, Construya un archivo utilizando<br />

hashing extendido.<br />

ed 111010001010<br />

tom 001101101000<br />

sam 111100010100<br />

ann 010011010001<br />

kim 100111010100<br />

kely 011011011110<br />

mindy 110111000101<br />

mark 110001011001<br />

chris 111001110011<br />

laura 001011010101<br />

sue 101110001100<br />

jill 111000110010<br />

amy 111000011101<br />

Inicialmente<br />

d=0. fb=4.<br />

ed .....1010<br />

tom .....1000<br />

sam .....0100<br />

ann .....0001


ed 111010001010<br />

tom 001101101000<br />

sam 111100010100<br />

ann 010011010001<br />

kim 100111010100<br />

kely 011011011110<br />

mindy 110111000101<br />

mark 110001011001<br />

chris 111001110011<br />

laura 001011010101<br />

sue 101110001100<br />

jill 111000110010<br />

amy 111000011101<br />

Al agregar kim existe overflow. El tamaño <strong>de</strong>l directorio se <strong>de</strong>be doblar. d=1<br />

0<br />

1<br />

ed .....1010<br />

tom .....1000<br />

sam . ....0100<br />

kim .....0100<br />

ann .....0001


ed 111010001010<br />

tom 001101101000<br />

sam 111100010100<br />

ann 010011010001<br />

kim 100111010100<br />

kely 011011011110<br />

mindy 110111000101<br />

mark 110001011001<br />

chris 111001110011<br />

laura 001011010101<br />

sue 101110001100<br />

jill 111000110010<br />

amy 111000011101<br />

Al agregar kely hay overflow. Ahora d=2<br />

A<strong>de</strong>más, es posible agregar mindy, mark y chris sin problemas!!!<br />

00<br />

01<br />

10<br />

11<br />

tom .....1000<br />

sam .....0100<br />

kim .....0100<br />

ed .....1010<br />

kely .....1110<br />

ann .....0001<br />

mindy .....0101<br />

mark .....1001<br />

chris .....0011


ed 111010001010<br />

tom 001101101000<br />

sam 111100010100<br />

ann 010011010001<br />

kim 100111010100<br />

kely 011011011110<br />

mindy 110111000101<br />

mark 110001011001<br />

chris 111001110011<br />

laura 001011010101<br />

sue 101110001100<br />

jill 111000110010<br />

amy 111000011101<br />

Al agregar laura hay overflow. Sin<br />

embargo, no es necesario doblar el<br />

directorio sino crear un nuevo buket<br />

A<strong>de</strong>más, es posible agregar sue y jill<br />

sin problemas!!<br />

00<br />

01<br />

10<br />

11<br />

tom .....1000<br />

sam .....0100<br />

kim .....0100<br />

sue .....1100<br />

ed .....1010<br />

kely .....1110<br />

jill .....0010<br />

ann .....0001<br />

mindy .....0101<br />

mark .....1001<br />

laura .....0101<br />

chris .....0011


ed 111010001010<br />

tom 001101101000<br />

sam 111100010100<br />

ann 010011010001<br />

kim 100111010100<br />

kely 011011011110<br />

mindy 110111000101<br />

mark 110001011001<br />

chris 111001110011<br />

laura 001011010101<br />

sue 101110001100<br />

jill 111000110010<br />

amy 111000011101<br />

000<br />

001<br />

010<br />

011<br />

100<br />

101<br />

110<br />

111<br />

tom .....1000<br />

sam .....0100<br />

kim .....0100<br />

sue .....1100<br />

ed .....1010<br />

kely .....1110<br />

jill .....0010<br />

ann .....0001<br />

mark .....1001<br />

mindy .....0101<br />

laura .....0101<br />

amy .....1101<br />

chris.....0011


Hashing Lineal<br />

● No consi<strong>de</strong>ra una estructura <strong>de</strong> acceso tipo índice.<br />

● Su uso se basa en la existencia <strong>de</strong> M buckets, numerados <strong>de</strong>s<strong>de</strong> 0 hasta M­1, los cuales<br />

van recibiendo registros <strong>de</strong> acuerdo a una función hashing h 0 .<br />

● En el momento en que alguno <strong>de</strong> los buckets se llena, se crea un bucket M en el cual se<br />

reparten los datos <strong>de</strong>l bucket 0, aplicando la función hashing h 1 . Este esquema se sigue<br />

repitiendo a medida que el archivo crece <strong>de</strong> tamaño.


Criterios para la selección <strong>de</strong> la estructura <strong>de</strong> un archivo<br />

En algunas aplicaciones es evi<strong>de</strong>nte cuál organización y método <strong>de</strong> acceso son los más<br />

a<strong>de</strong>cuados. Sin embargo conviene tener presente algunos criterios para hacer una selección más<br />

fundamentada.<br />

Actividad<br />

Número <strong>de</strong> registros <strong>de</strong>l archivo usados en un proceso. Cuando la actividad es alta se<br />

recomienda un archivo <strong>secuencial</strong>, en caso contrario acceso directo.<br />

Volatilidad<br />

Número <strong>de</strong> registros insertados o eliminados en un archivo. Si la tasa <strong>de</strong> volatilidad es alta<br />

se recomienda un archivo <strong>secuencial</strong> <strong>de</strong>sor<strong>de</strong>nado para que los nuevos registros vayan<br />

quedando almacenados al final.


Tipos <strong>de</strong> consultas<br />

Simple: <strong>de</strong>pto='informatica'<br />

Rango: sueldo>1000000<br />

Lógica: <strong>de</strong>pto='informatica' y sueldo>1000000<br />

Patrones: <strong>de</strong>pto='ing%'<br />

En consultas simples conviene un archivo <strong>secuencial</strong> or<strong>de</strong>nado sobre el atributo <strong>de</strong> la consulta,<br />

favorece búsqueda binaria, también pue<strong>de</strong> ser directo o <strong>de</strong> tipo árbol si la clave es única.<br />

Para rango es aconsejable <strong>secuencial</strong> or<strong>de</strong>nado sobre el atributo <strong>de</strong> consulta y esquemas<br />

directos que preserven el or<strong>de</strong>n.<br />

En consultas lógicas <strong>de</strong>pen<strong>de</strong>rá si los componentes son simples o rangos.<br />

Para búsqueda <strong>de</strong> patrones las posibilida<strong>de</strong>s son las mismas que para las consultas simples.


Volumen <strong>de</strong>l archivo<br />

Número <strong>de</strong> registros que componen el archivo. Si el número es alto entonces archivo directo, <strong>de</strong> lo<br />

contrario <strong>secuencial</strong>.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!