Partilhar via


Consulta de múltiplos fragmentos usando ferramentas de bases de dados elásticas

Aplica-se a:Banco de Dados SQL do Azure

Visão geral

Com o Ampliar com o Banco de Dados SQL do Azure, pode criar soluções de bases de dados particionadas. A consulta de múltiplos fragmentos é usada para tarefas como recolha/relatórios que exigem a execução de uma consulta que abrange 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 TryGetRangeShardMap (Java, .NET), o TryGetListShardMap (Java, .NET) ou o GetShardMap (Java, .NET). Consulte Construindo um ShardMapManager e obtenha um RangeShardMap ou ListShardMap.
  2. Crie um MultiShardConnection objeto (Java, .NET).
  3. Crie um MultiShardStatement ou MultiShardCommand (Java, .NET).
  4. Defina o CommandText property (Java, .NET) como um comando T-SQL.
  5. Execute o comando chamando o ExecuteQueryAsync ou o ExecuteReader método (Java, .NET).
  6. Visualize os resultados usando a classe MultiShardResultSet ou MultiShardDataReader (Java, .NET).

Exemplo

O código a seguir ilustra o uso de consulta multi-fragmentos usando um ShardMap dado 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-fragmento. Quando SqlConnection opera em um banco de dados individual, o MultiShardConnection toma 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 UNION ALL semântica para montar um único resultado geral. Opcionalmente, o nome do fragmento de onde 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 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 de múltiplos fragmentos pode ser ainda mais refinada ao executar 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 fragmentos foi projetada para funcionar bem para dezenas a centenas de fragmentos.

Uma limitação das consultas multi-parte é a falta de validação para shards e shardlets que são consultados atualmente. 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 multi-fragmento em execução em bases de dados que foram removidas do mapa de fragmentos.

Consultas multi-fragmentos e operações de divisão e fusão

As consultas de múltiplos fragmentos não verificam se os shardlets no banco de dados em consulta estão a participar de operações de divisão e fusão em curso. (Consulte Como mover dados entre bases de dados distribuídas na nuvem.) Isso pode causar inconsistências onde as linhas do mesmo shardlet aparecem em vários bancos de dados dentro da mesma consulta de vários fragmentos. Esteja ciente dessas limitações e considere encerrar as operações de mesclagem divididas em andamento e as alterações no mapa de fragmentos ao executar consultas em vários fragmentos.

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