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 o Scale out com o Banco de Dados SQL do Azure, 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 TryGetRangeShardMap método (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 o CommandText property (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 MultiShardResultSet classe ou MultiShardDataReader (Java, .NET).

Exemplo

O código a seguir ilustra o uso de consultas 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. Quando SqlConnection opera em um banco de dados individual, o MultiShardConnection utiliza uma coleção de fragmentos como 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 UNION ALL semântica para montar um único resultado geral. Opcionalmente, o nome do fragmento do qual a linha se origina pode ser adicionado à saída usando a ExecutionOptions propriedade 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. (Consulte Mover dados entre bancos de dados de nuvem expandidos.) Isso pode resultar em inconsistências em que linhas do mesmo shardlet são exibidas para diversos 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.