Une source de données DRDS (PolarDB-X 1.0) vous permet de lire et d'écrire des données dans DRDS (PolarDB-X 1.0). Cette rubrique décrit les capacités de synchronisation des données de DataWorks pour cette source de données.
Prise en main
Pour commencer à synchroniser des données avec DRDS (PolarDB-X 1.0), effectuez les étapes suivantes dans l'ordre :
Créez un compte de base de données disposant de l'autorisation
replace into. Consultez la section Prérequis.Ajoutez DRDS (PolarDB-X 1.0) en tant que source de données dans DataWorks. Consultez la section Ajouter une source de données.
Configurez et exécutez une tâche de synchronisation. Consultez la section Développer une tâche de synchronisation des données.
Prérequis
Avant de commencer, assurez-vous que :
Vous disposez d'un compte de base de données DRDS (PolarDB-X 1.0) avec l'autorisation
replace into. Pour obtenir les instructions de configuration, consultez Créer un compte.
Limitations
Lecture et écriture hors ligne
Le plug-in DRDS (PolarDB-X 1.0) est compatible uniquement avec le moteur MySQL. DRDS (PolarDB-X 1.0) est une base de données MySQL distribuée et la plupart de ses protocoles de communication suivent les standards MySQL.
MySQL 8.0 dans DRDS (PolarDB-X 1.0) prend en charge les groupes de ressources serverless (recommandés) et les groupes de ressources exclusifs pour Data Integration.
DRDS (PolarDB-X 1.0) Writer se connecte au proxy d'une base de données DRDS (PolarDB-X 1.0) distante via JDBC (Java Database Connectivity) et exécute des instructions
replace intopour écrire les données. La table de destination doit disposer d'une clé primaire ou d'un index unique pour éviter les écritures en double.-
DRDS (PolarDB-X 1.0) Writer récupère les données d'un Reader via le framework de synchronisation des données, puis les écrit à l'aide d'instructions
replace into: le Writer accumule les données et les valide auprès du proxy DRDS (PolarDB-X 1.0), qui détermine s'il faut acheminer les données vers une ou plusieurs tables.S'il n'y a aucun conflit de clé primaire ou d'index unique, le comportement équivaut à une instruction
insert into.En cas de conflit, la nouvelle ligne remplace tous les champs de la ligne existante.
RemarqueLa tâche requiert au minimum l'autorisation
replace into. Les autorisations supplémentaires dépendent des instructions SQL spécifiées danspreSqletpostSql. La lecture à partir de vues est prise en charge.
Types de champs pris en charge
DRDS (PolarDB-X 1.0) Reader et Writer prennent en charge la plupart des types de données. Vérifiez que vos types de données figurent dans la liste suivante avant de configurer une tâche de synchronisation.
| Catégorie de type | Types de données DRDS (PolarDB-X 1.0) |
|---|---|
| Types entiers | INT, TINYINT, SMALLINT, MEDIUMINT, BIGINT |
| Types à virgule flottante | FLOAT, DOUBLE, DECIMAL |
| Types chaîne | VARCHAR, CHAR, TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT |
| Types date et heure | DATE, DATETIME, TIMESTAMP, TIME, YEAR |
| Types booléens | BIT, BOOL |
| Types binaires | TINYBLOB, MEDIUMBLOB, BLOB, LONGBLOB, VARBINARY |
Ajouter une source de données
Avant de développer une tâche de synchronisation dans DataWorks, ajoutez DRDS (PolarDB-X 1.0) en tant que source de données. Suivez les instructions fournies dans la documentation sur la gestion des sources de données. Les descriptions des paramètres sont disponibles dans la console DataWorks lorsque vous ajoutez la source de données.
Développer une tâche de synchronisation des données
Configurer une tâche de synchronisation hors ligne pour une seule table
Effectuez la configuration à l'aide de l'interface sans code ou de l'éditeur de code. Consultez les rubriques Configurer une tâche dans l'interface sans code et Configurer une tâche dans l'éditeur de code.
Pour une référence complète des paramètres et des exemples de scripts, consultez l'Annexe : Démo de script et paramètres.
Configurer une tâche de synchronisation hors ligne pour une base de données entière
Consultez la rubrique Configurer une tâche de synchronisation hors ligne pour une base de données entière.
FAQ
Pourquoi DRDS (PolarDB-X 1.0) Reader ne peut-il pas garantir la cohérence des données entre les shards ?
DRDS (PolarDB-X 1.0) est une base de données distribuée. Lorsque le Reader extrait des données de différentes tables sous-jacentes fragmentées, il capture des instantanés à différents moments, et non à partir d'un seul instantané temporel cohérent. Une forte cohérence entre les bases de données et les tables fragmentées ne peut pas être garantie.
Comment l'encodage affecte-t-il la synchronisation des données ?
DRDS (PolarDB-X 1.0) prend en charge les paramètres d'encodage aux niveaux du champ, de la table, de la base de données et de l'instance. La priorité des paramètres d'encodage, de la plus élevée à la plus faible, est la suivante : champ, table, base de données, puis instance. Définissez l'encodage sur UTF-8 au niveau de la base de données pour éviter tout problème.
DRDS (PolarDB-X 1.0) Reader utilise JDBC pour l'extraction des données, ce qui gère automatiquement la conversion de l'encodage. Toutefois, si l'encodage utilisé lors de l'écriture des données dans la couche inférieure diffère de l'encodage déclaré, le Reader ne peut pas détecter cette incohérence et le résultat de la synchronisation peut contenir des caractères illisibles.
Comment configurer la synchronisation incrémentielle des données ?
DRDS (PolarDB-X 1.0) Reader utilise des instructions SELECT JDBC pour l'extraction des données. Utilisez une clause WHERE pour filtrer uniquement les enregistrements ajoutés ou modifiés depuis la dernière synchronisation :
Basé sur l'horodatage : Si votre application écrit un champ
modifyavec un horodatage de modification pour chaque enregistrement (couvrant les ajouts, les mises à jour ou les suppressions logiques), ajoutez une clauseWHEREutilisant l'horodatage de la dernière exécution de synchronisation.Basé sur l'ID auto-incrémentiel : Pour les flux de données en ajout seul, ajoutez une clause
WHEREutilisant l'ID auto-incrémentiel maximal de la synchronisation précédente.
Si vos données ne comportent aucun champ permettant de distinguer les nouveaux enregistrements ou les enregistrements modifiés des enregistrements existants, le Reader ne peut pas prendre en charge l'extraction incrémentielle ; seule la synchronisation complète des données est disponible.
Les conditions de filtre basées sur les noms de tables physiques ne sont pas prises en charge dans la clause WHERE.
Annexe : Démo de script et paramètres
Pour configurer une tâche de synchronisation par lots à l'aide de l'éditeur de code, suivez le format de script unifié décrit dans la rubrique Configurer une tâche dans l'éditeur de code. Les sections suivantes décrivent les paramètres et fournissent des exemples de scripts.
Démo de script Reader
{
"type": "job",
"version": "2.0",
"steps": [
{
"stepType": "drds",
"parameter": {
"datasource": "",
"column": [
"id",
"name"
],
"where": "",
"table": "",
"splitPk": ""
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "stream",
"parameter": {},
"name": "Writer",
"category": "writer"
}
],
"setting": {
"errorLimit": {
"record": "0"
},
"speed": {
"throttle": true,
"concurrent": 1,
"mbps": "12"
}
},
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
}
}
Paramètres du script Reader
| Paramètre | Description | Obligatoire | Valeur par défaut |
|---|---|---|---|
datasource |
Le nom de la source de données. La valeur doit correspondre au nom de la source de données ajoutée dans DataWorks. | Oui | Aucune |
table |
La table à partir de laquelle synchroniser les données. | Oui | Aucune |
column |
Les colonnes à synchroniser, spécifiées sous forme de tableau JSON. Utilisez ["*"] pour sélectionner toutes les colonnes. Prend en charge l'élagage des colonnes, le réordonnancement, les constantes et les expressions de fonction MySQL. Par exemple : ["id", " table ", "1", "'bazhen.csy'", "null", "to_char(a + 1)", "2.3", "true"]. |
Oui | Aucune |
where |
La condition de filtre utilisée pour construire l'instruction SELECT. Si elle est laissée vide, la table entière est synchronisée. Prend en charge la synchronisation incrémentielle via des conditions de date ou d'ID. Par exemple : STRTODATE('${bdp.system.bizdate}','%Y%m%d') <= today AND today < DATEADD(STRTODATE('${bdp.system.bizdate}', '%Y%m%d'), interval 1 day). |
Non | Aucune |
splitPk |
La clé de fragmentation utilisée pour les lectures parallèles. | Non | Aucune |
Démo de script Writer
{
"type": "job",
"version": "2.0",
"steps": [
{
"stepType": "stream",
"parameter": {},
"name": "Reader",
"category": "reader"
},
{
"stepType": "drds",
"parameter": {
"postSql": [],
"datasource": "",
"column": [
"id"
],
"writeMode": "insert ignore",
"batchSize": "1024",
"table": "test",
"preSql": []
},
"name": "Writer",
"category": "writer"
}
],
"setting": {
"errorLimit": {
"record": "0"
},
"speed": {
"throttle": true,
"concurrent": 1,
"mbps": "12"
}
},
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
}
}
Paramètres du script Writer
| Paramètre | Description | Obligatoire | Valeur par défaut |
|---|---|---|---|
datasource |
Le nom de la source de données. La valeur doit correspondre au nom de la source de données ajoutée dans DataWorks. | Oui | Aucune |
table |
La table de destination dans laquelle les données sont écrites. | Oui | Aucune |
writeMode |
Le mode d'écriture. Valeurs valides : insert ignore (ignore les lignes qui violent les règles de clé primaire ou de contrainte) et replace into (remplace les lignes existantes en cas de conflit). |
Non | insert ignore |
column |
Les colonnes de destination dans lesquelles écrire les données, spécifiées sous forme de liste séparée par des virgules. Exemple : ["id", "name", "age"]. Utilisez ["*"] pour écrire dans toutes les colonnes dans l'ordre. |
Oui | Aucune |
preSql |
Instructions SQL à exécuter avant le démarrage de la tâche de synchronisation. Dans l'interface sans code, une seule instruction est prise en charge. Dans l'éditeur de code, plusieurs instructions sont prises en charge. Exemple : delete * from table xxx;. |
Non | Aucune |
postSql |
Instructions SQL à exécuter après la fin de la tâche de synchronisation. Dans l'interface sans code, une seule instruction est prise en charge. Dans l'éditeur de code, plusieurs instructions sont prises en charge. Exemple : delete * from table xxx where xx=xx;. |
Non | Aucune |
batchSize |
Le nombre d'enregistrements à valider par lot. Des valeurs plus élevées réduisent les allers-retours réseau et améliorent le débit, mais des valeurs très élevées peuvent provoquer des erreurs de mémoire insuffisante (OOM). | Non | 1024 |