Basi di dati distribuite: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Creata pagina con "{{avanzamento|25%|lezione}} I sistemi a database distribuiti rappresentano una grande sfida per i progettisti di DBMS, in particolare per garantire le proprietà acide e la p..."
 
+ livelli di astrazioni
Riga 38:
\text{ControCorrente}_3 = \sigma_{filiale=3} \text{ControCorrente}
</math>
 
Sia ora la relazione:
<math>
\text{Transazioni(}\underline{codice}\text{, contocorrente1, contocorrente2, valore, data)}
</math>
 
allora possiamo definire i '''frammenti derivati''' su una relazione S:
 
<math>
S_i = S \ltimes F_i
</math>
 
quindi:
<math>
\text{Transazione}_i = \text{Transazione} \ltimes \text{ControCorrente}_i
</math>
 
(A sua volta ''Transazione'' potrebbe essere distribuita sui vari nodi...)
 
==== Join distribuito ====
L'operazione JOIN su basi di dati distribuite è la più onerosa e complessa da gestire. Condizione necessaria affinchè il JOIN distribuito sia possibile è che ogni macchina operi sul proprio set di frammenti. Questa condizione è limitativa, si pensi ad esempio un caso in cui un correntista abbiamo più di un conto corrente, che viene distribuito in frammenti diversi. Inoltre spesso effettuare operazioni tra DBMS diversi complica ulteriormente le cose (vedere sezione sui livelli di trasparenza).
 
=== Frammentazione verticale ===
Nella frammentazione verticale le relazioni vengono divise per insiemi di attributi. In questo caso è necessario replicare la chiave primaria in ogni frammento, così da permettere la ricostruzione attraverso una JOIN.
 
== Livelli di trasparenza ==
I livelli di trasparenza sono parametri che definiscono quanto il programmatore che scrive query per una base di dati distribuita su differenti DBMS può astrarre il suo codice. Questo è dovuto alle differenti tecniche di approccio alla frammentazione, query, ecc. dei vari DBMS.
 
Possiamo identificare tre principali livelli di trasparenza:
# Trasparenza di frammentazione: il programmatore non conosce (nè gli interessa) come e quando la base di dati è frammentata e distribuita;
# Trasparenza di allocazione: il programmatore conosce la struttura dei frammenti, ma non l'allocazione fisica dei dati;
# Trasparenza di linguaggio: il programmatore conosce sia la struttura dei frammenti che la loro allocazione ed è costretto a indicarle manualmente, però è avvantaggiato dall'avere un solo linguaggio per tutti i DBMS. Si noti che se la maggior parte dei DBMS utilizzi SQL come linguaggio, ogni DBMS ha un proprio dialetto che complicherebbe lo sviluppo in caso di DBMS diversi;
# Nessuna trasparenza.
 
[[Categoria:Basi di dati 2]]