Unità D1
Archivi: i concetti fondamentali
Obiettivi
• Conoscere le diverse organizzazioni logiche
degli archivi
• Conoscere le operazioni di base che si
possono effettuare sugli archivi
• Sapere come progettare un archivio a
seconda delle proprie esigenze
• Sapere quale tipo di archivio utilizzare a
seconda delle proprie esigenze
Necessità di dati persistenti
• Nelle prime applicazioni informatiche non vi era nulla
che dovesse essere registrato o mantenuto in
memoria per una successiva elaborazione; il risultato
era semplicemente acquisito da chi ne aveva
necessità e l’algoritmo veniva conservato su un
qualche supporto digitale solo se necessario.
• Oggi, soprattutto nei software gestionali, ma non
solo, risulta necessario il mantenimento
dell’informazione (bolle, fatture, appuntamenti, dati di
magazzino).
Persistenza – archivi e file
• La persistenza dei dati è la proprietà che li rende
durevoli nel tempo, consentendo a essi di essere
riutilizzati.
• Un archivio è un’entità all’interno della quale sono
memorizzati dati, che garantisce la persistenza degli
stessi.
• Il termine archivio in inglese può essere considerato
equivalente a file, anche se in realtà un archivio è un
elemento molto più complesso: può essere sia un
file, sia un insieme di file.
I dati negli archivi: record
• In un archivio, i dati sono mantenuti mediante
strutture predefinite, che consentono di
connettere logicamente gruppi di dati tra loro
attinenti.
• Un record è un insieme di informazioni
attinenti a una stessa entità
• Un dato è una qualsiasi stringa, numero o
altro tipo di valore, mantenuto in un archivio.
• L’informazione è un dato che, inserito in uno
specifico contesto, acquisisce un preciso
significato.
Un esempio di record
• Si immagini di voler memorizzare l’anagrafica
degli studenti di una scuola, e quindi di voler
salvare per ogni studente le seguenti
informazioni:
–
–
–
–
nome;
cognome;
classe;
ripetente.
• In questo caso, un record è una struttura che
comprende tutte le informazioni attinenti a
uno studente (nome, cognome, classe …)
Il concetto di chiave
• La chiave è un campo o insieme di campi che
individua in modo univoco un singolo record.
• Nell’esempio si potrebbe scegliere come chiave
l’insieme dei campi: nome + cognome + classe.
Chiavi artificiali
• In alternativa, si potrebbe semplicemente
aggiungere un codice identificatore, in
genere abbreviato con la sigla id, che
identifichi univocamente ogni studente della
scuola.
Organizzazioni logiche degli archivi
•
•
•
•
File di testo
File CSV
File XML
Archivi binari
File di testo
• Un archivio organizzato come file di testo
contiene un insieme di i caratteri e può
essere scritto mediante qualsiasi editor di
testo.
• È di un tipo di archivio molto semplice, è
ancora oggi estesamente utilizzato.
• Può essere utilizzato per esempio come file
di configurazione per un’applicazione.
I caratteri:ASCII - UNICODE
• Il codice ASCII è il più diffuso e utilizza
8 bit per rappresentare un carattere
• Java utilizza il codice UNICODE in cui i
caratteri vengono rappresentati con 16
bit.
Un esempio di file di testo
• Windows utilizza il file di testo per salvare alcuni dati
di configurazione nel file win.ini:
…
[fonts]
[extensions]
[mci extensions]
[files]
[MCI Extensions.BAK]
aif=MPEGVideo
aifc=MPEGVideo
aiff=MPEGVideo
asf=MPEGVideo
asx=MPEGVideo
au=MPEGVideo
...
File CSV
• Un file CSV (Comma Separeted Values), è un file di
testo in cui ogni riga rappresenta un record,
composta da campi divisi da un carattere separatore,
solitamente una virgola.
• Ogni riga contenga un record, quindi ogni record è
separato dalla sequenza di caratteri CR + LF
(Carriage Return + Line Feed), rispettivamente per
ritornare all’inizio della riga e per aggiungere una riga
al file.
• Ogni riga contiene i campi da memorizzare separati
tra loro da una virgola. Nel caso in cui la virgola sia
un carattere utilizzato nei campi, si può sostituire il
carattere separatore utilizzando, per esempio, il
punto e virgola.
Un esempio di file CSV
Andrea,Rossi,4B,No
Gianluca,Verdi,3B,Si
Andrea,Rossi,5A,No
Sonia,Rossi,4C,No
Romina,Verdi,4B,No
• I file di tipo CSV sono attualmente utilizzati per lo scambio di dati
tra sistemi differenti, come per esempio vecchie applicazioni DOS
e moderne applicazioni con interfacce grafiche, che operano su
piattaforme completamente incompatibili.
File XML
• Un file XML (eXtensible Markup Language) è un file
di testo composto da tag e con una struttura ad
albero con un solo nodo radice.
• I tag servono per esplicitare il significato del
contenuto, e che sono precedute dal simbolo di
minore (“<”) e seguite da quello di maggiore (“>”).
• Per esempio, <studente> è un tag.
• Per ogni tag di apertura ne esiste uno di chiusura,
formalizzato nel modo seguente: </studente>.
• I file XML sono utilizzati per memorizzare dati, per
scambiare dati e messaggi tra applicazioni, o come
file di configurazione.
Un esempio di file XML
<?xml version=”1.0” encoding=”ISO-8859-1”?>
<studenti>
<studente>
<nome>Andrea</nome>
<cognome>Rossi</cognome>
<classe>4B</classe>
<ripetente>No</ripetente>
</studente>
<studente>
<nome>Gianluca</nome>
<cognome>Verdi</cognome>
<classe>3B</classe>
<ripetente>Si</ripetente>
</studente>
…
<studente>
<nome>Romina</nome>
<cognome>Verdi</cognome>
<classe>4B</classe>
<ripetente>No</ripetente>
</studente>
</studenti>
Archivi binari
• Un archivio binario è composto da una sequenza di
byte continua
• Per identificare i record, è necessario sapere a priori
la loro esatta posizione.
• Se i record sono di lunghezza fissa, per saltare al
record N, con N >= 0, è sufficiente applicare la
formula seguente:
posizioneRecordN = N * (lunghezzaRecordInbyte)
Tipi di accesso ai dati
• Archivi ad accesso sequenziale
• Archivi ad accesso diretto
• Archivi indicizzati
Archivi ad accesso sequenziale
• Gli archivi ad accesso sequenziale consentono di
accedere a un record solo partendo dall’inizio e
scorrendo tutti quelli che lo precedono.
• E’ opportuno solo per archivi di piccole dimensioni, o
per archivi utilizzati da applicazioni particolari che
hanno bisogno di leggere i dati solo in modo
sequenziale.
• Nel caso in cui la lunghezza dei record sia fissa,
scorrere l’archivio risulta abbastanza semplice
utilizzando la formula vista in precedenza.
• Nel caso di record a dimensione variabile è
necessario utilizzare vari accorgimenti, per esempio
scrivere prima del record un numero che indica la
quantità di byte occupati, in modo da sapere quanti
se ne devono ancora leggere per caricare un record
intero.
Archivi ad accesso diretto
• Un archivio ad accesso diretto consente di
accedere direttamente a qualsiasi record senza
dovere scorrere l’intero file.
• Gli archivi ad accesso diretto (detto anche casuale
o random) risolvono i problemi di utilizzo e di
prestazioni degli archivi ad accesso sequenziale.
• Se i record dell’archivio sono a lunghezza fissa è
possibile “saltare” direttamente al primo byte di un
record
posizioneRecordN = N * (lunghezzaRecordInbyte)
• Se i record sono a lunghezza variabile è necessaria
l’indicizzazione
Archivi indicizzati
• Un file indice di un archivio memorizza in modo
ordinato rispetto alle chiavi, la chiave stessa del
record e la posizione di questo nel file dei dati.
• Se la dimensione dei record è fissa, il file indice potrà
contenere solo il numero del record nel file di dati; se
invece la dimensione è variabile, è necessario
indicare la posizione espressa in byte.
• Un archivio indicizzato consente di ordinare i record
rispetto a una chiave.
• Questa soluzione rende necessaria solo la modifica
del file indice ogniqualvolta si effettua un inserimento
di un nuovo record, una cancellazione o un
riordinamento dei dati.
Approfondimento: XML
• Il formato XML ha avuto nel corso degli ultimi anni un
grande impulso, dovuto alla necessità sempre più
diffusa di trovare uno standard utilizzabile su
piattaforme e sistemi operativi differenti.
• Questo formato, infatti, può essere letto e compreso
dall’uomo ma è anche facilmente interpretabile
mediante i parser, ovvero componenti specifici già
presenti nella maggior parte dei linguaggi di
programmazione, che consentono di leggere e
aggiornare direttamente i nodi di un file XML.
• Il .NET Framework mette a disposizione delle librerie
dedicate alla gestione dei contenuti XML
• Anche in Java esistono diversi package che
consentono di gestire file XML, (es. javax.xml della
Sun e Xerces di Apache Group)
Esempio di file indicizzato
• Il primo campo del file indice rappresenta la chiave
numerica adottata e corrisponde al primo campo del
file di dati; il secondo campo del file indice indica
invece la posizione del record (partendo da 0)
all’interno del file di dati.
Più indici
• È possibile creare più di un file indice per ogni file di
dati, ciascuno di questi ordina i record in base a
chiavi diverse
• In questo modo, si potrà utilizzare l’indice più
opportuno a seconda dell’ordinamento desiderato.
Operazioni sugli archivi
• Il modo in cui si effettuano le operazioni sugli
archivi può variare in base al linguaggio di
programmazione utilizzato, ma prevede
sempre le seguenti operazioni fondamentali:
–
–
–
–
–
–
apertura dell’archivio;
lettura di un record;
scrittura di un record;
modifica di un record;
cancellazione di un record;
chiusura dell’archivio.
Apertura di un archivio
• L’apertura di un archivio è un’operazione che
deve essere necessariamente effettuata
prima di poter eseguire qualsiasi tipo di
operazione su di esso.
• Un archivio non è necessariamente composto
da un singolo file, ma può essere costituito da
un insieme di questi.
• Qualsiasi operazione si esegua, deve essere
sempre compresa tra una di apertura e una di
chiusura dell’archivio.
Chiusura di un archivio
• La chiusura in alcuni casi è fondamentale per
confermare le modifiche effettuate; senza di
essa l’archivio rimarrebbe immutato rispetto
al suo stato precedente l’apertura.
• Talvolta però i sistemi che eseguono i
programmi agevolano il programmatore
chiudendo l’archivio nel caso in cui termini il
programma, senza che sia stata effettuata
una chiusura esplicita.
Lettura, scrittura e modifica
• La lettura di un record è un’operazione
che si può definire invariante, in quanto
non modifica lo stato dell’archivio, ma si
limita a leggere dati contenuti al suo
interno.
• Al contrario, le operazioni di scrittura,
modifica e cancellazione alterano lo
stato dell’archivio modificando i dati in
esso contenuti.
Cancellazione
• Cancellazione fisica
– Il record cancellato viene definitivamente eliminato
dall’archivio.
– Può comportare la riorganizzazione di tutto l’archivio, a
seconda del tipo di organizzazione logica implementata ed
eventuali indicizzazioni presenti.
– Nel caso di archivi di notevoli dimensioni risulta onerosa in
termini di tempo di CPU.
• Cancellazione logica
– Il record viene marcato logicamente ma non eliminato
dall’archivio.
– In un secondo momento, quando vi è un carico limitato di
lavoro (spesso di notte), o su indicazione esplicita di un
addetto alla base di dati, questi record sono cancellati
fisicamente e l’archivio viene riorganizzato, per esempio
compattando le parti vuote lasciate dalle cancellazioni.
Fattori che influenzano la scelta
di organizzazione di un archivio
• I fattori da tenere in considerazione per
la scelta della tipologia di
organizzazione di un archivio sono i
seguenti:
– quantità di dati;
– tipi di dato;
– relazioni tra i dati.
Scarica

Unità D1