Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à :Azure SQL Database
Vue d’ensemble
Avec scale-out avec Azure SQL Database, vous pouvez créer des solutions de base de données partitionnées. Requête sur plusieurs partitions est utilisée pour des tâches telles que la collecte de données / la création de rapports qui nécessitent l'exécution d'une requête qui s'étend sur plusieurs partitions. (Comparez cela au routage dépendant des donnéesqui effectue tout le travail sur une partition unique.)
- Obtenez un
RangeShardMap(Java, .NET) ouListShardMap(Java, .NET) à l’aide de laTryGetRangeShardMapméthode (Java, .NET),TryGetListShardMap(Java, .NET) ouGetShardMap(Java, .NET). Consultez les rubriques Construction d’un objet ShardMapManager et Obtenir un objet RangeShardMap ou ListShardMap. - Créez un
MultiShardConnectionobjet (Java, .NET). - Créez un
MultiShardStatementouMultiShardCommand(Java, .NET). - Définissez le
CommandText propertyen tant que commande T-SQL (Java, .NET). - Exécutez la commande en appelant la
ExecuteQueryAsyncméthode ouExecuteReader(Java, .NET). - Affichez les résultats à l’aide de la
MultiShardResultSetclasse ouMultiShardDataReader(Java, .NET).
Exemple
Le code suivant illustre l’utilisation de requêtes sur plusieurs partitions à l’aide d’un ShardMap spécifié nommé 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);
}
}
}
}
La principale différence est la construction de connexions à plusieurs partitions. Lorsqu’elle SqlConnection fonctionne sur une base de données individuelle, la MultiShardConnection prend une collection de fragments comme entrée. Remplissez la collection de partitions à partir d'une carte de partitions. La requête est ensuite exécutée sur la collection de fragments en utilisant UNION ALL la sémantique pour assembler un résultat global unique. Si vous le souhaitez, le nom de la partition à partir de laquelle la ligne provient peut être ajouté à la sortie à l’aide de la ExecutionOptions propriété sur la commande.
Notez l'appel à myShardMap.GetShards() . Cette méthode récupère toutes les partitions de la carte de partitions et offre un moyen facile d’exécuter une requête sur toutes les bases de données concernées. La collecte des fragments pour une requête multi-fragments peut être affinée en effectuant une requête LINQ sur la collection renvoyée par l’appel à myShardMap.GetShards(). En combinaison avec la stratégie de résultats partiels, la capacité actuelle de l'interrogation de plusieurs partitions a été conçue pour fonctionner correctement avec des dizaines, voire des centaines, de partitions.
Une limitation de l'interrogation de plusieurs partitions est actuellement le manque de validation des partitions et shardlets interrogés. Tandis que le routage dépendant des données vérifie qu'une partition donnée fait partie de la carte de partitions au moment de l'interrogation, les requêtes sur plusieurs partitions n'effectuent pas cette vérification. De ce fait, les requêtes sur plusieurs partitions peuvent s’exécuter sur des bases de données qui ont été supprimées de la carte de partitions.
Requêtes sur plusieurs partitions et opérations de fractionnement et de fusion
Les requêtes sur plusieurs partitions ne vérifient pas si les shardlets de la base de données interrogée participent à des opérations de fractionnement et de fusion en cours. (Voir Déplacement de données entre des bases de données cloud éclatées.) Cela peut entraîner des incohérences où les lignes du même fragment s'affichent pour plusieurs bases de données dans la même requête multi-fragments. Tenez compte de ces limitations et envisagez de purger les opérations de fractionnement et de fusion en cours et les modifications apportées à la carte de partitions lors de l’exécution de requêtes sur plusieurs partitions.
Contenu connexe
Vous n’utilisez pas encore d’outils de base de données élastique ? Consultez notre Guide de prise en main. Pour toute question, contactez-nous par le biais de la page de questions Microsoft Q&A sur SQL Database et, pour vos demandes de fonctionnalités, ajoutez de nouvelles idées ou votez pour les idées existantes sur le forum de commentaires SQL Database.