Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für::Azure SQL-Datenbank
Übersicht
Mit der horizontalen Skalierung mit Azure SQL Database können Sie Sharded-Datenbanklösungen erstellen. Abfragen von mehreren Shards wird für Aufgaben wie Datensammlung/Berichterstellung verwendet, für die das Ausführen einer Abfrage über mehrere Shards erforderlich ist. (Vergleichen Sie dies mit dem datenabhängigen Routing, bei dem die gesamte Arbeit in einem einzigen Shard durchgeführt wird.)
- Rufen Sie eine
RangeShardMap(Java, .NET) oderListShardMap(Java, .NET) mit derTryGetRangeShardMap(Java, .NET), derTryGetListShardMap(Java, .NET) oder derGetShardMap(Java, .NET) Methode ab. Weitere Informationen finden Sie unter Erstellen eines ShardMapManager und Abrufen einer RangeShardMap oder ListShardMap. - Erstellen Sie ein
MultiShardConnection(Java, .NET)-Objekt. - Erstellen sie ein
MultiShardStatementoderMultiShardCommand(Java, .NET). - Legen Sie den
CommandText propertyBefehl (Java, .NET) auf einen T-SQL-Befehl fest. - Führen Sie den Befehl aus, indem Sie die
ExecuteQueryAsyncMethode oderExecuteReader(Java, .NET) aufrufen. - Zeigen Sie die Ergebnisse mithilfe der
MultiShardResultSetKlasse oderMultiShardDataReaderKlasse (Java, .NET) an.
Beispiel
Der folgende Code veranschaulicht die Verwendung von Multi-Shard-Abfragen mit einem bestimmten ShardMap-NamenmyShardMap.
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);
}
}
}
}
Ein wichtiger Unterschied ist die Erstellung von Verbindungen mit mehreren Shards. Wenn SqlConnection auf einer einzelnen Datenbank arbeitet, nimmt MultiShardConnection eine Sammlung von Shards als Eingabe. Füllen Sie die Sammlung von Shards aus einer Shard-Map auf. Die Abfrage wird dann auf der Sammlung von Fragmenten unter Verwendung der UNION ALL-Semantik ausgeführt, um ein einzelnes Gesamtergebnis zu erstellen. Optional kann der Name des Shards, aus dem die Zeile stammt, der Ausgabe mithilfe der ExecutionOptions Eigenschaft "on command" hinzugefügt werden.
Beachten Sie, dass myShardMap.GetShards() aufgerufen wird. Diese Methode ruft alle Shards aus der Shard-Zuordnung ab und stellt damit eine einfache Möglichkeit zum Ausführen einer Abfrage an alle Datenbanken bereit. Die Sammlung von Shards für eine Multi-Shard-Abfrage kann weiter verfeinert werden, indem Sie eine LINQ-Abfrage über die Collection durchführen, die durch den Aufruf von myShardMap.GetShards() zurückgegeben wird. In Kombination mit der Teilergebnisrichtlinie wurde die aktuelle Funktion bei der Abfrage mehrerer Shards so entwickelt, dass diese gut mit bis zu Hunderten von Shards funktioniert.
Eine Einschränkung von Abfragen mehrerer Shards ist derzeit die fehlende Überprüfung von Shards und Shardlets, die abgefragt werden. Während beim datenabhängigem Routing überprüft wird, dass ob ein bestimmtes Shard Teil der Shard-Map zum Zeitpunkt der Abfrage ist, führen Abfragen mehrerer Shards dieses Überprüfung nicht durch. Dies kann dazu führen, dass Abfragen mehrerer Shards auf Datenbanken ausgeführt werden, die aus der Shard-Zuordnung entfernt wurden.
Abfragen mehrerer Shards und Aufteilungs-/Zusammenführungsvorgänge
Beim Abfragen mehrerer Shards wird nicht überprüft, ob Shardlets im abgefragten Shard an laufenden Aufteilungs-/Zusammenführungsvorgängen teilnehmen. (Siehe Verschieben von Daten zwischen skalierten Clouddatenbanken.) Dies kann zu Inkonsistenzen führen, bei denen Zeilen aus demselben Shardlet für mehrere Datenbanken in derselben Mehrshardabfrage angezeigt werden. Beachten Sie diese Einschränkungen, und ziehen Sie beim Ausführen von Abfragen mehrerer Shards einen Ausgleich laufender Aufteilungs-/Zusammenführungsvorgänge und Änderungen an der Shard-Zuordnung in Betracht.
Zugehöriger Inhalt
Verwenden Sie noch keine elastischen Datenbanktools? Sehen Sie sich unseren Leitfaden zu den ersten Schritten an. Wenden Sie sich bei Fragen auf der Frageseite von Microsoft Q&A für SQL-Datenbank und für Featureanforderungen an uns, fügen Sie neue Ideen hinzu, oder stimmen Sie im SQL-Datenbank-Feedbackforumüber vorhandene Ideen ab.