Organizaciones Directas

Download Report

Transcript Organizaciones Directas

Organizaciones Directas
Costos de Recuperación
Unidades de Organización
Funciones de Dispersión
Organizaciones Estáticas – Primitivas y
Organización de Colisiones y Desbordes
Organizaciones Dinámicas - Versiones de
Dispersión Extensible
FIUBA
ODD - Curso Servetto
1
Costos de Recuperación
• Archivo con R registros en bloques con capacidad para
B registros con densidad de carga C
– Organización Secuencial (p.e. C=0,85 para registros de longitud
variable)
• Registros desordenados: techo((R/(C*B))/2)
• Registros ordenados con búsqueda por aproximación lineal:
desde 3 (lectura de bloques extremos y el de aproximación)
• Registros ordenados con búsqueda binaria:
techo(log2(R/(C*B)))
– Organización B (en el peor de los casos C=0,5):
1+piso(logC*B+1(C*R+1))
– Organización B+ (en el peor de los casos C=0,5):
1+piso(logC*I+1(C*(R/(C*B))+1))+1 con I capac. nodos internos
– Directa: 1 (dispersión estática) o 2 (extensible)
FIUBA
ODD - Curso Servetto
2
Unidades de Organización
• Para archivos con registros de longitud fija pueden tener
capacidad para uno o muchos registros
– Un registro: ranura (slot)
– Muchos registros: bloque o cubo (bucket)
• Para archivos con registros de longitud variable deben
tener capacidad para muchos registros: cubos
• Las ranuras deben tener un campo de control que
indique si están vacías, ocupadas o con contenido
eliminado
• Los cubos deben tener un campo de control que indique
la cantidad de registros que contiene, si son para
registros de longitud fija, o el espacio libre que le queda,
si son para registros de longitud variable
FIUBA
ODD - Curso Servetto
3
Funciones de Dispersión
• Transforman al identificador de un registro a una dirección de
registro (sólo registros de longitud fija) o a una dirección de
cubo (registros de longitud fija o variable)
• Tienen como parámetro la cantidad total de registros o de
bloques del archivo
• Pueden transformar varios identificadores a una misma
dirección: sinónimos
• Para identificadores alfanuméricos deben transformar los
caracteres a un número, y luego calcular el resto de dividir al
número entre la cantidad total de unidades del archivo
• Para identificadores numéricos pueden aplicar una
transformación para aleatorizar resultados (plegado y suma
de dígitos, corrimiento y suma de dígitos, dígitos centrales del
cuadrado, …) y luego calcular el resto de la división entre la
cantidad total de unidades del archivo
FIUBA
ODD - Curso Servetto
4
Primitivas de Organizaciones Estáticas




Creación: se calcula la cantidad de unidades de organización
(ranuras o cubos) necesarias para un 20 o 30% más de la
máxima cantidad de registros que podría tener el archivo y
se inicializan; se puede cargar inicialmente el archivo con
una primitiva que no valide unicidad de registros.
Actualización de Registros: inserción con validación de
unicidad, modificación y supresión → campo de control para
no recorrer todo el archivo al validar unicidad (ranuras vacías
vs ranuras borradas e indicadores de desborde de cubos);
excepciones: inserción en ranura ocupada (colisión), o en
cubo completo (desborde).
De Recuperación de Registros: consulta o recuperación
unitaria de registros, y reporte o recuperación comprensiva
de todos los registros (desordenados) por recorrido
secuencial.
Mantenimiento: reestructuraciones por desorganización, y
respaldo con reorganización a archivos secuenciales.
FIUBA
ODD - Curso Servetto
5
Organización de Colisiones y Desbordes en
Organizaciones Estáticas
• En área de almacenamiento única
– Saturación lineal: búsqueda secuencial circular a partir de la
ranura o cubo siguiente; las ranuras pueden encadenarse, pero
las cadenas deben comenzar en dirección original
– Dispersión doble: segunda función determina longitud de saltos
para buscar ranuras o cubos donde almacenar registro
• En área exclusiva de colisiones o desbordes
– Unidades de saturación lineal al final del archivo (se agregan al
archivo según se necesite)
– Unidades de saturación lineal intercaladas en el archivo (se
inicializan al crear el archivo)
– Encadenamiento de unidades para sinónimos de una unidad
original, en otro archivo (unidades de menor capacidad)
FIUBA
ODD - Curso Servetto
6
Dispersión Extensible
• La función de dispersión se usa para acceder a una
tabla (archivo) de direcciones de cubos
• Cada vez que se desborda un cubo del archivo, se
agrega uno nuevo y se balancea la carga del
desbordado con el nuevo con la función de dispersión
• De tanto en tanto, cuando se agrega un cubo al archivo
la tabla de direcciones se duplica
• Los cubos requieren campos de control para indicar la
cantidad de registros (de longitud fija) o la cantidad de
bytes libres (registros de longitud variable), y para
indicar el tamaño de la tabla de direcciones al agregarse
o balancearse por última vez el cubo
FIUBA
ODD - Curso Servetto
7
Primitivas de Dispersión Etensible


Creación: se calcula la cantidad de cubos necesarias para
un 20 o 30% más de la máxima cantidad de registros con los
que se va a cargar inicialmente el archivo y se inicializa al
tabla de direcciones para esa cantidad de cubos; se carga
inicialmente el archivo con una primitiva que no valide
unicidad de registros.
Actualización de Registros: inserción con validación de
unicidad, modificación y supresión → se localiza el cubo
donde insertar o encontrar el registro, accediendo a la
tabla de direcciones con la función de dispersión.


De Recuperación de Registros: consulta o recuperación
unitaria de registros, y reporte o recuperación comprensiva
de todos los registros (desordenados) por recorrido
secuencial del archivo de cubos.
Mantenimiento: respaldo con reorganización a archivo
secuencial.
FIUBA
ODD - Curso Servetto
8
Versiones de Dispersión Extensible
•
De Bits Sufijos o Modular: la función de dispersión es
el resto de la división entre el tamaño de la tabla →
cada cubo aparece direccionado ta/tc veces en la
tabla cada tc registros, con ta tamaño actual de la
tabla y tc tamaño de la tabla al agregarse o
balancearse por última vez el cubo
•
De Bits Prefijos: la función de dispersión es el número
conformado por los log2(tamaño de la tabla) bits más
significativos del identificador → cada cubo aparece
direccionado ta/tc veces en la tabla en direcciones
consecutivas
FIUBA
ODD - Curso Servetto
9
De Bits Sufijos o Modular
De Bits Prefijos
Cubos con Capacidad para 6
Registros
td tamaño de dispersión del cubo
Cubos con Capacidad para 2
Registros
td tamaño de dispersión del cubo
Tabla:
2 0 4 3 2 0 1 5
Tabla:
0 0 0 0 1 2 3 3
Bloques Libres: -
Bloques Libres: -
Claves de registros en Cubos:
0: td 4, 63893 35641 51245
1: td 8, 34030 36150 40710
2: td 4, 59256 14588 55256 52980
3: td 8, 34163 31467 25067 35235
58043
4: td 8, 28378 23306 29002 16842
46698 51114
5: td 8, 35679 56255 55687 60567
Claves (en binario) de registros en
Cubos:
0: td 2, 0000 0010
1: td 8, 1000 1001
2: td 8, 1010
3: td 4, 1100 1110
FIUBA
ODD - Curso Servetto
10