Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:Azure SQL Database
Přehled
Pomocí škálování s Azure SQL Database můžete vytvářet dělená databázová řešení. Dotazování s více horizontálními oddíly se používá pro úlohy, jako je shromažďování dat nebo generování sestav, které vyžadují spuštění dotazu, který se roztáhne napříč několika horizontálními oddíly. (Na rozdíl od směrování závislého na datech, které provádí veškerou práci na jednom horizontálním oddílu.)
- Získejte
RangeShardMap
(Java, .NET) neboListShardMap
(Java, .NET) pomocíTryGetRangeShardMap
metody (Java, .NET),TryGetListShardMap
(Java, .NET) neboGetShardMap
(Java, .NET). Viz Vytvoření objektu ShardMapManager a získání RangeShardMap nebo ListShardMap. - Vytvořte
MultiShardConnection
objekt (Java, .NET). - Vytvořte
MultiShardStatement
neboMultiShardCommand
(Java, .NET) -
CommandText property
Nastavte (Java, .NET) na příkaz T-SQL. - Spusťte příkaz voláním metody
ExecuteQueryAsync
neboExecuteReader
(Java, .NET). - Prohlédněte si výsledky pomocí
MultiShardResultSet
třídy neboMultiShardDataReader
(Java, .NET).
Příklad
Následující kód znázorňuje použití dotazování více fragmentů pomocí daného ShardMap nazvaného 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);
}
}
}
}
Klíčovým rozdílem je konstrukce více horizontálních připojení. Kde SqlConnection
pracuje s jednotlivou databází, MultiShardConnection
přebírá jako vstup kolekci shardů. Naplňte kolekci horizontálních oddílů z mapy horizontálních oddílů. Dotaz se pak provede na kolekci shardů pomocí sémantiky UNION ALL
k sestavení jednoho celkového výsledku. Volitelně lze do výstupu přidat název fragmentu, ze kterého řádek pochází, pomocí vlastnosti ExecutionOptions
při spuštění příkazu.
Všimněte si volání myShardMap.GetShards()
. Tato metoda načte všechny horizontální oddíly z mapy horizontálních oddílů a poskytuje snadný způsob, jak spustit dotaz napříč všemi relevantními databázemi. Kolekci shardů pro dotaz na více shardů je možné dále upřesnit provedením dotazu LINQ na kolekci, která je vrácena z volání myShardMap.GetShards()
. V kombinaci se zásadami částečných výsledků byla aktuální funkce dotazování s více horizontálními oddíly navržena tak, aby dobře fungovala pro desítky až stovky horizontálních oddílů.
Omezení s dotazováním s více horizontálními oddíly je v současné době nedostatečné ověřování horizontálních oddílů a shardletů, které se dotazují. I když směrování závislé na datech ověřuje, že daný horizontální oddíl je součástí mapy horizontálních oddílů v době dotazování, dotazy s více horizontálními oddíly tuto kontrolu neprovádějí. To může vést k více horizontálním dotazům spuštěným v databázích, které byly odebrány z mapy horizontálních oddílů.
Dotazy s více horizontálními oddíly a operace rozděleného sloučení
Dotazy s více horizontálními oddíly neověřují, jestli se shardlety v dotazované databázi účastní probíhajících operací dělení a slučování. (Viz Přesun dat mezi škálovanými cloudovými databázemi.) To může vést k nekonzistencím, kdy se řádky ze stejného shardletu zobrazují pro více databází ve stejném dotazu na několik shardů. Mějte na paměti tato omezení a zvažte vyprázdnění probíhajících operací dělení a změn na mapě horizontálních oddílů při provádění dotazů s více horizontálními oddíly.
Související obsah
Ještě nepoužíváte nástroje elastické databáze? Podívejte se na naši příručku Začínáme. Pokud máte dotazy, kontaktujte nás na stránce otázek Microsoft Q&A pro SLUŽBU SQL Database a žádosti o funkce, přidejte nové nápady nebo hlasujte pro stávající nápady ve fóru pro zpětnou vazbu ke službě SQL Database.