Utilisez Data Transmission Service (DTS) pour synchroniser les données d'un cluster PolarDB for PostgreSQL vers une instance ApsaraDB for SelectDB afin d'analyser des données à grande échelle. DTS prend en charge la synchronisation du schéma, la synchronisation complète des données et la synchronisation incrémentielle continue des données.
Prérequis
Avant de commencer, assurez-vous d'avoir :
Une instance ApsaraDB for SelectDB de destination disposant d'un espace disque supérieur à l'espace utilisé par le cluster PolarDB for PostgreSQL source. Pour plus d'informations, consultez Créer une instance.
Le paramètre
wal_leveldu cluster PolarDB for PostgreSQL source défini surlogical. Pour plus d'informations, consultez Définir les paramètres du cluster.
Facturation
| Type de synchronisation | Frais |
|---|---|
| Synchronisation du schéma et synchronisation complète des données | Gratuit |
| Synchronisation incrémentielle des données | Payant. Pour plus d'informations, consultez Présentation de la facturation. |
Opérations SQL prises en charge
| Type d'opération | Instruction SQL |
|---|---|
| LMD | INSERT, UPDATE, DELETE |
| LDD | ADD COLUMN, DROP COLUMN |
Autorisations requises
| Base de données | Autorisations requises | Comment accorder |
|---|---|---|
| Cluster PolarDB for PostgreSQL source | Un compte privilégié propriétaire de la base de données à synchroniser | Créer un compte de base de données et Gestion des bases de données |
| Instance ApsaraDB for SelectDB de destination | Autorisations d'accès au cluster (Usage_priv) et autorisations d'accès à la base de données (Select_priv, Load_priv, Alter_priv, Create_priv et Drop_priv) | Gestion des autorisations de cluster et Gestion des autorisations de base |
Limites
Base de données source
Toutes les tables à synchroniser doivent disposer d'une clé primaire ou d'un index unique non nul. Si les champs de la table ne sont pas uniques, des données en double peuvent apparaître dans la base de données de destination.
Pour les tables sans clé primaire ni index unique non nul : sélectionnez Schema Synchronization pour Synchronization Types et duplicate pour Engine à l'étape Configurations for Databases, Tables, and Columns.
Les transactions de longue durée dans la base de données source peuvent entraîner l'accumulation des journaux WAL (Write-Ahead Logging) avant leur validation, ce qui risque d'épuiser l'espace disque de la base de données source.
Le cluster PolarDB for PostgreSQL doit prendre en charge et avoir activé la fonctionnalité Logical Replication Slot Failover. Si le cluster utilise PostgreSQL 14, qui ne prend pas en charge Logical Replication Slot Failover, un basculement de haute disponibilité (HA) peut provoquer l'échec définitif de l'instance de synchronisation et nécessiter une reconfiguration complète.
Si une modification incrémentielle unique dépasse 256 Mo, l'instance de synchronisation peut échouer définitivement. Reconfigurez l'instance de synchronisation pour récupérer.
N'exécutez pas d'opérations LDD modifiant les schémas lors de la synchronisation initiale du schéma ou de la synchronisation initiale complète des données. DTS interroge la base de données source lors de la synchronisation complète initiale, ce qui crée des verrous de métadonnées susceptibles de bloquer les opérations LDD.
Base de données de destination
Exigences du modèle de données SelectDB
DTS ne peut synchroniser les données que vers des tables utilisant le modèle Unique Key ou le modèle Duplicate key dans ApsaraDB for SelectDB. Choisissez le modèle en fonction de vos besoins :
| Exigence | Modèle recommandé | Notes |
|---|---|---|
| Enregistrements cohérents et dédupliqués | Modèle Unique Key | Toutes les clés uniques de la table de destination doivent exister dans la table source et l'objet de synchronisation. L'absence de clés entraîne une incohérence des données. |
| Ingestion en ajout seul ou à haut débit | Modèle Duplicate key | Des données en double peuvent apparaître en cas de nouvelle tentative ou si plusieurs opérations LMD s'exécutent sur la même ligne après le démarrage de l'instance de synchronisation. Utilisez les colonnes _is_deleted, _version et _record_id pour la déduplication. DTS convertit les instructions UPDATE et DELETE en instructions INSERT pour les tables utilisant le modèle Duplicate key. |
Contraintes d'objets et de nommage
Seul le paramètre
bucket_countpeut être spécifié dans la section Selected Objects. La valeur doit être un entier positif. Valeur par défaut : auto.ApsaraDB for SelectDB ne prend en charge que les noms de bases de données et de tables commençant par une lettre. Utilisez la fonctionnalité de mappage de noms d'objets pour renommer les objets qui ne commencent pas par une lettre.
Les noms d'objets (bases de données, tables ou colonnes) contenant des caractères chinois doivent être renommés à l'aide de la fonctionnalité de mappage de noms d'objets.
Une seule instance de synchronisation peut synchroniser une seule base de données. Pour synchroniser plusieurs bases de données, configurez une instance de synchronisation distincte pour chaque base de données.
Portée de la synchronisation et limites LDD
La synchronisation des tables d'extension TimescaleDB et des tables avec héritage inter-schéma n'est pas prise en charge.
Vous ne pouvez pas modifier les opérations LDD sur plusieurs colonnes à la fois, ni modifier consécutivement les opérations LDD sur la même table.
Dans un scénario de fusion multi-tables (synchronisation de plusieurs tables sources vers une seule table de destination), les schémas de toutes les tables sources doivent être identiques. Sinon, une incohérence des données ou un échec de la tâche peut se produire.
Tables partitionnées
Lors de la synchronisation de tables partitionnées, incluez à la fois la table parente et toutes ses partitions enfants comme objets de synchronisation. La table parente d'une table partitionnée PostgreSQL ne stocke pas directement les données ; toutes les données se trouvent dans les partitions enfants. L'omission de partitions entraîne une incohérence des données.
Exigence REPLICA IDENTITY
Exécutez la commande suivante sur les tables avant d'y écrire des données dans ces trois scénarios : lors de la première exécution de l'instance ; lorsque vous sélectionnez des objets au niveau du schéma et qu'une nouvelle table est créée ou reconstruite à l'aide de RENAME ; et lorsque vous utilisez la fonctionnalité de modification des objets de synchronisation.
ALTER TABLE schema.table REPLICA IDENTITY FULL;
Remplacez schema et table par le nom réel du schéma et le nom de la table. Exécutez cette commande pendant les heures creuses. N'effectuez pas d'opérations de verrouillage de table pendant l'exécution de cette commande. Si vous ignorez la prévérification associée, DTS exécute automatiquement cette commande lors de l'initialisation de l'instance.
Opérations provoquant l'échec de la tâche
Les opérations suivantes provoquent l'échec de la tâche de synchronisation. Redémarrez l'instance de synchronisation pour reprendre :
Ajout de nœuds backend à la base de données ApsaraDB for SelectDB de destination pendant la synchronisation
Création de clusters dans l'instance ApsaraDB for SelectDB de destination pendant la synchronisation
Tables temporaires
DTS crée les tables temporaires suivantes dans la base de données source pour prendre en charge la synchronisation incrémentielle. Ne les supprimez pas pendant la synchronisation ; elles sont automatiquement supprimées après la libération de l'instance DTS :
public.dts_pg_class, public.dts_pg_attribute, public.dts_pg_type, public.dts_pg_enum, public.dts_postgres_heartbeat, public.dts_ddl_command, public.dts_args_session et public.aliyun_dts_instance.
Emplacement de réplication
DTS crée un emplacement de réplication avec le préfixe dts_sync_ dans la base de données source. Cet emplacement conserve les journaux incrémentiels des 15 dernières minutes. Lorsque la tâche de synchronisation échoue ou que l'instance est libérée, DTS tente de nettoyer automatiquement l'emplacement.
Si vous modifiez le mot de passe du compte de la base de données source ou supprimez la liste d'autorisation d'adresses IP DTS pendant la synchronisation, l'emplacement de réplication ne peut pas être nettoyé automatiquement. Nettoyez manuellement l'emplacement de réplication pour éviter l'épuisement de l'espace disque. En cas de basculement principal/secondaire, connectez-vous à la base de données secondaire pour effectuer le nettoyage.

Incremental synchronization latency
DTS utilise une politique de synchronisation par lots pour réduire la charge sur la destination. Par défaut, DTS écrit les données au maximum une fois toutes les 5 secondes par objet de synchronisation, ce qui entraîne une latence de synchronisation normale pouvant atteindre 10 secondes. Pour réduire cette latence, modifiez le paramètre selectdb.reservoir.timeout.milliseconds de l'instance DTS dans la console. La plage valide est de 1 000 à 10 000 millisecondes.
Une durée de lot plus courte augmente la fréquence d'écriture, ce qui peut accroître la charge et le temps de réponse en écriture de la destination et, par conséquent, augmenter la latence de synchronisation DTS. Ajustez la durée de lot en fonction de la charge de la destination.
Autres notes
DTS ne vérifie pas la validité des métadonnées telles que les séquences. Vérifiez manuellement la validité des métadonnées avant et après la synchronisation.
Effectuez la synchronisation complète des données lorsque la charge CPU des bases de données source et de destination est inférieure à 30 %.
En cas d'échec d'une instance, l'équipe d'assistance DTS tentera de la récupérer dans un délai de 8 heures. Pendant la récupération, seuls les paramètres de l'instance DTS peuvent être modifiés ; les paramètres de la base de données ne sont pas changés. Pour connaître les paramètres susceptibles d'être modifiés, consultez Modifier les paramètres de l'instance.
Créer une tâche de synchronisation
Étape 1 : Accéder à la page Data Synchronization
Utilisez l'une des consoles suivantes.
Console DTS
Connectez-vous à la console DTS.
Dans le volet de navigation de gauche, cliquez sur Data Synchronization.
Dans le coin supérieur gauche de la page, sélectionnez la région où réside la tâche de synchronisation.
Console DMS
Note
Les opérations réelles peuvent varier selon le mode et la disposition de la console DMS. Pour plus d'informations, consultez Mode simple et Personnaliser la disposition et le style de la console DMS.
Connectez-vous à la console DMS.
Dans la barre de navigation supérieure, placez le pointeur sur Data + AI et choisissez DTS (DTS) > Data Synchronization.
Dans la liste déroulante à droite de Data Synchronization Tasks, sélectionnez la région où réside l'instance de synchronisation.
Étape 2 : Configurer les bases de données source et de destination
Cliquez sur Create Task pour accéder à la page de configuration de la tâche.
-
Configurez les bases de données source et de destination à l'aide des paramètres suivants.
Catégorie Paramètre Description Aucun Task Name Nom de la tâche. DTS génère automatiquement un nom. Spécifiez un nom descriptif pour faciliter l'identification de la tâche. Un nom unique n'est pas requis. Source Database Select Existing Connection Si vous avez enregistré l'instance de base de données auprès de DTS, sélectionnez-la dans la liste déroulante. DTS remplit automatiquement les paramètres de la base de données. Sinon, configurez manuellement les paramètres suivants. Database Type Sélectionnez PolarDB for PostgreSQL. Access Method Sélectionnez Alibaba Cloud Instance. Instance Region Sélectionnez la région où réside le cluster PolarDB for PostgreSQL source. Replicate Data Across Alibaba Cloud Accounts Sélectionnez No si les bases de données source et de destination appartiennent au même compte Alibaba Cloud. Instance ID Sélectionnez l'ID du cluster PolarDB for PostgreSQL source. Database Name Saisissez le nom de la base de données contenant les objets à synchroniser. Database Account Saisissez le compte de la base de données. Pour les exigences en matière d'autorisations, consultez Autorisations requises. Database Password Saisissez le mot de passe du compte de la base de données. Destination Database Select Existing Connection Si vous avez enregistré l'instance de base de données auprès de DTS, sélectionnez-la dans la liste déroulante. DTS remplit automatiquement les paramètres de la base de données. Sinon, configurez manuellement les paramètres suivants. Database Type Sélectionnez SelectDB. Access Method Sélectionnez Alibaba Cloud Instance. Instance Region Sélectionnez la région où réside l'instance SelectDB de destination. Replicate Data Across Alibaba Cloud Accounts Sélectionnez No si les bases de données source et de destination appartiennent au même compte Alibaba Cloud. Instance ID Sélectionnez l'ID de l'instance SelectDB de destination. Database Account Saisissez le compte de la base de données. Pour les exigences en matière d'autorisations, consultez Autorisations requises. Database Password Saisissez le mot de passe du compte de la base de données. -
Cliquez sur Test Connectivity and Proceed.
Assurez-vous que les blocs CIDR des serveurs DTS sont ajoutés aux paramètres de sécurité des bases de données source et de destination. Pour plus d'informations, consultez Ajouter les adresses IP des serveurs DTS à une liste d'autorisation .
Étape 3 : Configurer les objets de synchronisation
-
À l'étape Configure Objects, configurez les paramètres de synchronisation.
Paramètre Description Synchronization Types Par défaut, Incremental Data Synchronization est sélectionné. Sélectionnez également Schema Synchronization et Full Data Synchronization. Une fois la prévérification terminée, DTS synchronise les données historiques comme base pour la synchronisation incrémentielle continue. ImportantLors de la synchronisation de PolarDB for PostgreSQL vers SelectDB, les types de données sont convertis. Si vous ne sélectionnez pas Schema Synchronization, créez manuellement les tables de destination en utilisant le modèle Unique ou Duplicate correspondant. Pour plus d'informations, consultez Mappage des types de données, Informations sur les colonnes supplémentaires et Modèle de données.
Processing Mode of Conflicting Tables Precheck and Report Errors : DTS vérifie la présence de tables portant le même nom dans la base de données de destination. Si une table en double existe, la prévérification échoue et la tâche ne démarre pas. RemarqueSi vous ne pouvez pas supprimer ou renommer la table en double, utilisez la fonctionnalité de mappage de noms d'objets. Pour plus d'informations, consultez Mapper les noms de schéma, de table et de colonne. Ignore Errors and Proceed : DTS ignore la vérification des noms de tables en double.
AvertissementCette option peut entraîner une incohérence des données. Si les schémas de table sont identiques et qu'un enregistrement possède une clé primaire ou une clé unique correspondante, l'enregistrement source écrase l'enregistrement de destination. Si les schémas diffèrent, l'initialisation peut échouer ou seules certaines colonnes peuvent être synchronisées.
Capitalization of Object Names in Destination Instance Politique de casse pour les noms de bases de données, de tables et de colonnes dans l'instance de destination. Par défaut : DTS default policy. Pour plus d'informations, consultez Spécifier la casse des noms d'objets dans l'instance de destination. Source Objects Sélectionnez un ou plusieurs objets et cliquez sur l'icône
pour les déplacer vers Selected Objects. Les objets peuvent être sélectionnés au niveau du schéma, de la table ou de la colonne.Selected Objects - Pour renommer un objet de destination ou spécifier un objet de réception, faites un clic droit dessus dans la section Selected Objects. Pour plus d'informations, consultez Mapper les noms d'objets. - Pour supprimer un objet sélectionné, cliquez dessus puis cliquez sur l'icône
. - Pour définir le paramètre bucket_countpour une table (disponible uniquement lorsque Schema Synchronization est sélectionné et que les objets sont sélectionnés au niveau de la table) : faites un clic droit sur la table, définissez Enable Parameter Settings sur Yesparamètres de notification d'alerte, saisissez la valeur et cliquez sur OK.RemarqueLe renommage d'un objet à l'aide du mappage de noms d'objets peut empêcher la synchronisation des objets dépendants. Pour filtrer les données avec des conditions WHERE, faites un clic droit sur une table et spécifiez les conditions. Pour plus d'informations, consultez Spécifier les conditions de filtre. Pour sélectionner les opérations SQL pour la synchronisation incrémentielle, faites un clic droit sur un objet et sélectionnez les opérations.
-
Cliquez sur Next: Advanced Settings et configurez les paramètres suivants.
Paramètre Description Dedicated Cluster for Task Scheduling Par défaut, DTS planifie la tâche sur le cluster partagé. Pour améliorer la stabilité, achetez un cluster dédié. Pour plus d'informations, consultez Qu'est-ce qu'un cluster dédié DTS. Retry Time for Failed Connections Plage de temps pour retenter les connexions ayant échoué. Valeurs valides : 10–1440 minutes. Par défaut : 720 minutes. Définissez une valeur supérieure à 30 minutes. Si DTS se reconnecte dans cette fenêtre, la tâche reprend. Sinon, la tâche échoue. RemarqueSi plusieurs tâches partagent la même base de données source ou de destination et ont des fenêtres de nouvelle tentative différentes, la fenêtre la plus courte est prioritaire. DTS facture l'instance pendant les nouvelles tentatives.
Retry Time for Other Issues Plage de temps pour retenter les opérations LDD ou LMD ayant échoué. Valeurs valides : 1–1440 minutes. Par défaut : 10 minutes. Définissez une valeur supérieure à 10 minutes. Cette valeur doit être inférieure à Retry Time for Failed Connections. Enable Throttling for Full Data Synchronization Limitez la synchronisation complète des données pour réduire la charge sur la source et la destination. Configurez Queries per second (QPS) to the source database, RPS of Full Data Migration et Data migration speed for full migration (MB/s). Disponible uniquement lorsque Full Data Synchronization est sélectionné. Enable Throttling for Incremental Data Synchronization Limitez la synchronisation incrémentielle des données en configurant RPS of Incremental Data Synchronization et Data synchronization speed for incremental synchronization (MB/s). Environment Tag Un tag facultatif pour identifier l'instance. Configure ETL Spécifiez si vous souhaitez activer la fonctionnalité extract, transform, and load (ETL). Sélectionnez Yes pour saisir des instructions de traitement des données dans l'éditeur de code. Pour plus d'informations, consultez Configurer ETL dans une tâche de migration ou de synchronisation de données. Sélectionnez No pour ignorer la configuration ETL. Monitoring and Alerting Spécifiez si vous souhaitez configurer des alertes. Sélectionnez Yes pour configurer le seuil d'alerte et les paramètres de notification. Pour plus d'informations, consultez la section Configurer la surveillance et les alertes lors de la création d'une tâche DTS. -
(Facultatif) Cliquez sur Next: Configure Database and Table Fields pour définir la Primary Key Column, la Distribution Key et le Engine pour les tables de destination.
- Cette étape est disponible uniquement lorsque Schema Synchronization est sélectionné pour Synchronization Types . Définissez Definition Status sur All pour effectuer des modifications. - Vous pouvez sélectionner plusieurs colonnes comme clé primaire composite. Au moins une colonne dans Primary Key Column doit également être sélectionnée comme Distribution Key . - Pour les tables sans clé primaire ni contrainte UNIQUE, définissez Engine sur duplicate . Sinon, la synchronisation peut échouer ou des données peuvent être perdues.
Étape 4 : Exécuter la prévérification
-
Cliquez sur Next: Save Task Settings and Precheck. DTS exécute une prévérification avant que la tâche de synchronisation ne puisse démarrer. La tâche ne démarre qu'après la réussite de la prévérification.
Pour afficher les paramètres API pour cette configuration, placez le pointeur sur Next: Save Task Settings and Precheck et cliquez sur Preview OpenAPI parameters .
Si la prévérification échoue, cliquez sur View Details à côté de chaque élément ayant échoué, résolvez le problème et relancez la prévérification.
-
Si une alerte est déclenchée :
Si l'alerte ne peut pas être ignorée, cliquez sur View Details, corrigez le problème et relancez la prévérification.
Si l'alerte peut être ignorée, cliquez sur Confirm Alert Details, cliquez sur Ignore dans la boîte de dialogue View Details, cliquez sur OK, puis cliquez sur Precheck Again.
Ignorer les alertes peut entraîner une incohérence des données et exposer votre activité à des risques.
Étape 5 : Acheter l'instance
Attendez que le Success Rate atteigne 100%, puis cliquez sur Next: Purchase Instance.
-
Sur la page buy, configurez les paramètres suivants.
Paramètre Description Billing Method Subscription : Payez à l'avance pour une durée fixe. Plus rentable pour une utilisation à long terme. Pay-as-you-go : Facturé à l'heure. Adapté à une utilisation à court terme. Libérez l'instance lorsqu'elle n'est plus nécessaire pour réduire les coûts. Resource Group Settings Groupe de ressources pour l'instance de synchronisation. Par défaut : default resource group. Pour plus d'informations, consultez Qu'est-ce que Resource Management ? Instance Class Niveau de vitesse de synchronisation. Sélectionnez en fonction de vos besoins professionnels. Pour plus d'informations, consultez Classes d'instance des instances de synchronisation de données. Subscription Duration Disponible uniquement pour la méthode de facturation par abonnement. Options : 1–9 mois, 1 an, 2 ans, 3 ans ou 5 ans. Lisez et acceptez les Data Transmission Service (Pay-as-you-go) Service Terms.
Cliquez sur Buy and Start. Dans la boîte de dialogue qui s'affiche, cliquez sur OK.
La tâche apparaît dans la liste des tâches. Surveillez sa progression à partir de là.
Mappage des types de données
Le tableau suivant montre comment les types de données PolarDB for PostgreSQL sont mappés aux types de données SelectDB.
| Catégorie | Type de données PolarDB for PostgreSQL | Type de données SelectDB |
|---|---|---|
| Numérique | SMALLINT | SMALLINT |
| INTEGER | INT | |
| BIGINT | BIGINT | |
| DECIMAL | DECIMAL | |
| NUMERIC | DECIMAL | |
| REAL | DOUBLE | |
| DOUBLE | DOUBLE | |
| SMALLSERIAL | SMALLINT | |
| SERIAL | INT | |
| BIGSERIAL | BIGINT | |
| Monétaire | MONEY | STRING |
| Caractère | CHAR(n), VARCHAR(n) | VARCHAR. Important
Pour éviter la perte de données, CHAR(n) et VARCHAR(n) sont convertis en VARCHAR(4\*n). Si aucune longueur n'est spécifiée, la valeur VARCHAR(65533) par défaut de SelectDB est utilisée. Si la longueur dépasse 65533, les données sont converties en STRING. |
| TEXT | STRING | |
| Binaire | BYTEA | STRING |
| Date et heure | TIMESTAMP [(P)] [WITHOUT TIME ZONE] | DATETIMEV2 |
| TIMESTAMP [(P)] WITH TIME ZONE | DATETIMEV2 | |
| DATE | DATEV2 | |
| TIME [(P)] [WITHOUT TIME ZONE] | VARCHAR(50) | |
| TIME [(P)] WITH TIME ZONE | VARCHAR(50) | |
| INTERVAL [FIELDS] [(P)] | STRING | |
| Booléen | BOOLEAN | BOOLEAN |
| Géométrique | POINT, LINE, LSEG, BOX, PATH, POLYGON, CIRCLE | STRING |
| Adresse réseau | CIDR, INET, MACADDR, MACADDR8 | STRING |
| Recherche textuelle | TSVECTOR | STRING |
| XML | XML | STRING |
| JSON | JSON | JSON |
Informations sur les colonnes supplémentaires
Pour les tables utilisant le modèle Duplicate key, DTS ajoute ou exige automatiquement les colonnes suivantes dans la table de destination.
| Nom de la colonne | Type de données | Valeur par défaut | Description |
|---|---|---|---|
_is_deleted |
Int | 0 | Indicateur de suppression. Insertion : 0. Mise à jour : 0. Suppression : 1. |
_version |
Bigint | 0 | Synchronisation complète des données : 0. Synchronisation incrémentielle des données : l'horodatage correspondant en secondes issu du journal binaire de la base de données source. |
_record_id |
Bigint | 0 | Synchronisation complète des données : 0. Synchronisation incrémentielle des données : l'ID d'enregistrement du journal incrémentiel, qui identifie de manière unique l'entrée de journal. La valeur est unique et incrémentale. |