Condividi tramite


Esecuzione di query su più partizioni tramite strumenti di database elastici

Si applica a: Database SQL di Azure

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 RangeShardMap (Java, .NET) or ListShardMap (Java, .NET) con il metodo TryGetRangeShardMap (Java, .NET), TryGetListShardMap (Java, .NET) o GetShardMap (Java, .NET). Vedere Creazione di un oggetto ShardMapManager e Ottenere una mappa RangeShardMap o ListShardMap.
  2. Creare un oggetto MultiShardConnection (Java, .NET).
  3. Creare un oggetto MultiShardStatement o MultiShardCommand (Java, .NET).
  4. Impostare la proprietà CommandText (Java, .NET) su un comando T-SQL.
  5. Eseguire il comando chiamando il metodo ExecuteQueryAsync or ExecuteReader (Java, .NET).
  6. Visualizzare i risultati usando la classe MultiShardResultSet or MultiShardDataReader (Java, .NET).

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 opera 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 Ridimensionamento usando lo strumento di divisione-unione del database elastico.) Ciò 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.

Se non si usano gli strumenti di database elastici, vedere la Guida introduttiva. In caso di domande, usare la pagina Microsoft Q&A per il database SQL, mentre è possibile inserire le richieste di nuove funzionalità, aggiungere nuove idee o votare quelle esistenti nel forum relativo al feedback sul database SQL.