Database parallelo
# Database parallelo

Un database parallelo è un tipo di database in cui le prestazioni vengono ottimizzate tramite la parallelizzazione di varie funzionalità, ad esempio il caricamento dei dati, la costruzione degli indici e la gestione delle interrogazioni. Nell'esecuzione parallela, molte operazioni sono eseguite contemporaneamente, al contrario dell'esecuzione seriale, dove le diverse fasi di elaborazione sono sequenziali. Sebbene i dati possono essere memorizzati in maniera distribuita, la loro suddivisione è comandata unicamente da fattori legati alle prestazioni. I database paralleli migliorano l'elaborazione e la velocità di ingresso-uscita usando più CPU e dischi fissi in parallelo.

## Architetture parallele

Le principali architetture usate sono:

* Architettura a RAM condivisa: più processori condividono la stessa memoria principale (RAM) ma hanno una propria memoria di massa (tipicamente sistemi a disco rigido). Se molti processi sono in esecuzione contemporaneamente, la velocità si riduce, come avviene in un singolo computer quando molti task girano in parallelo. Tale architettura viene usualmente chiamata anche Symmetric Multi-Processor (SMP)
* Architettura a memoria di massa condivisa: ogni nodo ha la propria memoria principale (RAM), ma tutti i nodi condividono la memoria di massa, di solito attraverso una rete Storage Area Network. Ogni nodo di solito possiede processori multipli.
* Architettura senza condivisione: è una combinazione di architetture multi-processore con memorie separate. Tale architettura viene normalmente chiamata Cluster

## Tipi di parallelismo

* Parallelismo interquery: prevede l'esecuzione di molteplici interrogazioni in parallelo. In questo caso, il carico a cui è sottoposto il DMBS è tipicamente caratterizzato da molteplici transazioni molto semplici ad elevata frequenza.
* Parallelismo interoperazionale: prevede l'esecuzione di singole interrogazioni che possono consistere in più operazioni.

    Esistono due tipi di parallelismo interoperazionale:
   * Parallelismo Indipendente: l'esecuzione di ogni singola operazione viene divisa su diversi processori solo se possono essere eseguite indipendentemente l'una dall'altra. Per esempio, se si intende costruire una join di quattro tabelle, allora due possono essere messe in join sfruttando un processore e le altre due da un'altra CPU. La join complessiva può essere fatta successivamente.

   * Parallelismo pipe-lined: l'esecuzione di diverse operazioni secondo la logica di funzionamento di una Pipeline. Per esempio, se si ha la necessità di unire (operazione di join) tre tabelle, un processore può eseguire l'unione tra le prime due e inviare l'insieme dei record risultanti ad un altro processore. In quest'ultimo la terza tabella viene unita alla precedente operazione di join e viene generato il risultato finale
* Parallelismo intraquery: È il duale del parallelismo interquery. Riguarda l'esecuzione di interrogazioni complesse in parallelo con processori multipli. Per esempio. La proposizione ORDER BY di una query che prova ed ordinare milioni di record può essere parallelizzata su più processori.
