ISAM

Da Wikipedia, l'enciclopedia libera.

ISAM è l'acronimo di Indexed Sequential Access Method (metodo di accesso sequenziale indicizzato), ed è un modo per immagazzinare dati da estrarre rapidamente. Sviluppato originariamente da IBM, costituisce oggi la base per l'immagazzinamento dei dati in molti database, relazionali e non.

In un sistema ISAM i dati sono suddivisi in record composti da campi a lunghezza fissa. I record sono immagazzinati in sequenza, come si faceva in origine per velocizzare l'accesso da una periferica a nastro. Vi è poi un set secondario di tabelle hash chiamate indici, che contengono puntatori ai record, in modo che un record possa essere estratto senza dover scorrere l'intero insieme di dati. Questa è una differenza rispetto ai database navigazionali, nei quali i puntatori ad altri dati si trovavano dentro i record stessi. Il miglioramento in ISAM è dovuto al fatto che gli indici sono di piccole dimensioni e consentono ricerche veloci, perché il database accede soltanto ai record di cui ha bisogno. Inoltre eventuali modifiche ai dati richiedono che si modifichino i record e gli indici in questione, ma non altri dati come i puntatori.

I database relazionali possono essere facilmente costruiti su un framework ISAM con l'aggiunta della logica per mantenere validi i collegamenti tra le tabelle. In genere il campo utilizzato come collegamento, detto chiave esterna, è indicizzato per permettere ricerche veloci. Questo metodo è più lento che immagazzinare il puntatore ai dati collegati dentro al record, però se si modifica la struttura fisica dei dati non vi è la necessità di aggiornare i puntatori, in quanto i collegamenti rimangono validi.

ISAM è molto semplice da comprendere e da implementare, perché consiste essenzialmente nell'accesso diretto e sequenziale a un file di database. È anche molto poco costoso in termini di prestazioni. Lo svantaggio è che ogni macchina client deve gestire una sua propria connessione per ogni file a cui accede. Ciò comporta la possibilità che distinte modifiche dei dati entrino in conflitto tra loro, creando così incoerenze. Questo problema viene generalmente risolto con l'implementazione di una piattaforma client-server che gestisce le richieste dei client mantenendo l'ordine. È questo il concetto base che sta dietro l'SQL, che si trova a un livello di astrazione superiore rispetto all'immagazzinamento dei dati.

ISAM è stato rimpiazzato all'IBM da un metodo chiamato VSAM (Virtual Sequential Access Method), utilizzato anche nel DB2, che ancor oggi è il suo DBMS primario.

ISAM: Organizzazione Logica[modifica | modifica wikitesto]

Esempio di organizzazione logica

ISAM è una organizzazione statica, soggetta a costose riorganizzazioni periodiche. Essendo statica, occorre predisporre aree di overflow per l’aggiunta di elementi.

Formato nodo interno[modifica | modifica wikitesto]

K1 P1 K2 P2 ... KM PM

Ogni coppia (ki ; pi) è tale per cui ki è il più alto valore di chiave nel sottoalbero puntato da pi.

ISAM: Organizzazione fisica[modifica | modifica wikitesto]

ISAM prevede uno specifico schema di allocazione dei dati e dell'indice sul dispositivo di memoria secondaria. In particolare, si distinguono tre aree:

  • Primary area
  • Overflow area
  • Index area

Primary Area[modifica | modifica wikitesto]

Questa è l'area predisposta ad ospitare i dati. Essa è costituita da una serie di cilindri contigui sui quali alcune tracce sono riservate per l'indice e altre per le are di overflow.

Cylinder 0
Index tracks
1 3 5 7
9 14 17 18
Overflow tracks
Cylinder 1
Index tracks
19 20 22 25
39 40 42 48
Overflow tracks
Cylinder 2
Independent

overflow area

Overflow Area[modifica | modifica wikitesto]

Quest'area è essenzialmente usata per memorizzare nuovi record, i quali altrimenti non potrebbero essere inseriti nell'aera principale senza dover riscrivere la sequenza dei file. Esistono due tipi di overflow area:

  • Cylinder overflow area: tracce riservate per gestire l'overflow dei dati di ogni cilindro. I record in overflow sono collegati in catena.
  • Independent overflaw area: si ricorre all'area comune sull'ultimo cilindro solo quando l'area particolare di overflow è satura.

Esempio[modifica | modifica wikitesto]

Prendiamo come esempio la seguente memorizzazione dei dati nel cilindro 5:

Track Data nel Cilindro 5
1 205 206 208 210 213
2 214 219 220 222 225
3 226 227 230 236 unused

Se si aggiunge il record con chiave 209, esso provoca lo spostamento del record 213 dal track 1 dentro l'overflow area, muovendo il 210 al suo posto ed inserendo il 209 nel posto lasciato libero dal 210.

Track Data nel cilindro 5 Commenti
1 205 206 208 209 210 Prime data

area

2 214 219 220 222 225
3 226 227 230 236 unused
...
9 213 Overflow area

Index Area[modifica | modifica wikitesto]

Per facilitare la localizzazione random dei record, ISAM mantiene tre livelli di indici sul disco:

  • Track index
  • Cylinder index
  • Master index (Opzionale)

Track Index[modifica | modifica wikitesto]

Vi è un track index per ogni cilindro, che generalmente occupa il track 0 (la prima posizione). Ogni entrata corrisponde a una traccia sul cilindro e memorizza:

  • il valore di chiave più alto in area primaria
  • il valore di chiave più alto in area di overflow
  • il puntatore al primo record nell'area locale di overflow

Cylinder Index[modifica | modifica wikitesto]

Esiste un solo cylinder index per file. Ogni entrata è relativa ad un cilindro e memorizza il valore più alto della chiave in esso contenuto. Per esempio, se il file memorizzato su 6 cilindri, il cylinder index contiene 6 voci.

Master Index[modifica | modifica wikitesto]

Questo indice viene usato solo se il cylinder index risulta troppo grande e non garantisce un'efficiente indicizzazione. Nel master index vi è un'entrata per ogni traccia del cylinder index, per memorizzare il valore più alto di chiave della traccia e l'indirizzo della traccia.

Voci correlate[modifica | modifica wikitesto]

Bibliografia[modifica | modifica wikitesto]

  • Paolo Ciaccia, Dario Mario, Lezioni di basi di dati, 2013, Editrice Esculapio, ISBN-13: 978-8874887187

Altri progetti[modifica | modifica wikitesto]