L'indicizzazione in cluster è ora necessaria: perché?


9

In precedenza, per me c'erano dibattiti / discussioni non conclusivi sull'opportunità (sempre) di coinvolgere / evitare gli indici raggruppati.

Bene, ho capito che a volte devono essere usati con scopi e contesto + specifici.

Requisito dell'indice cluster del database SQL Azure :

"SQL Azure non supporta tabelle senza indici cluster. Una tabella deve avere un indice cluster. Se una tabella viene creata senza un vincolo cluster, è necessario creare un indice cluster prima che un'operazione di inserimento sia consentita sulla tabella"

non rientra nelle conclusioni, nella logica e nelle spiegazioni precedenti.

Qual è la logica, che mi è sfuggita dalle spiegazioni precedenti, di imporre rigidamente l'ubiquità di indici raggruppati senza eccezioni?


4
SQL Azure è diverso da SQL Server come lo conosci. Azure è un database distribuito che archivia i tuoi dati su più di una macchina fisica. Ecco perchè.

1
Si noti che nella v12 del servizio database SQL di Azure, è possibile che sia presente una tabella senza un indice cluster.
Troy Hunt,

Risposte:


11

Leggi in SQL Azure :

SQL Azure fornisce database logici per l'archiviazione dei dati delle applicazioni. In realtà, i dati di ciascun abbonato vengono effettivamente archiviati più volte, replicati su tre database SQL Server distribuiti su tre server fisici in un singolo data center. Molti abbonati possono condividere lo stesso database fisico.

Sono necessarie chiavi cluster in modo che le tre repliche dei dati possano essere sincronizzate. Senza chiave, è impossibile sapere quali righe sono state aggiornate. Gli heap (tabelle con indice cluster) hanno solo 'chiavi' fisiche (fileid: pageid: slot) e poiché le 3 repliche del database logico condividono il database fisico con altri database logici, l'indirizzo fisico su un server non ha alcun significato sull'altro repliche, quindi non è stato possibile replicare un mucchio.


Una chiave (logica) non deve risiedere in un indice cluster. Potrebbe essere non cluster. Forse il vero motivo per cui è richiesto un indice cluster (presumibilmente unico?) È che gli heap usano RID, mentre gli indici cluster univoci no. È quello che volevi dire?
nvogel,

3
Dal documento collegato: "La tecnologia di replica e disponibilità elevata sottostante in SQL Azure si basa sulla replica di file B-Tree.". Pertanto, anche se un heap avesse una chiave NC, è possibile replicare solo l'NC, ma non l'heap stesso.
Remus Rusanu,


1

Azure è un sistema distribuito basato su cloud su server remoti. I dati saranno probabilmente archiviati su più unità / server e sarebbe estremamente inefficiente farlo su un heap (poiché il sistema dovrà sapere quale macchina controllare e senza un indice cluster questa è un'operazione che richiede molte risorse) .

L'indice cluster fornisce una ricerca per tutte le righe e tutti gli altri indici sulla tabella, quindi senza uno ogni operazione in azzurro sarebbe una scansione della tabella su più macchine.


2
Questo potrebbe essere vero, ma al momento non lo è. Leggi l'articolo che ho collegato, spiega come funziona il routing delle richieste e perché le tue query vengono eseguite sempre su una singola casella e non si estendono mai su più server. Vale a dire. non c'è sharding.
Remus Rusanu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.