You are on page 1of 13

03/04/2014

Prctica de

Ficheros
Prctica opcional

Ficheros y Bases de Datos

2014

Sintona - Universidad Carlos III Madrid

FFBBDD - 1

Organizacin de las Sesiones

Paso 1: Anlisis del diseo original del registro Paso 2: Diseo del sistema Paso 3: Funciones de Recuperacin Paso 4: Organizacin Direccionada

2014

Sintona - Universidad Carlos III Madrid

FFBBDD - 2

03/04/2014

Material necesario
Enunciado (especificaciones del problema) Ficheros originales de datos. Software: Drivers de los soportes, y Memoria Intermedia El interfaz de la aplicacin Documentacin: diapositivas, y plantilla de memoria

Interfaz

aplicacin

ficheros

2014

Sintona - Universidad Carlos III Madrid

FFBBDD - 3

Anlisis Preliminar
Estudiar el diseo lgico original proporcionado (enunciado). Realizar una ingeniera inversa del fichero original (con la ayuda de un editor de texto como el notepad de Windows) En este diseo habr que sealar las deficiencias semnticas y plantear soluciones para cada una. Optimizar el diseo lgico Optimizar el diseo fsico-lgico (en base al anterior)

2014

Sintona - Universidad Carlos III Madrid

FFBBDD - 4

03/04/2014

Preparacin para Implementacin


Los pasos para la implementacin: Descargarse el software y los ficheros de datos. Compilar y ejecutar el Sw sobre el entorno de ejecucin, para acostumbrarse a su funcionamiento. Analizar el Sw proporcionado haciendo especial hincapi en la clase GestordeFicheros.java, que es la que tendr que modificarse (de modo obligatorio) durante la realizacin de la prctica.

El siguiente diagrama muestra los mdulos de que consta:

2014

Sintona - Universidad Carlos III Madrid

FFBBDD - 5

Anlisis de las clases a utilizar


Memoria Intermedia abrir_fichero cerrar_fichero guardar_fichero leer escribir Driver Direccionado abrir cerrar reset leer escribir buffer limpiar copiar

esquema

Aplicaci n_Serial abrir_archivo cerrar_archivo guardar_archivo importar buscar siguiente ... insertar irPadre ... acceso_invertido salir

Driver Serial abrir cerrar reset leer escribir

Interfaz

Arquitectura de la aplicacin
2014

Sintona - Universidad Carlos III Madrid

FFBBDD - 6

03/04/2014

Aspecto del Interfaz

2014

Sintona - Universidad Carlos III Madrid

FFBBDD - 7

Paso 1: Leer del fichero original


La tarea consiste en leer un registro del fichero original y mostrarlo por pantalla (mtodo buscar). Utilizando los mtodos del Driver Serial: abrir el fichero; cnt_byte := 0; leer bloque; char leer_byte if (cnt_byte>1023) {leer_bloque; cnt_byte :=0}; return(bloque[cnt_byte]); cnt_byte++; leer_cadena(n) invoca n veces a leer_byte Registro_Logico leer_registro Registro_Logico.matricula leer_cadena(7); ... y as sucesivamente todos los campos El mtodo buscar invocar a leer registro (por ahora).
FFBBDD - 8

2014

Sintona - Universidad Carlos III Madrid

03/04/2014

Organizacin de las Sesiones

Paso 1: Anlisis del diseo original del registro Paso 2: Diseo del sistema Paso 3: Funciones de Recuperacin Paso 4: Organizacin Direccionada

2014

Sintona - Universidad Carlos III Madrid

FFBBDD - 9

Paso 2: scritura en !lo"ue


Realizar diseos lgico y fsico-lgico optimizados Implementar los mtodos de escribir, con driver direccionado

- abrir el fichero; cnt_block := 0; cnt_byte := 0; - obtener escribe(block, byte, b); y escribe_cad(block, byte, cad); - escribe_byte_serial (b) if (cnt_byte>1023) {cnt_block++; cnt_byte :=0}; escribe(cnt_block, cnt_byte, b); - escribe_cad_serial(c) invoca length(c) veces a escribe_byte - escribir_registro(RL) codifica/marca cada campo, y lo concatena en un str escribe_cadena(str)
Sintona - Universidad Carlos III Madrid

2014

FFBBDD - 10

03/04/2014

Paso #: $ise%o de cu!o


Para el nuevo fic ero, se necesita aplicar no consecutividad !e disear" un cubo con dos bytes de control #los dos $ltimos% &l cubo tendr" espacio un blo'ue #()** bytes% +os dos $ltimos bytes son un dato, la primera posicin libre #ppl% -uando el cubo est" vaco, ppl.) / medida 'ue se insertan registros, ppl,.ppl0lengt #reg% 1n registro a insertar cabe si #()**-ppl% 2 lengt #reg% +eer de un cubo se ar" igual 'ue de un blo'ue

2014

Sintona - Universidad Carlos III Madrid

FFBBDD - 11

Paso &: scri!ir en cu!o


El mtodo base devuelve un booleano (xito). boolean insertar(reg, cubo) lee ppl del cubo dado; if (1022-ppl) < length(reg) {return false} else {escribe_cadena(cubo,ppl,reg); ppl := ppl + length(reg); return true; end if; El mtodo base devuelve un booleano (xito).

2014

Sintona - Universidad Carlos III Madrid

FFBBDD - 12

03/04/2014

Paso ': Insertar Serial e Importar


A partir del contador cnt_block, inicializado a cero al crear. insertar_serial(reg) if not insertar(reg, cnt_block) {cnt_block++; if not insertar(reg, cnt_block) {es un registro expandido, generar error}; end if; end if; importar {lee registro viejo (reg); insertar_serial(reg)} until no hay ms registros;
2014

Sintona - Universidad Carlos III Madrid

FFBBDD - 13

Organizacin de las Sesiones

Paso 1: Anlisis del diseo original del registro Paso 2: Diseo del sistema Paso 3: Funciones de Recuperacin Paso 4: Organizacin Direccionada

2014

Sintona - Universidad Carlos III Madrid

FFBBDD - 14

03/04/2014

Paso (: Seleccin por nca)e


El mtodo encaje entre dos registros se define del siguiente modo: Dos registros encajan sii todos sus elementos de datos encajan dos a dos:
o o dos campos (y dos vectores) encajan si tienen el mismo contenido dos grupos repetitivos A y B encajan si todo elemento de A est en B

Los campos vacos (en blanco) no intervienen en el criterio de bsqueda, por eso, la condicin de encaje de los campos, que habr que reformular del siguiente modo: o dos campos (y dos vectores) encajan si tienen el mismo contenido, o bien si el primero de ellos (la condicin) es vaco, o bien si el primero es \null y el segundo es vaco.

2014

Sintona - Universidad Carlos III Madrid

FFBBDD - 15

Paso *: Sel+ con)unto resultado


Es un conjunto de direcciones relevantes en la bsqueda (cubos que pueden tener algn registro que encaje). La implementacin ms cmoda (para esta prctica) es un vector de booleanos: tantas posiciones como cubos; el valor (0) implica que el cubo no tiene registros que encajen, y por tanto se puede omitir su lectura El valor (1) implica que si los contiene (y hay que leerlo)

Se inicializa a valor (1), a priori todos los cubos son relevantes Antes de recorrerlo, se filtra por las condiciones de bsqueda

2014

Sintona - Universidad Carlos III Madrid

FFBBDD - 16

03/04/2014

Paso ,: -.s"ueda Selecti/a


Las bsquedas se realizarn sobre el fichero nuevo (optimizado). Estructura recomendada, en dos pasos: mtodo buscar prepara la bsqueda, y mtodo siguiente recorre el conjunto resultado. Mejora: si RL_condicion contiene clave identificativa, al hallar el primer encaje se cancela el cjto_resultado (se asigna todo a 0). MTODO BUSCAR: Almacena el criterio: RL_condicion Inicializa la bsqueda: cjto_resultado[i]:=1; cnt_block:=0; cnt_byte:=0;
2014

RL entrada

Filtra el conjunto resultado Invoca al mtodo siguiente


FFBBDD - 17

Sintona - Universidad Carlos III Madrid

Paso 0: -.s"ueda Selecti/a


MTODO SIGUIENTE: /*no hay ms regs.*/ if cnt_block>cjto_resultado.length {FIN} else if cjto_resultado[cnt_block] = 0 {cnt_block++; <invoca recursivamente a siguiente>} else if cubo[cnt_block].ppl<=cnt_byte {cnt_block++; cnt_byte:=0; <invoca rec. a siguiente>} else {<lee_registro>; cnt_byte:=cnt_byte+reg.length; if encaja(RL_condicion, registro) {return(registro); FIN} /*encuentra un registro*/ else {<invoca rec. a siguiente>} };

2014

Sintona - Universidad Carlos III Madrid

FFBBDD - 18

03/04/2014

-.s"ueda: e)emplos
Fichero con N=500 Bsqueda incondicional (todos los campos RL_condicin vacos) Conjunto resultado:

10 11 12 13 14

499

1 1todos 1 los 1 cubos 1 1 recuperando 1 1 1 todos 1 1 los 1 regs. 1 (todos 1 1 encajan) 1 Leer

Bsqueda por clave no privilegiada: mismo conjunto resultado Leer todos los cubos, recuperando slo los registros que encajen.

2014

Sintona - Universidad Carlos III Madrid

FFBBDD - 19

Opcional: enca)e anterior


Para el mtodo Anterior (opcional) contamos con tres algoritmos:
1. Contador de Encaje: 1aria!le 2numreg34 "ue contiene el n.mero de registro del "ue est siendo mostrado actualemente en pantalla: i+ ii+ iii+ 2+ Si numreg 56 14 entonces 27o ha8 ms registros34 actualizar numreg :6 numreg 9 1+ 8 si no

$esde i 6 1 hasta numreg !uscar registro siguiente "ue cumpla con la seccin: continuar+ Mostrar el .ltimo registro encontrado+

;ecorrido hacia atrs: propia de dispositi/os de arran"ue parada <secuenciales=4 "ue re"uiere una marca de fin de registro o !ien una marca de longitud del registro al finalizar cada uno de ellos+ Lista de hits: es decir4 lista <de tama%o fi)o n= de punteros a registros "ue enca)aron+ ste mecanismo es propio de soportes direccionados4 8 se puede com!inar mu8 !ien con el de >contador de enca)e?+
FFBBDD - 20

3.

2014

Sintona - Universidad Carlos III Madrid

10

03/04/2014

Organizacin de las Sesiones

Paso 1: Anlisis del diseo original del registro Paso 2: Diseo del sistema Paso 3: Funciones de Recuperacin Paso 4: Organizacin Direccionada

2014

Sintona - Universidad Carlos III Madrid

FFBBDD - 21

Dispersin y Gestin de desbordamientos


@ La organizacin direccionada presenta dos pro!lemas gra/es: @ Muchos elementos des!ordados <8 muchos cu!os /acAos= solucin: me)orar dispersin n esta prctica4 comparar la funcin >residuo? con otra Bomparar colisiones4 des!ordamientos4 8 cu!os /acAos @ Los elementos des!ordados no se almacena!an solucin: gestin des!ordamientos

colisin

desbordamiento

?
2014

Sintona - Universidad Carlos III Madrid

FFBBDD - 22

11

03/04/2014

Paso 1C: Insertar $ireccionado


<rea de des!ordamiento serial=
Se tiene puntero al rea serial cnt_desb, inicializado a N El mtodo devuelve la direccin (cubo) en el que se ha insertado int insertar_direccionado(reg) dir:=transformar(reg.CD); if insertar(reg, dir) {return dir} else {if insertar(reg,cnt_desb) {return cnt_desb}; else {cnt_desb ++; if insertar(reg, cnt_desb) return cnt_desb; else return(-1) /*-1 = rg. expandido */}; end if; end if; end insertar_direccionado;
Sintona - Universidad Carlos III Madrid
FFBBDD - 23

2014

Paso 1C: Diltro $ireccionamiento


El filtro direccionamiento consiste en hacer el AND lgico con otro conjunto resultado auxiliar. Todos los bits del cjto. auxiliar estn inicializados a 0. Se pondrn a 1 La transformada de la CD Todas las direcciones de desbordamiento (a menos que se tenga un byte_desbordamiento y que este valga 0).

2014

Sintona - Universidad Carlos III Madrid

FFBBDD - 24

12

03/04/2014

Paso 1C: DiltroEdirecmto: e)emplo



0 1

Fichero con N=500 y 10 cubos de desbordamiento Inicializacin cjto_resultado:


1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 11 12 13 14 1 1 1 1 1 499 1

0 0

Bsqueda direccionada: transformada(RL_condicion.CD) = 6 Conjunto resultado auxiliar:


1 0 2 0 3 0 4 0 5 0 6 1 7 0 8 0 9 0 10 0 499 500 0 1 509 1

0 0

y el AND lgico entre ambos ser:


1 0 2 0 3 0 4 0 5 0 6 1 7 0 8 0 9 0 10 0 499 500 0 1 509 1

Resultado: slo leer el cubo 6 y los de desbordamiento.


2014

Sintona - Universidad Carlos III Madrid

FFBBDD - 25

Paso 1C: DiltroEdirecmto: e)emplo 2


Mismo fichero con N=500 y 10 cubos de desbordamiento Bsqueda direccionada: transformada(RL_condicion.CD) = 6 Byte de desbordamiento (cubo 6) = 0 /* no desborda */ Conjunto resultado auxiliar:

1 0

2 0

3 0

4 0

5 0

6 1

7 0

8 0

9 0

10 0

499 500 0 0

509 0

y el AND lgico entre este y el recin inicializado ser:

Resultado: slo leer el cubo 6 (que estar en el buffer).


0 0 0 0 0 0 1 0 0 0 0 0 0

10

499 500

509 0

2014

Sintona - Universidad Carlos III Madrid

FFBBDD - 26

13