Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:Azure SQL Database
Overzicht
Met Azure SQL Database kunt u opschalen en gesegmenteerde 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.)
- Haal een
RangeShardMap(Java, .NET) ofListShardMap(Java, .NET) op met behulp van deTryGetRangeShardMapmethode (Java, .NET), deTryGetListShardMap(Java, .NET) of deGetShardMapmethode (Java, .NET). Bekijk Een ShardMapManager construeren en een RangeShardMap of ListShardMap verkrijgen. - Maak een
MultiShardConnection(Java-, .NET)-object. - Een
MultiShardStatementofMultiShardCommandmaken (Java, .NET). - Stel de
CommandText propertyopdracht (Java, .NET) in op een T-SQL-opdracht. - Voer de opdracht uit door de
ExecuteQueryAsync- ofExecuteReader-methode (Java, .NET) aan te roepen. - Bekijk de resultaten met behulp van de
MultiShardResultSetofMultiShardDataReaderklasse (Java, .NET).
Voorbeeld
De volgende code illustreert het gebruik van multi-shardquery's 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 multishard-verbindingen. Waar SqlConnection werkt op een afzonderlijke database, neemt de MultiShardConnection een verzameling shards als zijn invoer. Vul de verzameling shards vanuit een shardkaart 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 ExecutionOptions eigenschap in de opdracht.
Noteer de aanroep naar myShardMap.GetShards(). Deze methode haalt alle shards op uit de shard map 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 van het uitvoeren van query's over meerdere shards is momenteel het ontbreken van validatie voor de shards en shardlets die worden opgevraagd. Hoewel gegevensafhankelijke routering controleert of een bepaalde shard deel uitmaakt van de shard-toewijzing op het moment van opvragen, voeren multi-shard query's deze controle niet uit. Dit kan leiden tot query's over meerdere shards die worden uitgevoerd op databases die uit de shard map zijn verwijderd.
Queries met meerdere shards en splits- en samenvoegbewerkingen
Query's met meerdere shards controleren niet of shardlets in de opgevraagde database deelnemen aan lopende bewerkingen voor splitsen en samenvoegen. (Zie Gegevens verplaatsen tussen uitgeschaalde clouddatabases.) 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 splits-samenvoegbewerkingen en wijzigingen aan de shard-toewijzing af te sluiten terwijl u query's met meerdere shards uitvoert.
Verwante inhoud
Gebruikt u nog geen hulpprogramma's voor elastische databases? Bekijk onze Aan de slag-handleiding. 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 SQL Database-feedbackforum.