Clusters (Object Type) Parte II

venerdì 23 maggio 2008 alle 23:28 | Pubblicato su Installation and Configuration, SQL | Lascia un commento

Nel post precedente ho detto che i cluster sono un modo per raggruppare due o più tabelle in uno stesso blocco, in realtà questo non è del tutto corretto, perché può anche esserci un caso particolare di cluster “single table” cioè con una tabella sola. Anche nell’esempio che ho mostrato ieri ho creato un cluster con una sola tabella, ma in quel caso non vi è alcun vantaggio.

Hash Cluster

Il tipo di cluster di cui ho parlato ieri è chiamato INDEX CLUSTER, esso utilizza un indice sul cluster per trovare e accedere ai dati. Un’altro tipo di cluster che è possibile creare in Oracle è l’Hash Cluster, in questo caso per accedere ai dati non si utilizza un indice ma una funzione di Hash. In pratica i dati non vengono raggruppati secondo la distribuzione dei valori della chiave del cluster (le colonne del cluster, cioè le colonne comuni fra le tabelle componenti il cluster) ma secondo un valore hash calcolato sul loro valore. Questo permette di avere una distribuzione più uniforme dei dati, anche in caso di valore delle chiave non distribuiti uniformentemente sull’intervallo di valori possibili.

Questo metodo di accesso può essere molto efficente, più di un indice tradizionale, infatti il tempo dovrebbe essere costante, indipendentemente dal numero di valori, esso dipende dal tempo di calcolo della funzione hash. Questo tecnica però è efficente solo quando di fanno interrogazioni con selezioni per uguaglianza sulla chiave (chiave=valore) mentre diventa molto poco efficente per le ricerche su intervalli (ad esempio chiave>valore).

Come si crea un Hash Cluster

SVILUPPO40@perseo10 > create cluster test_cluster (a number(10))
  2  size 1024
  3  HASH IS a HASHKEYS 100;

Creato cluster.

SVILUPPO40@perseo10 > create table test_cluster_t1(field1 number(10),
  2  descrizione varchar2(100))
  3  CLUSTER test_cluster(field1);

Tabella creata.

SVILUPPO40@perseo10 > insert into test_cluster_t1 values (1,'a');

Creata 1 riga.

Il valore specificato con HASHKEYS specifica il numero di chiavi che si prevede verranno inserite nel cluster, tale numero viene automaticamente arrotondato al numero primo superiore più vicino da oracle.
Il corretto settaggio dello spazio allocato dai cluster non è banale, rimando al manuale “Administrator’s Guide” Capitolo 19 per qualche esempio.

Sorted Hash Clusters
Il terzo tipo di cluster è una variante degli Hash Cluster che permette di specificare, oltre alle chiavi, delle colonne su cui mantenere ordinati i record corrispondenti ad ogni chiave. In questo modo quando si interrogano i dati per una certa chiave, si ottengo i dati gia ordinati. Oracle in pratica mette i record corrispondenti ad ogni chiave in una lista ordinata.
Riporto un esempio di creazione di Sorted Hash Cluster direttamente dal manuale:

CREATE CLUSTER call_detail_cluster ( 
   telephone_number NUMBER, 
   call_timestamp NUMBER SORT, 
   call_duration NUMBER SORT ) 
  HASHKEYS 10000 HASH IS telephone_number 
  SIZE 256; 

CREATE TABLE call_detail ( 
   telephone_number     NUMBER, 
   call_timestamp       NUMBER   SORT, 
   call_duration        NUMBER   SORT, 
   other_info           VARCHAR2(30) ) 
  CLUSTER call_detail_cluster ( 
   telephone_number, call_timestamp, call_duration );

Single-Table Hash Cluster
Si tratta del caso di cui ho accennato in apertura. Sul manuale vi sono dedicate ben sei righe comprensive del seguente esempio:

CREATE CLUSTER peanut (variety NUMBER)
   SIZE 512 SINGLE TABLE HASHKEYS 500;

Specificando la clausola single table si fa si che a questo cluster non possa essere aggiunta più di una tabella. Immagino che questo tipo di cluster possa essere più efficente di una classica tabella Heap in caso di ricerche per uguaglianza.

Conclusioni
In questi post non mi sono sprecato molto in dettagli sui cluster, in realtà va detta una cosa: in caso di modifiche frequenti ai dati i cluster non sono molto efficenti e richiedono un po’ di analisi per il corretto dimensionamento. Quindi essi sono nella pratica veramente utili solo in casi particolari che personalmente non ho mai incontrato. Anche perchè ritengo che il vantaggio non ripaga il maggior sforzo di amministrazione.

Lascia un commento »

RSS feed for comments on this post. TrackBack URI

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Blog su WordPress.com.
Entries e commenti feeds.

%d blogger cliccano Mi Piace per questo: