Ottimizzazione delle query nei sistemi distribuiti

Questo capitolo discute l'ottimizzazione delle query nel sistema di database distribuito.

Architettura di elaborazione delle query distribuite

In un sistema di database distribuito, l'elaborazione di una query comprende l'ottimizzazione sia a livello globale che a livello locale. La query entra nel sistema di database sul client o sul sito di controllo. Qui l'utente viene convalidato, la query viene controllata, tradotta e ottimizzata a livello globale.

L'architettura può essere rappresentata come:

Mappatura di query globali in query locali

Il processo di mappatura delle query globali a quelle locali può essere realizzato come segue:

  • Le tabelle richieste in una query globale hanno frammenti distribuiti su più siti. I database locali contengono informazioni solo sui dati locali. Il sito di controllo utilizza il dizionario dati globale per raccogliere informazioni sulla distribuzione e ricostruisce la vista globale dai frammenti.

  • Se non è presente alcuna replica, l'ottimizzatore globale esegue query locali nei siti in cui sono archiviati i frammenti. In caso di replica, l'ottimizzatore globale seleziona il sito in base al costo di comunicazione, al carico di lavoro e alla velocità del server.

  • L'ottimizzatore globale genera un piano di esecuzione distribuito in modo che la quantità minima di trasferimento di dati si verifichi tra i siti. Il piano indica la posizione dei frammenti, l'ordine in cui devono essere eseguiti i passaggi della query e i processi coinvolti nel trasferimento dei risultati intermedi.

  • Le query locali sono ottimizzate dai server di database locali. Infine, i risultati della query locale vengono uniti tramite un'operazione di unione in caso di frammenti orizzontali e un'operazione di unione per frammenti verticali.

Ad esempio, si consideri che il seguente schema di progetto è frammentato orizzontalmente in base a City, le città sono New Delhi, Kolkata e Hyderabad.

PROGETTO

PId Città Dipartimento Stato

Supponiamo che ci sia una query per recuperare i dettagli di tutti i progetti il ​​cui stato è "In corso".

La query globale sarà & inus;

$$ \ sigma_ {status} = {\ small "progress"} ^ {(PROJECT)} $$

La query nel server di Nuova Delhi sarà:

$$ \ sigma_ {stato} = {\ small "in corso"} ^ {({NewD} _- {PROJECT})} $$

La query nel server di Kolkata sarà:

$$ \ sigma_ {stato} = {\ small "in corso"} ^ {({Kol} _- {PROJECT})} $$

La query nel server di Hyderabad sarà:

$$ \ sigma_ {status} = {\ small "progress"} ^ {({Hyd} _- {PROJECT})} $$

Per ottenere il risultato complessivo, dobbiamo unire i risultati delle tre query come segue:

$ \ sigma_ {stato} = {\ small "in corso"} ^ {({NewD} _- {PROGETTO})} \ cup \ sigma_ {stato} = {\ small "in corso"} ^ {({kol} _- {PROGETTO})} \ cup \ sigma_ {stato} = {\ small "in corso"} ^ {({Hyd} _- {PROGETTO})} $

Ottimizzazione delle query distribuite

L'ottimizzazione delle query distribuite richiede la valutazione di un numero elevato di alberi di query, ciascuno dei quali produce i risultati richiesti di una query. Ciò è dovuto principalmente alla presenza di una grande quantità di dati replicati e frammentati. Quindi, l'obiettivo è trovare una soluzione ottimale invece della soluzione migliore.

I problemi principali per l'ottimizzazione delle query distribuite sono:

  • Utilizzo ottimale delle risorse nel sistema distribuito.
  • Trading di query.
  • Riduzione dello spazio di soluzione della query.

Utilizzo ottimale delle risorse nel sistema distribuito

Un sistema distribuito ha un numero di server di database nei vari siti per eseguire le operazioni relative a una query. Di seguito sono riportati gli approcci per l'utilizzo ottimale delle risorse:

Operation Shipping- Nell'operazione di spedizione, l'operazione viene eseguita presso il sito in cui sono archiviati i dati e non presso il sito del cliente. I risultati vengono quindi trasferiti al sito del cliente. Ciò è appropriato per le operazioni in cui gli operandi sono disponibili nello stesso sito. Esempio: operazioni di selezione e progetto.

Data Shipping- Nella spedizione dei dati, i frammenti di dati vengono trasferiti al server del database, dove vengono eseguite le operazioni. Viene utilizzato nelle operazioni in cui gli operandi vengono distribuiti in siti diversi. Ciò è appropriato anche nei sistemi in cui i costi di comunicazione sono bassi e i processori locali sono molto più lenti del server client.

Hybrid Shipping- Questa è una combinazione di dati e spedizione operativa. Qui, i frammenti di dati vengono trasferiti ai processori ad alta velocità, dove viene eseguita l'operazione. I risultati vengono quindi inviati al sito client.

Query Trading

Nell'algoritmo di scambio di query per sistemi di database distribuiti, il sito di controllo / client per una query distribuita è chiamato acquirente ei siti in cui vengono eseguite le query locali sono chiamati venditori. L'acquirente formula una serie di alternative per la scelta dei venditori e per la ricostruzione dei risultati globali. L'obiettivo dell'acquirente è raggiungere il costo ottimale.

L'algoritmo inizia con l'acquirente che assegna sottoquery ai siti del venditore. Il piano ottimale viene creato dai piani di query ottimizzati locali proposti dai venditori combinati con il costo di comunicazione per la ricostruzione del risultato finale. Una volta formulato il piano ottimale globale, la query viene eseguita.

Riduzione dello spazio della soluzione della query

La soluzione ottimale generalmente comporta la riduzione dello spazio della soluzione in modo da ridurre il costo delle query e del trasferimento dei dati. Ciò può essere ottenuto tramite una serie di regole euristiche, proprio come l'euristica nei sistemi centralizzati.

Di seguito sono riportate alcune delle regole:

  • Eseguire le operazioni di selezione e proiezione il prima possibile. Ciò riduce il flusso di dati sulla rete di comunicazione.

  • Semplifica le operazioni sui frammenti orizzontali eliminando le condizioni di selezione che non sono rilevanti per un particolare sito.

  • In caso di operazioni di join e unione comprendenti frammenti situati in più siti, trasferire i dati frammentati al sito in cui è presente la maggior parte dei dati ed eseguire l'operazione lì.

  • Utilizzare l'operazione di semi join per qualificare le tuple che devono essere unite. Ciò riduce la quantità di trasferimento dati che a sua volta riduce i costi di comunicazione.

  • Unisci le foglie comuni e gli alberi secondari in un albero di query distribuito.