Compartilhar via


Consulta de múltiplos fragmentos usando ferramentas do banco de dados elástico

Aplica-se a: Banco de Dados SQL do Azure

Visão geral

Com as ferramentas de Banco de Dados Elástico, você pode criar soluções de banco de dados fragmentado. Consulta de vários fragmentos é usada para tarefas, como coleta/relatórios de dados que exigem a execução de uma consulta que se estende por vários fragmentos. (Compare-a 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), TryGetListShardMap (Java, .NET) ou GetShardMap (Java, .NET). Consulte Construindo um ShardMapManager e Obter um RangeShardMap ou ListShardMap.
  2. Criar um MultiShardConnection (objeto Java, .NET).
  3. Criar um MultiShardStatement ou MultiShardCommand (Java, .NET).
  4. Defina a propriedade CommandText (Java, .NET) para um comando T-SQL.
  5. Execute o comando chamando o método ExecuteQueryAsync ou ExecuteReader (Java, .NET).
  6. Veja os resultados usando a classe MultiShardResultSet ou MultiShardDataReader (Java, .NET).

Exemplo

O código a seguir ilustra o uso da consulta de vários fragmentos 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 importante é a construção de fragmentos várias conexões. Enquanto a SqlConnection opera em um banco de dados individual, a MultiShardConnection usa uma coleção de fragmentos como sua entrada. Popule a coleção de fragmentos por meio de um mapa do fragmento. Em seguida, a consulta é executada na coleção de fragmentos usando a semântica UNION ALL para montar um único resultado geral. Como alternativa, o nome do fragmento que origina a linha 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 fragmentos 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 de vários fragmento 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 funcionalidade atual de consultas do fragmento vários foi projetado para funcionar bem para dezenas, centenas de fragmentos.

Uma limitação com as consultas de vários fragmentos no momento é a ausência de validação de fragmentos e shardlets são consultados. Enquanto o roteamento dependentes de dados verifica que um determinado fragmento faz parte do mapa do fragmento no momento da consulta, consultas de vários fragmentos não executam essa verificação. Isso pode levar à execução de consultas em vários fragmentos em bancos de dados que já foram removidos do mapa de fragmentos.

Consultas de vários fragmentos e operações de divisão/mesclagem

Consultas de vários fragmentos não verificam se shardlets do banco de dados consultado estão participando de operações de divisão/mesclagem em andamento. (Confira Escalar 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 mostradas para vários bancos de dados na mesma consulta de vários fragmentos. Lembre-se dessas limitações e considere drenar as operações de divisão/mesclagem em execução e alterações no mapa de fragmentos ao executar consultas de vários fragmentos.

Ainda não está usando ferramentas de banco de dados elástico? Confira nosso Guia de Introdução. Em caso de dúvidas, entre em contato conosco na página de perguntas do Microsoft Q&A para Banco de Dados SQL e, para solicitações de recursos, adicione novas ideias ou vote em ideias existentes no Fórum de comentários sobre o Banco de Dados SQL.