Esecuzione di query su più partizioni

Panoramica

Con gli strumenti dei database elastici è possibile creare soluzioni di database partizionati. La funzionalità di query su più partizioni viene usata per attività che richiedono l'esecuzione di una query su più partizioni, ad esempio la raccolta o la creazione di report sui dati, a differenza del routing dipendente dai dati, che consente di eseguire tutto il lavoro su una singola partizione.

  1. Ottenere una mappa RangeShardMap o ListShardMap con il metodo TryGetRangeShardMap, TryGetListShardMap o GetShardMap. Vedere Creazione di un oggetto ShardMapManager e Ottenere una mappa RangeShardMap o ListShardMap.
  2. Creare un oggetto MultiShardConnection.
  3. Creare un MultiShardCommand.
  4. Impostare la proprietà CommandText su un comando T-SQL.
  5. Eseguire il comando chiamando il metodo ExecuteReader.
  6. Vedere i risultati usando la classe MultiShardDataReader.

Esempio

Il codice seguente illustra l'uso delle query su più partizioni mediante uno specifico oggetto ShardMap denominato myShardMap.

using (MultiShardConnection conn = new MultiShardConnection( 
                                    myShardMap.GetShards(), 
                                    myShardConnectionString) 
      ) 
{ 
using (MultiShardCommand cmd = conn.CreateCommand())
       { 
        cmd.CommandText = "SELECT c1, c2, c3 FROM ShardedTable"; 
        cmd.CommandType = CommandType.Text; 
        cmd.ExecutionOptions = MultiShardExecutionOptions.IncludeShardNameColumn; 
        cmd.ExecutionPolicy = MultiShardExecutionPolicy.PartialResults; 

        using (MultiShardDataReader sdr = cmd.ExecuteReader()) 
            { 
                while (sdr.Read())
                    { 
                        var c1Field = sdr.GetString(0); 
                        var c2Field = sdr.GetFieldValue<int>(1); 
                        var c3Field = sdr.GetFieldValue<Int64>(2);
                    } 
             } 
       } 
} 

Un'importante differenza risiede nella costruzione delle connessioni a più partizioni. Mentre SqlConnection agisce su un singolo database, MultiShardConnection accetta come input una raccolta di partizioni. Popolare la raccolta di partizioni da una mappa partizioni. La query viene quindi eseguita sulla raccolta di partizioni usando la semantica di UNION ALL per assemblare un unico risultato complessivo. Facoltativamente, è possibile aggiungere all'output il nome della partizione di origine della riga usando la proprietà ExecutionOptions nel comando.

Notare la chiamata a myShardMap.GetShards(). Questo metodo recupera tutte le partizioni dalla mappa partizioni e fornisce un metodo semplice per eseguire una query su tutti i database rilevanti. La raccolta di partizioni per una query su più partizioni può essere ulteriormente perfezionata eseguendo una query LINQ sulla raccolta restituita dalla chiamata a myShardMap.GetShards(). In combinazione con i criteri sui risultati parziali, la funzionalità corrente di query su più partizioni è stata progettata per supportare correttamente da decine fino a centinaia di partizioni.

Un'attuale limitazione delle query su più partizioni è la mancanza di convalida delle partizioni e degli shardlet interrogati. Mentre il routing dipendente dai dati verifica che una determinata partizione faccia parte della mappa partizioni al momento dell'esecuzione delle query, le query su più partizioni non eseguono questo controllo. Questo può determinare l'esecuzione di query su più partizioni in database che sono stati rimossi dalla mappa partizioni.

Query su più partizioni e operazioni di suddivisione e unione

Le query su più partizioni non verificano se gli shardlet presenti nel database interrogato sono oggetto di operazioni di divisione/unione in corso. Vedere Scaling using the Elastic Database split-merge tool (Ridimensionamento con lo strumento di divisione e unione del database elastico). Questo può causare incoerenze se righe dello stesso shardlet compaiono per più database nella stessa query su più partizioni. Tenere presente queste limitazioni e completare le operazioni di suddivisione-unione in corso e le modifiche alla mappa partizioni prima dell'esecuzione di query su più partizioni.

Risorse aggiuntive

Se non si usano gli strumenti di database elastici, vedere la Guida introduttiva. Se ci sono domande, è possibile visitare il forum sul database SQL mentre è possibile inserire le richieste di nuove funzionalità nel forum relativo a commenti e suggerimenti sul database SQL.

Vedere anche

Classi e metodi System.Data.SqlClient.

Gestire le partizioni con la libreria client dei database elastici. Comprende uno spazio dei nomi denominato Microsoft.Azure.SqlDatabase.ElasticScale.Query, che consente di eseguire query su più partizioni usando una singola query con un unico risultato. Fornisce l'astrazione delle query su una raccolta di partizioni, nonché criteri di esecuzione alternativi, in particolare risultati parziali, per la gestione degli errori quando si eseguono query su molte partizioni.