Cap.9 Base di dati distribuiti ed architettura client-server Flashcards
Cos’è un database distribuito?
Un database distribuito è un singolo DB logico che è sparso fisicamente attraverso computer in località differenti e connessi attraverso una rete di
comunicazione dati.
Invece, un sistema per la gestione di basi di dati distribuite (DDBMS) è un sistema software che gestisce un DB distribuito rendendo la distribuzione trasparente all’utente. La rete deve quindi consentire ad un utente in una data località di essere in grado di accedere (e aggiornare) i dati che si trovano in una località differente dalla sua.
Un database distribuito è caratterizzato dall’eterogeneità dell’hardware e dei sistemi operativi di ogni nodo.
Un database distribuito richiede DDBMS multipli, funzionanti ognuno su di un sito remoto (nodo). Gli ambienti di
database distribuiti si differenziano in base al grado di cooperazione dei DDBMS, e alla presenza di un sito master che coordina le richieste.
Quando un sito fallisce, gli altri possono continuare ad operare, solo i dati del sito fallito sono inaccessibili. La replicazione dei dati aumenta ancora di più l’affidabilità e la disponibilità. In un sistema distribuito è più facile espandere il sistema in termini di aggiunta di nuovi dati, accrescere il numero di siti o aggiungere nuovi processori (miglioramento delle prestazioni). Infine, ogni sito ha un database di taglia più piccola e, query e transazioni sono processate più rapidamente.
Quali sono i livelli di trasparenza?
I vantaggi dei Database Distribuiti, partono dalla gestione dei dati distribuiti a diversi livelli di trasparenza, ovvero sono nascosti i dettagli riguardo la
posizione di ogni data item presente nel sistema.
▪ Trasparenza di distribuzione o di rete, dove vi è libertà dell’utente dai dettagli della rete. Essa si suddivide in:
o Trasparenza di locazione: un comando utilizzato è indipendente dalla località dei dati e dalla località di emissione del comando.
o Trasparenza di naming: la specifica di un nome di un oggetto implica che una volta che un nome è stato fornito, gli oggetti possono essere
referenziati usando quel nome, senza dover fornire dettagli addizionali.
▪ Trasparenza di replicazione: dove delle copie dei dati possono essere mantenute in siti multipli per una migliore disponibilità, prestazioni ed
affidabilità. L’utente non percepisce l’esistenza di tali copie.
▪ Trasparenza di frammentazione, sono possibili due tipi di frammentazione:
o Frammentazione orizzontale che distribuisce una relazione attraverso insieme di tuple.
o Frammentazione verticale che distribuisce una relazione in sotto relazioni formate da un sottoinsieme delle colonne della relazione originale.
Una query globale dell’utente deve essere trasformata in una serie di frammenti di query. La trasparenza di frammentazione consente all’utente di non
percepire l’esistenza di tali frammenti
Quali sono le tecniche di frammentazione sui database distribuiti? (frammentazione verticale -> outer join) + Esempio frammentazione orizzontale e verticale:
Il design dei DDB prevede l’applicazione di tecniche di Frammentazione dei dati, deve essere deciso quale sito deve memorizzare le diverse porzioni del database. Una relazione può essere memorizzata per intero in un sito, oppure essere divisa in unità più piccole distribuite.
Uno schema di frammentazione di un database è la definizione di un insieme di frammenti che include tutte le tuple e gli attributi del database.
Esso, inoltre, consente la ricostruzione dell’intero database applicando una sequenza di operazioni di OUTER JOIN e UNION.
▪ Un frammento orizzontale di una relazione è un sottoinsieme delle tuple (righe della tabella) della relazione. Le tuple vengono assegnate ad un determinato frammento orizzontale in base al valore di uno o più attributi. Ad esempio, considerato il database “Company”, esso può essere
distribuito su siti diversi definendo frammenti orizzontali in base al valore del numero del DIPARTIMENTO. Ogni frammento contiene le tuple degli impiegati che lavorano per un particolare dipartimento. La segmentazione orizzontale derivata, applica la partizione di una relazione primaria
anche a relazioni secondarie, collegate alla prima con una chiave esterna. Ad esempio, dal partizionamento di DIPARTIMENTO deriva il
partizionamento di IMPIEGATO e PROGETTO.
▪ La frammentazione verticale divide una relazione “verticalmente” per colonne. Un frammento verticale di una relazione mantiene solo
determinati attributi di una relazione. Ad esempio, IMPIEGATO può essere suddiviso in due frammenti, uno contenente le informazioni personali
{NOME, DATA_DI_NASCITA e INDIRIZZO}, e l’altro contenente {SSN, SALARIO e NUMERO_DIPARTIMENTO}. Questa frammentazione, però, non
consente di ricostruire la tupla IMPIEGATO originale, infatti non ci sono attributi in comune fra i due frammenti. La soluzione è includere la chiave
primaria o una candidata in ogni frammento verticale. Per ricostruire la relazione originaria dai frammenti verticali è necessario fare l’OUTER JOIN
dei frammenti.
▪ La frammentazione mista, è possibile combinare la frammentazione orizzontale e verticale. Ad esempio, si combinano le due frammentazioni viste
per la relazione IMPIEGATO. La relazione originaria può essere ricostruita applicando OUTER JOIN e UNION nell’ordine appropriato
Controlli della concorrenza e problemi di recovery in database distribuiti
I database distribuiti incontrano un numero di controlli di concorrenza e problemi di recovery che non sono presenti nei database centralizzati, come:
▪ Trattamento di copie multiple di dati: Il controllo della consistenza deve mantenere una consistenza globale. Allo stesso modo il meccanismo di
recovery deve recuperare tutte le copie e conservare la consistenza dopo il recovery.
▪ Fallimenti di singoli siti: La disponibilità del database non deve essere influenzata dai guasti di uno o due siti e lo schema di recovery li deve
recuperare prima che siano resi disponibili.
▪ Guasto dei collegamenti di comunicazione: Tale guasto può portare ad una partizione della rete che può influenzare la disponibilità del database
anche se tutti i siti sono in esecuzione.
▪ Commit distribuito: Una transazione può essere frammentata ed essere eseguita su un numero di siti. Questo richiede un approccio basato sul
commit a due fasi per il commit della transazione.
▪ Deadlock distribuito: Poiché le transazioni sono processate su siti multipli, due o più siti possono essere coinvolti in un deadlock. Di conseguenza
devono essere considerate le tecniche per il trattamento dei deadlock.
▪ Controllo della concorrenza distribuito basato su una copia designata dei dati: Si designa una particolare copia di ogni dato (copia designata).
Tutte le richieste di lock ed unlock vengono inviate solo al sito che la contiene.
▪ Tecnica del sito primario: Un singolo sito è designato come sito primario, il quale fa da coordinatore per la gestione delle transazioni