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.)
- 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.
- MultiShard Csatlakozás ion (Java, .NET) objektum létrehozása.
- MultiShardStatement vagy MultiShardCommand (Java, .NET) létrehozása.
- Állítsa a CommandText tulajdonságot (Java, .NET) T-SQL-parancsra.
- Hajtsa végre a parancsot az ExecuteQueryAsync vagy az ExecuteReader (Java, .NET) metódus meghívásával.
- 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.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: