Partilhar via


Consulta de vários estilhaços usando ferramentas de banco de dados elástico

Aplica-se a:Banco de Dados SQL do Azure

Descrição geral

Com as ferramentas do Banco de Dados Elástico, você pode criar soluções de banco de dados fragmentado. A consulta de vários estilhaços é usada para tarefas como coleta/ relatório de dados que exigem a execução de uma consulta que se estende por vários fragmentos. (Compare isso com o roteamento dependente de dados, que executa todo o trabalho em um único fragmento.)

  1. Obtenha um RangeShardMap (Java, .NET) ou ListShardMap (Java, .NET) usando o método TryGetRangeShardMap (Java, .NET), o TryGetListShardMap (Java, .NET) ou o método GetShardMap (Java, .NET). Consulte Construindo um ShardMapManager e obtenha um RangeShardMap ou ListShardMap.
  2. Crie um objeto MultiShardConnection (Java, .NET).
  3. Crie um MultiShardStatement ou MultiShardCommand (Java, .NET).
  4. Defina a propriedade CommandText (Java, .NET) como um comando T-SQL.
  5. Execute o comando chamando o método ExecuteQueryAsync ou ExecuteReader (Java, .NET).
  6. Exiba os resultados usando a classe MultiShardResultSet ou MultiShardDataReader (Java, .NET).

Exemplo

O código a seguir ilustra o uso de consultas multi-estilhaços usando um determinado ShardMap chamado 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);
            }
        }
    }
}

Uma diferença fundamental é a construção de conexões multi-estilhaço. Onde SqlConnection opera em um banco de dados individual, o MultiShardConnection usa uma coleção de fragmentos como sua entrada. Preencha a coleção de fragmentos a partir de um mapa de estilhaços. A consulta é então executada na coleção de fragmentos usando a semântica UNION ALL para montar um único resultado geral. Opcionalmente, o nome do fragmento de onde a linha se origina pode ser adicionado à saída usando a propriedade ExecutionOptions no comando.

Observe a chamada para myShardMap.GetShards(). Esse método recupera todos os fragmentos do mapa de estilhaços e fornece uma maneira fácil de executar uma consulta em todos os bancos de dados relevantes. A coleção de fragmentos para uma consulta multi-estilhaços pode ser refinada ainda mais executando uma consulta LINQ sobre a coleção retornada da chamada para myShardMap.GetShards(). Em combinação com a política de resultados parciais, a capacidade atual de consulta de vários estilhaços foi projetada para funcionar bem para dezenas até centenas de fragmentos.

Uma limitação com consultas multi-estilhaços é atualmente a falta de validação para fragmentos e shardlets que são consultados. Enquanto o roteamento dependente de dados verifica se um determinado fragmento faz parte do mapa de estilhaços no momento da consulta, as consultas com vários estilhaços não executam essa verificação. Isso pode levar a consultas de vários estilhaços em execução em bancos de dados que foram removidos do mapa de estilhaços.

Consultas de vários estilhaços e operações de mesclagem dividida

As consultas de vários estilhaços não verificam se os shardlets no banco de dados consultado estão participando de operações de mesclagem dividida em andamento. (Ver Dimensionamento usando a ferramenta de divisão e mesclagem do Banco de Dados Elástico.) Isso pode levar a inconsistências em que as linhas do mesmo shardlet são exibidas para vários bancos de dados na mesma consulta de vários fragmentos. Esteja ciente dessas limitações e considere drenar as operações de mesclagem dividida em andamento e as alterações no mapa de estilhaços ao executar consultas de vários estilhaços.

Recursos adicionais

Ainda não está usando ferramentas de banco de dados elástico? Consulte o nosso Guia de Introdução. Para dúvidas, entre em contato conosco na página de perguntas e respostas da Microsoft para o Banco de dados SQL e para solicitações de recursos, adicione novas ideias ou vote em ideias existentes no fórum de comentários do Banco de dados SQL.