Több szegmenses lekérdezés rugalmas adatbázis-eszközökkel

A következőre vonatkozik: Azure SQL Database

Áttekintés

Az Elastic Database-eszközökkel horizontális adatbázis-megoldásokat hozhat létre. A több szegmenses lekérdezés olyan feladatokhoz használható, mint az adatgyűjtés/jelentéskészítés, amelyek több szegmensre kiterjedő lekérdezés futtatását igénylik. (Kontraszt ez az adatfüggő útválasztással, amely minden munkát egyetlen szegmensen hajt végre.)

  1. RangeShardMap (Java, .NET) vagy ListShardMap (Java, .NET) lekérése a TryGetRangeShardMap (Java, .NET), a TryGetListShardMap (Java, .NET) vagy a GetShardMap (Java, .NET) metódussal. Lásd: ShardMapManager létrehozása és RangeShardMap vagy ListShardMap lekérése.
  2. MultiShard Csatlakozás ion (Java, .NET) objektum létrehozása.
  3. MultiShardStatement vagy MultiShardCommand (Java, .NET) létrehozása.
  4. Állítsa a CommandText tulajdonságot (Java, .NET) T-SQL-parancsra.
  5. Hajtsa végre a parancsot az ExecuteQueryAsync vagy az ExecuteReader (Java, .NET) metódus meghívásával.
  6. Az eredmények megtekintése a MultiShardResultSet vagy a MultiShardDataReader (Java, .NET) osztály használatával.

Példa

Az alábbi kód bemutatja a több szegmenses lekérdezés használatát egy adott myShardMap nevű ShardMap használatával.

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);
            }
        }
    }
}

A fő különbség a több szegmensből álló kapcsolatok kiépítése. Ahol az SQL Csatlakozás ion egy önálló adatbázisban működik, a MultiShard Csatlakozás ion a szegmensek gyűjteményét veszi bemenetként. Töltse ki a szegmensek gyűjteményét egy szegmenstérképről. Ezt követően a rendszer végrehajtja a lekérdezést a szegmensek gyűjteményében az UNION ALL szemantikával egyetlen összesített eredmény összeállításához. Opcionálisan annak a szegmensnek a neve, ahonnan a sor származik, hozzáadható a kimenethez a parancs ExecutionOptions tulajdonságával.

Figyelje meg a myShardMap.GetShards() hívását. Ez a metódus lekéri az összes szegmenst a szegmenstérképről, és egyszerű módot kínál a lekérdezések futtatására az összes releváns adatbázison. A több szegmenses lekérdezés szegmenseinek gyűjteménye tovább finomítható egy LINQ-lekérdezés végrehajtásával a myShardMap.GetShards() hívásából visszaadott gyűjteményen keresztül. A részleges találati szabályzattal együtt a több szegmenses lekérdezések jelenlegi képessége úgy lett kialakítva, hogy több tíz vagy akár több száz szegmens számára is jól működjön.

A több szegmenses lekérdezésre vonatkozó korlátozás jelenleg a lekérdezett szegmensek és szegmensek ellenőrzésének hiánya. Bár az adatfüggő útválasztás ellenőrzi, hogy egy adott szegmens része-e a szegmenstérképnek a lekérdezéskor, a több szegmenses lekérdezések nem végzik el ezt az ellenőrzést. Ez több szegmenses lekérdezésekhez vezethet, amelyek a szegmenstérképről eltávolított adatbázisokon futnak.

Több szegmenses lekérdezések és egyesítési műveletek

A több szegmenses lekérdezések nem ellenőrzik, hogy a lekérdezett adatbázis szegmensei részt vesznek-e a folyamatban lévő felosztási egyesítési műveletekben. (Lásd: Skálázás az Elastic Database felosztási egyesítési eszközével.) Ez inkonzisztenciákhoz vezethet, amikor ugyanazon szegmensből származó sorok ugyanabban a több szegmenses lekérdezésben több adatbázishoz is megjelennek. Vegye figyelembe ezeket a korlátozásokat, és fontolja meg a folyamatos egyesítési műveletek és a szegmenstérkép módosításainak kiürítését több szegmenses lekérdezések végrehajtása közben.

További információforrások

Még nem használ rugalmas adatbázis-eszközöket? Tekintse meg az első lépések útmutatót. Ha kérdése van, lépjen kapcsolatba velünk az SQL Database-hez készült Microsoft Q&A kérdésoldalon, és a funkciókérésekért, adjon hozzá új ötleteket, vagy szavazzon a meglévő ötletekre az SQL Database visszajelzési fórumában.