Gli archivi

Per gestire i dati in maniera automatica attraverso l’uso di un programma applicativo (detto anche app), il primo modo che può venire alla mente è quella di organizzare i dati sotto forma di file. Un file di dati, detto anche archivio, è un insieme di tante righe, ciascuna delle quali viene denominata record. Ogni record è formato da un insieme predeterminato di dati elementari, dette attributi o campi (in inglese field).

Si può pensare ad un archivio come ad una tabella, in cui le righe rappresentano i record, mentre le colonne rappresentano gli attributi. Esempi di archivi utili a gestire dati sono i file Excel o i file CSV (Comma Separated Value). Nei file CSV i vari campi sono suddivisi da un separatore, tipicamente la virgola o il punto e virgole. In ogni caso si può utilizzare un qualsiasi file di testo (TXT) la cui organizzazione sia nota al programma applicativo che deve utilizzare quei dati.

Operazioni sugli archivi

In generale, su un singolo record, in accordo al già citato metodo CRUD, si devono poter eseguire le seguenti operazioni:

  • creazione di un record;
  • lettura di un record;
  • modifica di un record;
  • eliminazione di un record.

Un archivio, invece, in quanto è costituito da un insieme di record, deve avere anche la funzionalità di accesso, ovvero la possibilità di individuare un certo record all’interno del file. Le operazioni logiche che è solitamente possibile eseguire all’interno di un archivio sono dunque:

  1. creazione di un archivio vuoto;
  2. accesso ad un record appropriato;
  3. inserimento di un record nella posizione appropriata;
  4. lettura di un record nella posizione appropriata;
  5. modifica di un certo record;
  6. eliminazione di un certo record;
  7. eliminazione di un archivio.

Metodi di accesso

Se ci focalizziamo sull’organizzazione logica di un file, possiamo distinguere tre tipi di organizzazione, che si differenziano per la modalità di accesso dei vari record. La modalità di accesso determina, in soldoni, come un record viene ricercato all’interno del file. Le tre modalità di accesso sono sequenziale, diretto ed indicizzato, come di seguito descritto.

Accesso sequenziale

I file organizzati con modalità ad accesso sequenziale prevedono che ogni record venga inserito in coda al precedente e dunque, per poter trovare un certo record bisogna scorrere il file fino a quando non si trova il record desiderato. È il metodo di accesso più facile da gestire ma quello meno efficace in termini di tempo di ricerca.

Accesso diretto

Anche nei file organizzati con modalità ad accesso diretto, i record vengono solitamente inseriti uno in coda all’altro ma ad ogni record viene associato un numero che ne indica la posizione. In questo caso, dunque, se si conosce la posizione del record si può accedere direttamente a quel record senza scorrere l’intero file. Il problema è che generalmente non esiste una correlazione tra la posizione del record ed il suo contenuto. Tale correlazione deve essere implementata a livello applicativo, ad esempio con algoritmi di hashing.

Accesso indicizzato

I file organizzati con modalità ad accesso indicizzato costituiscono un’evoluzione di quelli ad accesso diretto. Nei file ad accesso indicizzato deve essere individuato un attributo fondamentale che identifica univocamente un record. Sulla base di questo attributo si costruisce un indice, che viene accoppiato al file vero e proprio, che è organizzato ad accesso diretto. L’indice individua, per ogni valore dell’attributo fondamentale, la posizione dell’intero record nel file. L’indice, essendo di dimensioni molto minori rispetto al file, può essere mantenuto ordinato, favorendo di gran lunga l’operazione di ricerca.

Limitazioni

Gli archivi sono utili solo quando si devono gestire relativamente pochi dati tramite una sola applicazione. Infatti, tramite archivi è impossibile definire relazioni logiche che legano i dati tra di loro. Inoltre, sebbene gli archivi sono elementi indipendenti dall’applicazione che ne fa uso e quindi possono essere utilizzati da più applicazioni, è proprio in questo caso che si evidenziano tutti i limiti insiti nell’uso degli archivi.

Per sintesi evidenziamo i seguenti limiti:

  • Ridondanza dei dati;
  • Inconsistenza/incongruenza dei dati;
  • Cattiva gestione della concorrenza.

Il problema della ridondanza dei dati si verifica soprattutto quando una certa applicazione deve conoscere, per un problema di riservatezza, solo parte dei dati. In questo caso è necessario duplicare i dati, con evidenti spreco di memoria.

Inoltre, se i dati devono essere aggiornati vi è un evidente problema di inconsistenza: alcune applicazioni potrebbero utilizzare informazioni non aggiornate. Analogamente, se si modifica la struttura dell’archivio si devono applicare le modifiche a tutte le applicazioni, altrimenti si verificano problemi di incongruenza (ad esempio un’applicazione accede al terzo campo di un record assumendo che sia il numero di telefono ed invece il terzo campo è diventato l’indirizzo e-mail).

Infine, affinché sia possibile utilizzare l’archivio è generalmente necessario che mentre un’applicazione accede all’archivio, le altre che vogliono accedere devono aspettare che la prima abbia finito l’elaborazione. Questo è un meccanismo poco efficiente di gestire la concorrenza tra processi, soprattutto nel caso di archivi con una grossa mole di dati.