Par rapport à une base de données en mode DRDS, une base de données en mode AUTO propose de nouvelles fonctionnalités telles que le partitionnement automatique, la division des données actives, la planification des partitions et la gestion du Time to Live (TTL). Elle offre également des optimisations significatives de l'expérience distribuée dans des domaines comme la gestion des partitions et la modification du schéma de partitionnement.
Le tableau suivant compare les principales fonctionnalités des bases de données en mode AUTO et en mode DRDS.
|
Fonctionnalité |
Mode AUTO |
Mode DRDS |
|
|
Distribution transparente |
Partitionnement par clé primaire par défaut |
Pris en charge. Si vous ne définissez pas de schéma de partitionnement lors de la création d'une table, PolarDB-X partitionne automatiquement la table selon sa clé primaire. |
Non pris en charge. |
|
Index secondaire global (GSI) par défaut |
Pris en charge. Si aucune colonne de partitionnement n'est spécifiée pour un index, PolarDB-X le partitionne automatiquement selon les colonnes de l'index. |
Non pris en charge. |
|
|
Équilibrage de charge |
Pris en charge. |
Non pris en charge. |
|
|
Distribution des données actives |
Pris en charge. |
Non pris en charge. |
|
|
Politique de partitionnement |
Partitionnement HASH et KEY |
Pris en charge. Utilise un algorithme de hachage cohérent et prend en charge la distribution des données actives. |
Pris en charge. Utilise un algorithme de routage basé sur le modulo, mais ne prend pas en charge la distribution des données actives. |
|
Partitionnement RANGE et RANGE COLUMNS |
Pris en charge, y compris la prise en charge de la distribution des données actives. |
Non pris en charge. |
|
|
Partitionnement LIST et LIST COLUMNS |
Pris en charge. |
Non pris en charge. |
|
|
Clé de partitionnement vectorielle |
Pris en charge. Une clé de partitionnement peut être un vecteur, par exemple, |
Non pris en charge. |
|
|
Collation de la clé de partitionnement |
Pris en charge. |
Non pris en charge. |
|
|
Table non partitionnée et table broadcast |
Pris en charge. |
Pris en charge. |
|
|
Gestion des partitions |
Création, suppression et modification des partitions |
Pris en charge. |
Non pris en charge. |
|
Division et fusion des partitions |
Pris en charge. |
Non pris en charge. |
|
|
Migration des partitions |
Pris en charge. |
Non pris en charge. |
|
|
Troncature des partitions |
Pris en charge. |
Non pris en charge. |
|
|
Informations sur les partitions |
Bientôt disponible. Cette fonctionnalité prendra en charge l'analyse automatique des partitions actives. |
Non pris en charge. |
|
|
Modification du schéma de partitionnement |
Changement de type de table (conversion entre tables non partitionnées, broadcast et partitionnées) |
Pris en charge. |
Pris en charge. |
|
Modification de la définition des partitions (y compris le nombre de partitions, le type de clé de partitionnement et la politique de partitionnement) |
Pris en charge. |
Pris en charge. |
|
|
Mise à l'échelle automatique |
Suspension des écritures pendant la mise à l'échelle |
Non. |
Oui (brièvement). |
|
Autorise d'autres opérations DDL |
Oui. |
Non. |
|
|
Localité |
Isolation statique du stockage |
Pris en charge. Spécifiez les ressources de stockage physiques lors de la création des bases de données, des tables et des partitions. |
Pris en charge. Spécifiez les ressources de stockage physiques lors de la création des bases de données et des tables. |
|
Isolation dynamique du stockage |
Pris en charge. Ajustez dynamiquement les ressources de stockage physiques pour les bases de données et les tables. |
Non pris en charge. |
|
|
Compatible avec la mise à l'échelle automatique |
Oui. |
Non. |
|
|
Élagage des partitions |
Élagage des partitions basé sur les préfixes |
Pris en charge. Par exemple, si vous partitionnez une table en utilisant |
Non pris en charge. |
|
Pliage constant dans les expressions de calcul |
Pris en charge. Par exemple, l'élagage des partitions peut être effectué pour une condition avec une expression de calcul, telle que |
Non pris en charge. La condition de la clé de partitionnement doit être une constante, telle que |
|
|
Sensibilité à la casse et gestion des espaces de fin pour le routage des partitions |
Pris en charge. Vous pouvez spécifier une collation pour la clé de partitionnement afin de déterminer si le routage est sensible à la casse ou s'il ignore les espaces de fin. |
Non pris en charge. La collation n'est pas prise en charge pour les colonnes de partition. L'algorithme HASH est sensible à la casse et n'ignore pas les espaces de fin. |
|
|
Propagation des opérations de jointure |
Pris en charge. La propagation des opérations de jointure n'est pas affectée lors des opérations sur les partitions telles que la division, la fusion et la migration. |
Pris en charge. |
|
|
Sélection de partition |
Pris en charge. Vous pouvez interroger une partition spécifique en utilisant la syntaxe de sélection de partition, par exemple, |
Non pris en charge. |
|
|
Time to Live (TTL) |
Pris en charge. |
Non pris en charge. |
|
|
AUTO_INCREMENT |
Pris en charge. Garantit que les valeurs sont globalement uniques, monotones croissantes et consécutives. |
Pris en charge. Garantit que les valeurs sont globalement uniques, mais ne garantit pas qu'elles soient monotones croissantes ou consécutives. |
|
Cette rubrique présente et compare les bases de données en mode AUTO et en mode DRDS.
Modes de base de données PolarDB-X
À partir de PolarDB-X 5.4.13, vous pouvez créer une base de données en mode AUTO, également appelée base de données à partitionnement automatique. Ce mode prend en charge le partitionnement automatique : vous pouvez créer une table sans spécifier de clé de partitionnement, et les données sont automatiquement et uniformément réparties dans le cluster. Vous pouvez également utiliser la syntaxe standard de partitionnement MySQL pour effectuer un partitionnement manuel des tables. Cela vous permet de bénéficier facilement des fonctionnalités des bases de données distribuées, telles que la distribution transparente, la mise à l'échelle automatique et la gestion des partitions.
Les bases de données des versions PolarDB-X antérieures à 5.4.13 sont des bases de données en mode DRDS. Ce mode ne prend pas en charge le partitionnement automatique. Lors de la création d'une table, vous devez utiliser la syntaxe de sharding spécifique à DRDS pour spécifier une clé de sharding. Sinon, une table non partitionnée est créée.
PolarDB-X 5.4.13 et les versions ultérieures prennent en charge les bases de données en mode AUTO et en mode DRDS. Elles peuvent coexister au sein de la même instance.
Notes d'utilisation
Pour créer une base de données en mode AUTO, vous devez spécifier explicitement
MODE='AUTO'dans l'instructionCREATE DATABASE.Si vous omettez le paramètre MODE dans l'instruction
CREATE DATABASE, PolarDB-X crée par défaut une base de données en mode DRDS.Dans une base de données en mode AUTO, vous ne pouvez pas utiliser la syntaxe de sharding DRDS pour créer des tables shardées. Vous pouvez uniquement créer des tables partitionnées.
Dans une base de données en mode DRDS, vous ne pouvez pas utiliser la syntaxe de partitionnement pour créer une table partitionnée. Vous pouvez uniquement créer une table shardée.
Les clusters Standard Edition ne prennent pas en charge la création de bases de données en mode AUTO.
Spécification d'un mode de base de données
Lors de la création d'une base de données dans PolarDB-X, utilisez le paramètre MODE pour spécifier le mode de la base de données.
Vous ne pouvez pas modifier le mode de la base de données après sa création.
|
Paramètre |
Valeur |
Description |
Création de base de données |
Création de table |
|
MODE |
'AUTO' |
Crée une base de données en mode AUTO. |
Exemple :
Pour plus d'informations, consultez CREATE DATABASE. |
Les tables créées dans une base de données en mode AUTO sont appelées tables partitionnées. Utilisez la syntaxe MySQL standard. Pour plus d'informations, consultez Syntaxe des tables partitionnées MySQL. |
|
'DRDS' (par défaut) Remarque
Si vous ne spécifiez pas le paramètre MODE, une base de données en mode DRDS est créée par défaut. |
Crée une base de données en mode DRDS. |
Exemples :
Pour plus d'informations, consultez CREATE DATABASE. |
Les tables créées dans une base de données en mode DRDS sont appelées tables shardées. Pour plus d'informations, consultez Syntaxe des tables shardées DRDS. |
Partitionnement automatique et partitionnement manuel
Partitionnement automatique
Le partitionnement automatique ne nécessite pas de spécifier de définitions de partitionnement, telles qu'une clé de partitionnement ou une politique de partitionnement, lors de la création d'une table. PolarDB-X sélectionne automatiquement une clé de partitionnement et partitionne horizontalement la table et ses index. Les bases de données en mode AUTO prennent en charge le partitionnement automatique, contrairement aux bases de données en mode DRDS.
Voici un exemple.
Utilisez la syntaxe MySQL standard pour créer une table nommée tb sans aucune définition de partitionnement :
CREATE TABLE tb(a INT, b INT, PRIMARY KEY(a));
-
Dans une base de données en mode DRDS, cette instruction DDL crée une table non partitionnée.
Exécutez l'instruction
SHOWpour afficher l'instruction complète de création de la table :SHOW FULL CREATE TABLE tb \G *************************** 1. row *************************** Table: tb Create Table: CREATE TABLE `tb` ( `a` int(11) NOT NULL, `b` int(11) DEFAULT NULL, PRIMARY KEY (`a`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 1 row in set (0.02 sec) -
Dans une base de données en mode AUTO, cette instruction DDL crée une table partitionnée. Exécutez l'instruction
SHOWpour afficher l'instruction complète de création de la table :SHOW FULL CREATE TABLE tb \G *************************** 1. row *************************** TABLE: tb CREATE TABLE: CREATE PARTITION TABLE `tb` ( `a` int(11) NOT NULL, `b` int(11) DEFAULT NULL, PRIMARY KEY (`a`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 PARTITION BY KEY(`a`) PARTITIONS 16 1 row in set (0.01 sec)
La fonctionnalité de partitionnement automatique de PolarDB-X permet à votre application de bénéficier facilement des capacités d'une base de données distribuée, telles que la mise à l'échelle automatique et la gestion des partitions.
Partitionnement manuel
Le partitionnement manuel nécessite de spécifier explicitement les définitions de partitionnement, telles qu'une clé de partitionnement et une politique de partitionnement, lors de la création d'une table. La syntaxe de création de table pour le partitionnement manuel diffère entre les bases de données en mode AUTO et en mode DRDS.
-
Base de données en mode AUTO : utilisez la syntaxe MySQL standard pour créer une table partitionnée. Ce mode prend en charge plusieurs politiques de partitionnement, notamment HASH, RANGE et LIST.
Dans l'exemple suivant, la syntaxe
PARTITION BY HASH(a)spécifie la colonneacomme clé de partitionnement et HASH comme politique de partitionnement pour la tabletb:CREATE TABLE tb (a INT, b INT, PRIMARY KEY(a)) -> PARTITION by HASH(a) PARTITIONS 4; Query OK, 0 rows affected (0.83 sec) SHOW FULL CREATE TABLE tb\G *************************** 1. row *************************** TABLE: tb CREATE TABLE: CREATE TABLE `tb` ( `a` int(11) NOT NULL, `b` int(11) DEFAULT NULL, PRIMARY KEY (`a`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 PARTITION BY KEY(`a`) PARTITIONS 4 1 row in set (0.02 sec) -
Base de données en mode DRDS : utilisez la syntaxe de sharding spécifique à DRDS pour créer une table shardée. Ce mode ne prend en charge que la politique HASH.
Dans l'exemple suivant, la syntaxe
DBPARTITION BY HASH(a) TBPARTITION BY HASH(a)spécifie la colonneacomme clé de sharding pour la tabletb:CREATE TABLE tb (a INT, b INT, PRIMARY KEY(a)) -> DBPARTITION by HASH(a) -> TBPARTITION by HASH(a) -> TBPARTITIONS 4; Query OK, 0 rows affected (1.16 sec) SHOW FULL CREATE TABLE tb\G *************************** 1. row *************************** Table: tb Create Table: CREATE TABLE `tb` ( `a` int(11) NOT NULL, `b` int(11) DEFAULT NULL, PRIMARY KEY (`a`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 dbpartition by hash(`a`) tbpartition by hash(`a`) tbpartitions 4 1 row in set (0.02 sec)
Comparaison des algorithmes de routage : tables partitionnées vs tables shardées
La principale différence entre les tables partitionnées et les tables shardées réside dans leur algorithme de routage.
L'algorithme de routage d'une table shardée utilise une opération modulo sur la valeur de hachage par le nombre de shards de table physique. Si vous modifiez le nombre de partitions (par exemple, de 4 à 5), toutes les données doivent être re-hachées. Par conséquent, les tables shardées en mode DRDS ne prennent pas en charge les modifications au niveau des partitions.
L'algorithme de routage par défaut d'une table partitionnée est un algorithme de hachage cohérent basé sur les plages. Cet algorithme prend nativement en charge les modifications des partitions via des opérations telles que la division et la fusion, sans avoir à re-hacher toutes les données. Par conséquent, les tables partitionnées en mode AUTO prennent en charge les modifications au niveau des partitions.
Comparaison des performances
Les tables shardées en mode DRDS et les tables partitionnées en mode AUTO utilisent des algorithmes de routage différents. Pour évaluer les différences de performance, nous avons benchmarké PolarDB-X avec Sysbench. Ce test mesure le débit (en requêtes par seconde, ou QPS) pour chaque mode dans divers scénarios de test Sysbench.
Environnement de test
-
Spécification de l'instance PolarDB-X : polarx.x4,2xlarge.2e
Nœud de calcul (CN) : 2 × (16 cœurs CPU, 64 Go de RAM)
Nœud de données (DN) : 2 × (16 cœurs CPU, 64 Go de RAM)
Version : 5.4.13-16415631
-
Configurations de table :
-
Table partitionnée :
32 partitions
Instruction de partitionnement :
partition by hash(id) partitions 32Données totales de la table : 160 millions de lignes
-
Table shardée :
32 shards de table physique
Instruction de sharding :
dbpartition by hash(id) tbpartition by hash(id) tbpartitions 16Données totales de la table : 160 millions de lignes
-
Scénarios de test
Les tests Sysbench utilisent les scénarios suivants :
oltp_point_select : Requêtes de sélection ponctuelle avec des conditions d'égalité sur la clé de partitionnement.
oltp_read_only : Un mélange de sélections ponctuelles transactionnelles et de requêtes de petite plage (par exemple, utilisant BETWEEN) sur la clé de partitionnement.
oltp_read_write : Un mélange de sélections ponctuelles transactionnelles, de requêtes de petite plage et d'écritures sur la clé de partitionnement.
Résultats des tests
Bien que l'algorithme de hachage cohérent utilisé par les tables partitionnées soit plus complexe que le hachage basé sur le modulo pour les tables shardées, le débit dans le scénario
oltp_point_selectest presque identique, sans dégradation significative des performances.Dans les scénarios
oltp_read_onlyetoltp_read_write, qui impliquent des analyses de plage complexes, les tables partitionnées atteignent un débit global supérieur d'environ 33 %. Cette amélioration est due aux optimisations avancées d'élagage des partitions disponibles en mode AUTO.
FAQ
-
Q1 : Quand dois-je choisir le mode AUTO plutôt que le mode DRDS ?
R : Nous recommandons d'utiliser le mode AUTO pour les nouvelles applications ainsi que pour les applications migrées depuis PolarDB-X 1,0.
-
Q2 : En mode AUTO, dois-je utiliser le partitionnement automatique ou manuel lors de la création des tables ?
R : Pendant la phase de test, vous pouvez utiliser le partitionnement automatique. Si vous découvrez par la suite que votre charge de travail nécessite un ajustement des performances, vous pouvez modifier la méthode de partitionnement de la table en utilisant une instruction DDL (par exemple, l'instruction
ALTER PARTITION). Si vous avez une compréhension approfondie des modèles SQL spécifiques de votre activité et des relations entre les tables, vous pouvez utiliser le partitionnement manuel dès le départ. -
Q3 : Comment passer une base de données du mode DRDS au mode AUTO ?
R : Pour les versions du noyau 5.4.16 et ultérieures, vous pouvez utiliser l'une des méthodes suivantes. Pour les versions antérieures à 5.4.16, seules les méthodes 2 et 3 sont prises en charge. Pour vérifier la version de votre instance, consultez Afficher la version du moteur.
Méthode 1 : À partir de la version 5.4.16, le noyau fournit la syntaxe
CREATE DATABASE LIKE/AS, qui vous permet de convertir une base de données en mode DRDS en une base de données en mode AUTO avec une seule commande. Pour plus de détails sur l'utilisation, consultez Convertir une base de données en mode DRDS en mode AUTO.Méthode 2 : Créez une nouvelle base de données en mode AUTO dans l'instance cible, créez les tables requises, puis utilisez Data Transmission Service (DTS) pour synchroniser les données de la base de données en mode DRDS d'origine vers la nouvelle base de données en mode AUTO.
Méthode 3 : Utilisez la commande
mysqldumppour exporter les données de la base de données en mode DRDS d'origine (à l'exclusion des instructions de création de table). Ensuite, créez une nouvelle base de données en mode AUTO, créez les tables et importez le fichier de données exporté en utilisant la commandesource.
-
Q4 : Quel est le nombre par défaut de partitions pour le partitionnement automatique en mode AUTO ?
R : Le nombre par défaut de partitions automatiques est calculé comme suit : (Nombre de nœuds lors de la création de l'instance) × 8. Par exemple, si une instance est créée avec 2 nœuds, le nombre par défaut de partitions est de 2 × 8 = 16. Ce nombre reste constant après la création de l'instance et n'est pas affecté par la mise à l'échelle automatique, sauf si vous ajustez manuellement le paramètre correspondant.
-
Q5 : Puis-je ajuster manuellement le nombre par défaut de partitions automatiques ?
R : Oui. Le paramètre pour le nombre par défaut de partitions est AUTO_PARTITION_PARTITIONS, qui est un paramètre au niveau de l'instance. Par conséquent, la modification de ce paramètre affecte le nombre de partitions automatiques pour toutes les nouvelles tables créées dans n'importe quelle base de données en mode AUTO au sein de cette instance. Notez que si le nombre de partitions d'une nouvelle table diffère de celui des tables existantes, la propagation des opérations de jointure entre elles peut échouer, ce qui peut affecter l'efficacité des requêtes. Nous recommandons d'ajuster manuellement le nombre de partitions si nécessaire. Pour plus d'informations, consultez Modifier les partitions au niveau de la table (mode AUTO).