Query's uitvoeren met meerdere shards met hulpprogramma's voor elastische databases

Van toepassing op: Azure SQL Database

Overzicht

Met de hulpprogramma's voor Elastic Database kunt u shard-databaseoplossingen maken. Query's met meerdere shards worden gebruikt voor taken zoals het verzamelen/rapporteren van gegevens waarvoor een query moet worden uitgevoerd die zich uitsprekt over verschillende shards. (Vergelijk dit met gegevensafhankelijke routering, waarmee alle werkzaamheden op één shard worden uitgevoerd.)

  1. Haal een RangeShardMap (Java, .NET) of ListShardMap (Java, .NET) op met behulp van de TryGetRangeShardMap (Java, .NET), de TryGetListShardMap (Java, .NET) of de methode GetShardMap (Java, .NET). Zie Een ShardMapManager maken en een RangeShardMap of ListShardMap ophalen.
  2. Maak een MultiShard Verbinding maken ion-object (Java, .NET).
  3. Maak een MultiShardStatement of MultiShardCommand (Java, .NET).
  4. Stel de eigenschap CommandText (Java, .NET) in op een T-SQL-opdracht.
  5. Voer de opdracht uit door de methode ExecuteQueryAsync of ExecuteReader (Java, .NET) aan te roepen.
  6. Bekijk de resultaten met behulp van de klasse MultiShardResultSet of MultiShardDataReader (Java, .NET).

Opmerking

De volgende code illustreert het gebruik van query's voor meerdere shards met behulp van een bepaalde ShardMap met de naam 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);
            }
        }
    }
}

Een belangrijk verschil is de constructie van multi-shardverbindingen. Waar Sql Verbinding maken ion op een afzonderlijke database werkt, neemt de MultiShard Verbinding maken ion een verzameling shards als invoer. Vul de verzameling shards uit een shard-toewijzing in. De query wordt vervolgens uitgevoerd op de verzameling shards met behulp van UNION ALL-semantiek om één algemeen resultaat samen te stellen. Desgewenst kan de naam van de shard waaruit de rij afkomstig is, worden toegevoegd aan de uitvoer met behulp van de eigenschap ExecutionOptions bij de opdracht.

Noteer de aanroep naar myShardMap.GetShards(). Deze methode haalt alle shards op uit de shard-toewijzing en biedt een eenvoudige manier om een query uit te voeren voor alle relevante databases. De verzameling shards voor een multi-shardquery kan verder worden verfijnd door een LINQ-query uit te voeren op de verzameling die wordt geretourneerd door de aanroep naar myShardMap.GetShards(). In combinatie met het beleid voor gedeeltelijke resultaten is de huidige mogelijkheid in query's met meerdere shards ontworpen om goed te werken voor tientallen tot honderden shards.

Een beperking met query's met meerdere shards is momenteel het ontbreken van validatie voor shards en shardlets die worden opgevraagd. Hoewel gegevensafhankelijke routering controleert of een bepaalde shard deel uitmaakt van de shard-toewijzing op het moment van het uitvoeren van query's, voeren multi-shardquery's deze controle niet uit. Dit kan leiden tot multi-shardquery's die worden uitgevoerd op databases die zijn verwijderd uit de shard-toewijzing.

Query's met meerdere shards en bewerkingen voor splitsen en samenvoegen

Query's met meerdere shards controleren niet of shardlets in de opgevraagde database deelnemen aan lopende bewerkingen voor splitsen en samenvoegen. (Zie Schalen met het hulpprogramma split-merge van Elastic Database.) Dit kan leiden tot inconsistenties waarbij rijen uit dezelfde shardlet worden weergegeven voor meerdere databases in dezelfde multi-shardquery. Houd rekening met deze beperkingen en overweeg lopende bewerkingen voor splitsen samenvoegen en wijzigingen in de shard-toewijzing uit te voeren tijdens het uitvoeren van query's met meerdere shards.

Aanvullende bronnen

Gebruikt u nog geen hulpprogramma's voor elastische databases? Bekijk de handleiding Aan de slag. Neem voor vragen contact met ons op op de microsoft Q&A-vragenpagina voor SQL Database en voor functieaanvragen, voeg nieuwe ideeën toe of stem op bestaande ideeën in het feedbackforum van SQL Database.