Sdílet prostřednictvím


Dotazování s více horizontálními oddíly pomocí nástrojů elastické databáze

Platí pro: Azure SQL Database

Přehled

Pomocí nástrojů elastické databáze můžete vytvářet horizontálně 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.)

  1. Získejte RangeShardMap (Java, .NET) nebo ListShardMap (Java, .NET) pomocí metody TryGetRangeShardMap (Java, .NET), TryGetListShardMap (Java, .NET) nebo GetShardMap (Java, .NET). Viz Vytvoření objektu ShardMapManager a získání RangeShardMap nebo ListShardMap.
  2. Vytvořte objekt MultiShardConnection (Java, .NET).
  3. Vytvořte MultiShardStatement nebo MultiShardCommand (Java, .NET).
  4. Nastavte vlastnost CommandText (Java, .NET) na příkaz T-SQL.
  5. Spusťte příkaz voláním ExecuteQueryAsync nebo ExecuteReader (Java, .NET) metoda.
  6. Prohlédněte si výsledky pomocí třídy MultiShardResultSet nebo MultiShardDataReader (Java, .NET).

Příklad

Následující kód ukazuje použití dotazování s více horizontálními oddíly pomocí daného objektu ShardMap s názvem 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 jednotlivými databázemi, multiShardConnection přebírá jako vstup kolekci horizontálních oddílů . Naplňte kolekci horizontálních oddílů z mapy horizontálních oddílů. Dotaz se pak provede v kolekci horizontálních oddílů pomocí sémantiky UNION ALL k sestavení jednoho celkového výsledku. Volitelně můžete přidat název horizontálního oddílu, ze kterého řádek pochází, do výstupu pomocí vlastnosti ExecutionOptions v 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 horizontálních oddílů pro dotaz s více horizontálními oddíly je možné dále upřesnit provedením dotazu LINQ pro kolekci vrácenou 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 Škálování pomocí nástroje Elastic Database split-merge.) To může vést k nekonzistence, kdy se řádky ze stejného shardletu zobrazují pro více databází ve stejném dotazu s více horizontálními oddíly. 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.

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.