Cette rubrique décrit les concepts clés et les types de séquences.
Une séquence numérique globalement unique PolarDB-X génère des nombres uniques à l'échelle mondiale, ordonnés et croissants. Cette séquence, un nombre 64 bits correspondant au type de données MySQL Signed BIGINT, sert couramment à remplir les colonnes de clé primaire et les colonnes d'index unique.
Concepts clés
Maîtrisez les concepts suivants pour choisir le type de séquence approprié :
Consécutif : une séquence est consécutive si la valeur suivante est toujours n + 1, où n représente la valeur actuelle. Si cette condition n'est pas garantie, la séquence est non consécutive.
Croissance monotone : une séquence est monotone croissante si la valeur suivante est toujours supérieure à la valeur actuelle.
Croissance monotone macroscopique : prenons l'exemple d'une séquence telle que 1, 3, 2, 4, 5, 7, 6, 8, ... Cette séquence augmente globalement, mais elle n'est pas strictement monotone à chaque étape.
Capacité d'unitisation : capacité à allouer des séquences numériques globalement uniques entre plusieurs instances ou bases de données.
Utilisation
PolarDB-X propose deux catégories de séquences :
Séquence explicite : créez et gérez ces séquences à l'aide d'instructions DDL ; vous pouvez les utiliser de manière indépendante. Pour récupérer la valeur suivante, exécutez
select seq.nextval, où seq correspond au nom de la séquence.Séquence implicite : définissez AUTO_INCREMENT pour une clé primaire. PolarDB-X remplit et maintient alors automatiquement la valeur de la clé primaire.
Types et fonctionnalités des séquences
PolarDB-X prend en charge les trois types de séquences suivants :
|
Type (Abréviation) |
Globalement unique |
Consécutif |
Croissance monotone |
Monotone par connexion |
Type |
Lisibilité |
Capacité d'unitisation |
|
Nouvelle séquence (NEW) |
Oui |
Oui |
Oui |
Oui |
Tous les types entiers |
Bonne |
Non |
|
Séquence de groupe (GROUP) |
Oui |
Non |
Non |
Oui |
Tous les types entiers |
Bonne |
Oui |
|
Séquence temporelle (TIME) |
Oui |
Non |
Croissance monotone macroscopique |
Oui |
BIGINT uniquement |
Faible |
Non |
Nouvelle séquence (NEW)
Une nouvelle séquence génère des valeurs globalement uniques, consécutives et monotones croissantes. Par défaut, elle produit une suite de nombres naturels commençant par 1.
Les bases de données en mode AUTO version 5.4.14 ou ultérieure utilisent la nouvelle séquence par défaut si aucun type de séquence n'est spécifié.
Seules les versions 5.4.17 ou ultérieures prennent en charge les pas personnalisés, les limites de valeur maximale et l'allocation cyclique.
Pour connaître les autres limitations, consultez la section Nouvelle séquence.
Avantages : fournit des valeurs globalement uniques, consécutives et monotones croissantes avec des performances élevées. Elle prend également en charge les pas personnalisés, les limites de valeur maximale et l'allocation cyclique.
Inconvénients : dépend du Global Meta Service (GMS) et consomme davantage de ressources GMS que les autres types de séquences.
Exemple :
La création d'une nouvelle séquence avec une valeur de départ de 100000 génère la séquence suivante, garantie comme étant globalement unique, consécutive et monotone croissante :
100000, 100001, 100002, 100003, 100004, ..., 199999, 200000, 200001, 200002, 200003, ...
Séquence de groupe (GROUP)
Une séquence de groupe génère des valeurs globalement uniques à partir d'une suite de nombres naturels. Par défaut, les valeurs commencent à 100001, mais elles ne sont ni garanties consécutives ni monotones croissantes. Si vous ne spécifiez aucun paramètre d'unitisation, PolarDB-X crée une séquence de groupe avec une seule unité, ce qui suffit dans la plupart des cas d'utilisation.
Si vous spécifiez un nombre d'unités supérieur à un en utilisant le paramètre UNIT COUNT lors de la création, la séquence de groupe acquiert une capacité d'unitisation. Une séquence de groupe unitisée présente les caractéristiques suivantes :
Le nombre d'unités détermine l'espace d'allocation pour la séquence numérique globalement unique.
Chaque unité, identifiée par l'index d'unité (paramètre INDEX), occupe un sous-ensemble de l'espace d'allocation total.
Les sous-ensembles occupés par différentes unités (avec des valeurs INDEX différentes) ne se chevauchent pas. Cela garantit que différentes unités allouent des valeurs de séquence uniques.
Fonctionnement : pour assurer une haute disponibilité, une séquence de groupe utilise plusieurs nœuds pour générer des valeurs. Elle récupère par anticipation un bloc de valeurs à la fois. Si ce bloc n'est pas entièrement utilisé, par exemple en raison d'une connexion interrompue, des lacunes apparaissent dans la séquence.
Avantages : garantit l'unicité globale et évite les points de défaillance uniques, offrant ainsi d'excellentes performances. Elle fournit également une capacité d'unitisation pour fonctionner entre plusieurs instances ou bases de données.
Inconvénients : la séquence générée n'est pas consécutive et peut présenter des lacunes. Elle ne commence pas nécessairement à la valeur de départ configurée.
Pour connaître les autres limitations, consultez la section Séquence de groupe.
Exemple :
La création d'une séquence de groupe avec une valeur de départ de 100000 pourrait produire une séquence semblable à la suivante, dont seule l'unicité globale est garantie :
200001, 200002, 200003, 200004, 100001, 100002, 100003, 200005, 200006, ...
La valeur initiale réellement allouée par une séquence de groupe ne commence pas nécessairement à la valeur de départ configurée, mais elle est toujours supérieure à celle-ci.
Une séquence de groupe garantit l'unicité globale, mais peut présenter des lacunes. Par exemple, si un nœud générant les valeurs de la séquence de groupe tombe en panne, ou si une connexion récupère seulement une partie des valeurs qui lui ont été allouées avant de se fermer, des lacunes apparaissent. Dans l'exemple précédent, des lacunes apparaissent entre 200004 et 100001, ainsi qu'entre 100003 et 200005.
Séquence temporelle (TIME)
Une séquence temporelle génère des valeurs en combinant un horodatage, un ID de nœud et un numéro de série. Cette méthode garantit l'unicité globale et une croissance monotone macroscopique. Les mises à jour de ce type de séquence ne dépendent pas des nœuds de données et ne sont pas persistées dans la base de données. Le système stocke uniquement le nom et les informations de type, ce qui offre d'excellentes performances. Une séquence temporelle produit des valeurs similaires à 776668092129345536, 776668098018148352, 776668111578333184, 776668114812141568, ....
Avantages : garantit l'unicité globale et offre d'excellentes performances.
Inconvénients : la séquence générée n'est pas consécutive. Des paramètres tels que la valeur de départ, le pas, la valeur maximale et le cycle n'ont aucun effet sur une séquence temporelle.
Une colonne à incrémentation automatique utilisant une séquence temporelle doit avoir le type de données BIGINT.
Cas d'utilisation
Les trois types de séquences garantissent des valeurs globalement uniques et peuvent être utilisés pour les colonnes de clé primaire et les colonnes d'index unique.
Pour les bases de données en mode AUTO version 5.4.14 ou ultérieure, nous vous recommandons d'utiliser uniquement la nouvelle séquence.
Les bases de données en mode DRDS utilisent la séquence de groupe par défaut.
Utilisez la séquence de groupe uniquement pour les scénarios d'unitisation et pour la compatibilité avec les applications migrées depuis PolarDB-X 1,0.
Utilisez la séquence temporelle uniquement pour la compatibilité avec les applications migrées depuis PolarDB-X 1,0.