ARCHIVI E LORO ORGANIZZAZIONI Archivio: - insieme di registrazioni (record), ciascuna costituita da un insieme prefissato di informazioni elementari dette attributi (campi) - insieme di informazioni relative a oggetti dello stesso tipo, memorizzato su un supporto di memoria permanente - struttura di dati astratta, costituita da un insieme di record contenenti informazioni relative ad un insieme omogeneo di oggetti. Si può pensare ad un archivio come una tabella (le righe rappresentano i record, le colonne corrispondono ai campi). Un campo ha un nome e un valore. Ogni record è identificato per mezzo della sua posizione (=indirizzo logico). Chiave: un sottoinsieme dei campi di un record. Chiave primaria: chiave che individua al più un record (individua univocamente un record) Archivio!= File File: struttura fisica di memoria in cui è possibile memorizzare informazioni sotto forma di sequenza di byte o come sequenza di record. Un archivio è sempre implementato mediante uno o più file, ma un file non è sempre un archivio (p.e. un file di Word non è un archivio). Record logico: insieme di informazioni relative ad un entità (insieme di campi) Blocco fisico: insieme di byte (l insieme di byte che possono essere letti o scritti in memoria di massa con una singola operazione di lettura o scrittura record bloccati : dim recordo logico < dim blocco record sbloccati: dim recordo logico = dim blocco record multiblocco: dim recordo logico > dim blocco Organizzazione degli archivi: - fisica = relativa al supporto: nastro (supporto ad accesso sequenziale) o disco (supporto ad accesso diretto) - logica = relativa alla modalità di gestione: sequenziale (ogni record ha un predecessore e un successore, eccetto il primo e l ultimo), non sequenziale ( i record sono memorizzati in maniera sparsa) Metodo di accesso: operazione che consente di reperire i record - sequenziale (bisogna accedere prima a tutti i record precedenti) tempo di accesso in funzione della posizione - diretto o casuale (è possibile posizionarsi direttamente su record interessato) tempo di accesso indipendente dalla posizione nastro disco organizzazione fisica sequenziale non sequenziale organizzazione logica sequenziale sequenziale metodo di accesso sequenziale sequenziale o diretto Operazioni fisiche sugli archivi: lettura e scrittura di record sul file (la loro esecuzione implica accesso sia in memoria di massa che in memoria centrale) 1
Operazioni logiche sugli archivi: 1. creazione di un archivio vuoto 2. inserimento di un record con chiave k 3. reperimento (ricerca) di un record di chiave k 4. aggiornamento (di campi non chiave) di un record di chiave k 5. cancellazione di un record di chiave k (logica e fisica) 6. visita (scansione) a tutti i record dell archivio a. in ordine qualsiasi b. ordinata per valori crescenti di un campo 7. ricerca di tutti i record i cui campi soddisfano un predicato P 8. ordinamento 9. chiusura (completa il trasferimento dei dati alla memoria di massa) Ordinamento e ricerca L ordinamento agevola l operazione di ricerca ma complica quella di inserimento. sequenziale - non ordinato sequenziale - ordinato diretto - non ordinato diretto - ordinato n medio tentativi Successo n tentativi Insuccesso Ricerca binaria log 2 N Ricerca interpolata (con distribuzione uniforme chiavi) log 2 (log 2 N) N N Ricerca binaria log 2 N Ricerca interpolata (con distribuzione uniforme chiavi) log 2 (log 2 N) Ricerca interpolata (o metodo delle secanti): non inizia da metà, ma sfrutta l informazione costituita dalla chiave da ricercare. Archivi impaginati sequenze di pagine (una pagina coincide in genere con un settore del disco) Inserimenti Negli archivi non ordinati l inserimento può avvenire in fondo o al posto di un record cancellato. Negli archivi ordinati ad accesso sequenziale si raccolgono gli inserimenti in un file separato e si rigenera periodicamente il file principale per fusione (merge) con quello degli inserimenti. Negli archivi impaginati inizialmente si lascia in ogni pagina un certo spazio libero per le inserzioni. Quando la pagina è satura l inserimento viene effettuato su un area di trabocco (overflow) unica o distribuita (quando le prestazioni degradano si procede alla riorganizzazione) Cancellazioni Se l archivio non è impaginato conviene cancellare solo logicamente il record, la cancellazione fisica viene effettuata all atto della riorganizzazione. Organizzazione sequenziale con indice (ISAM): Esiste un file primario organizzato a pagine, ciascuna contenente un certo numero di record. La chiave più alta di ogni pagina (ku) è riportata in un file indice, i cui record sono del tipo (ku,p) con p numero di pagina del file primario che ha ku come chiave più alta. Il file indice viene mantenuto ordinato. La ricerca avviene prima nel file indice e poi nella pagina. Le operazioni di inserimento e cancellazione possono richiedere una riorganizzazione dei file. 2
Indici a più livelli: se il file indice è troppo grande si può organizzare lo stesso indice come file sequenziale con indice. Organizzazioni sequenziali con indice dinamico: (per esempio con indice a B-albero): non prevedono aree di overflow, non necessitano di riorganizzazioni periodiche. Organizzazione relative: l accesso ad un record avviene specificando la sua posizione relativamente all inizio del file, la chiave primaria identifica univocamente sia il record sia il suo indirizzo logico. L indirizzo del k-simo record si calcola con la formula: (k-1) x dimensione del record + indirizzo fisico primo record Organizzazione hash (o con trasformazione della chiave): conveniente quando le operazioni da eseguire sono prevalentemente inserimenti o cancellazioni o ricerche. La funzione hash (o di trasformazione della chiave) calcola l indirizzo dell elemento destinato a contenere il record a partire dalla chiave. Requisiti della funzione hash: 1. facilmente (velocemente) calcolabile 2. produce sempre lo stesso indirizzo a partire dalla stessa chiave 3. distribuisce uniformemente le chiavi sullo spazio degli indirizzi 4. distribuisce casualmente le chiavi (l indirizzo hash deve dipendere da tutti i bit della chiave) 5. copre l intero spazio degli indirizzi 6. genera indirizzi diversi se le chiavi sono diverse o genera il minor numero possibile di collisioni La trasformazione perfetta si ha quando la funzione genera un indirizzo hash diverso per ogni chiave. Se il numero di chiavi che possono essere contemporaneamente presenti in memoria è molto inferiore al numero delle possibili chiavi la trasformazione perfetta comporta uno spreco di memoria inaccettabile. Se si utilizza una trasformazione molti a uno possono prodursi collisioni. Due o più chiavi collidono quando hanno lo stesso indirizzo hash. Risoluzione delle collisioni: consente di individuare un indirizzo libero per la chiave k nel caso in cui si sia verificata una collisione. 3
1. indirizzamento aperto o scansione lineare se la collisione avviene sull indirizzo 15 e il passo di scansione è 3 si esaminano i record 18,21,24, fino al reperimento di un posto vuoto 2. scansione non lineare: si ricalcala un nuovo indirizzo servendosi di una nuova funzione (rehash) 3. concatenazione: si aggiunge un campo link ai record della tabella Fattori che influenzano la scelta dell organizzazione di un archivio 1. tipi di operazioni e loro frequenza: valutare se l archivio è soggetto a frequenti inserimenti e/o cancellazioni o a ricerche. 2. tempo di risposta: se le operazioni compiute sui file avvengono in modalità interattiva (online), occorre garantire tempi di risposta immediati; se, invece, le operazioni non sono interattive (offline), è accettabile un tempo di risposta più lungo 3. frequenza di riferimento: rendere più facilmente accessibili i record che vengono riferiti più spesso (regola 80-20) 4. struttura dei record: i record a lunghezza variabile, la condivisione dei dati o la presenza di campi molto lunghi possono richiedere l inserimento di puntatori 5. dimensione ed espansibilità dell archivio: organizzazione più sofisticata se l archivio è grande, cercare giusto compromesso tra spazio e tempo 6. tipo e dimensione del supporto di memoria di massa 7. integrità e ripristino (difficile ripristinare i puntatori ) 8. linguaggio di programmazione utilizzato: non tutti i linguaggi sopportano tutti tipi di organizzazione. Lo SCHEMA DELLE RISORSE DI SISTEMA (o DIAGRAMMA DI FLUSSO) serve ad illustrare attraverso simboli grafici gli elementi del sistema: gli archivi utilizzati da un programma, le informazioni che fluiscono all'interno dell'elaborazione dalle unità di input, quelle che vengono ottenute in output e il percorso delle informazioni in ingresso e in uscita I simboli grafici più usati sono: Tastiera (Input) File memorizzato su disco Video (Output) Nastro magnetico Stampante (Output) Elaborazione Percorso del flusso delle informazioni Flusso dei dati su linea telefonica 4
Archivi tradizionali e database E` molto importante decidere il modo in cui i dati vengono conservati perchè ciò determinerà successivamente anche il modo in cui i dati verranno estratti; ad esempio, potrebbe capitare che non preoccupandosi per tempo dell'organizzazione dei dati durante l'archiviazione, si abbiano difficoltà o complicazioni durante la fase del loro recupero. Mentre una volta gli archivi potevano essere su supporto cartaceo, oggi quasi tutti gli archivi si trovano in forma digitale su supporto elettronico, e ciò rende possibile la loro elaborazione automatizzata. Per esempio, un archivio può avere la forma di un file di dati opportunamente organizzati. Utilizzare i singoli file per creare archivi di dati può essere pratico per piccole applicazioni, ma in generale, questo approccio, può dar luogo anche a diversi problemi. Per esempio: se una Banca utilizza un file per conservare i dati dei propri clienti e un file per conservare i dati dei relativi conti correnti, bisogna preoccuparsi di mantenere "sincronizzati" i dati tra i due archivi. Se la Banca permette l'aggiornamento degli archivi da parte di più filiali, i problemi aumentano. I database nascono proprio per superare i limiti e gli inevitabili problemi che si potrebbero incontrare usando gli archivi tradizionali. Tra i classici problemi vanno ricordati la ridondanza dei dati e l'inconsistenza degli archivi. Il primo caso si verifica quando in diversi archivi si trovano memorizzati gli stessi tipi di dati (il problema è quello di dover fare gli aggiornamenti in tutti gli archivi interessati. Il secondo caso si verifica quando questi aggiornamenti non vengono fatti in tutti gli archivi in cui si dovrebbe e quindi nascono incongruenze tra dati nuovi e dati vecchi. Ricordiamo alcuni termini: Archivio: oggetto memorizzato in modo permanente, costituito da una sequenza di elementi dello stesso tipo e dimensione (record), ognuno dei quali può essere composto da più campi, di tipo e dimensione diversi tra loro. Database: insieme di archivi integrati (collegati) secondo un "modello logico" e nel rispetto di determinate regole (vincoli). Un'altra differenza tra gli archivi tradizionali e i database si trova nei software utilizzati per la loro gestione. I software per la gestione degli archivi sono quei programmi utili per poter inserire, modificare edeliminare un dato nell'archivio; i programmatori di solito capiscono di che si sta parlando quando si citano le funzioni (o istruzioni) per operare sui File. Un programmatore che scrive programmi di questo tipo (di solito in linguaggio procedurale) sa bene che oltre a pensare alle attività dell'utente, si deve preoccupare anche di: accesso ai file, lettura, scrittura, ecc... I database invece sono gestiti tramite sofware più complessi chiamati DBMS ; sono software che hanno già integrate tutte le principali funzioni necessarie e che possono essere "personalizzati" al caso particolare in cui verranno applicati. Ne sono esempi: PostgreSQL, MySQL, Oracle, Informix, MS Access, HSQLDB, ecc. Alcune delle funzioni integrate nei DBMS sono: l'integrazione (o collegamento) degli archivi, l'integrità dei modello di dati, la capacità di gestire database accentrati o distribuiti, la gestione della multiutenza e della sicurezza, la gestione dell'accesso concorrente ai dati, la gestione delle transazioni, la gestione dei backup, ecc... Poichè queste funzioni sono integrate nel DBMS, il lavoro del programmatore risulta alleggerito; il programmatore che lavora con i DBMS non utilizza però solo i classici linguaggi di programmazione procedurale, ma anche linguaggi di programmazione dichiarativi (es: SQL) 5