Data Transmission Service (DTS) capture les modifications incrémentielles d'une instance ApsaraDB for MongoDB en cluster fragmenté et transmet chaque événement de modification à une fonction Function Compute au format Canal JSON. Rédigez le code de votre fonction pour traiter, transformer ou transférer ces événements vers des services en aval.
Contenu reçu par votre fonction
Chaque invocation transmet un objet contenant un tableau Records. Chaque élément du tableau représente un événement de modification :
| Champ | Type | Description |
|---|---|---|
isDdl |
Booléen | True pour les opérations DDL ; False pour les opérations DML |
type |
Chaîne | DML : INSERT, UPDATE ou DELETE. DDL : DDL |
database |
Chaîne | Nom de la base de données MongoDB |
table |
Chaîne | Nom de la collection |
pkNames |
Chaîne | Nom de la clé primaire. Toujours _id pour MongoDB |
es |
Long | Horodatage UNIX à 13 chiffres (ms) — moment où l'opération s'est produite sur la source |
ts |
Long | Horodatage UNIX à 13 chiffres (ms) — moment où DTS a commencé l'écriture vers la destination |
data |
Tableau d'objets | Tableau à un seul élément. L'élément possède une clé doc dont la valeur est une chaîne JSON représentant le document. Désérialisez la valeur pour lire l'enregistrement |
old |
Tableau d'objets | Même format que data. Présent uniquement lorsque type est UPDATE ; contient l'état du document avant la mise à jour |
id |
Int | Numéro de série de l'opération |
La fonction reçoit deux catégories d'opérations :
DDL — modifications de schéma :
CreateIndex,CreateCollection,DropIndex,DropCollectionDML — modifications de données :
INSERT,UPDATE,DELETE
Exemples de charges utiles
Créer une collection (DDL)
db.createCollection("testCollection")
{
"Records": [{
"data": [{"doc": "{\"create\": \"testCollection\", \"idIndex\": {\"v\": 2, \"key\": {\"_id\": 1}, \"name\": \"_id_\"}}"}],
"pkNames": ["_id"],
"type": "DDL",
"es": 1694056437000,
"database": "MongoDBTest",
"id": 0,
"isDdl": true,
"table": "testCollection",
"ts": 1694056437510
}]
}
Supprimer une collection (DDL)
db.testCollection.drop()
{
"Records": [{
"data": [{"doc": "{\"drop\": \"testCollection\"}"}],
"pkNames": ["_id"],
"type": "DDL",
"es": 1694056577000,
"database": "MongoDBTest",
"id": 0,
"isDdl": true,
"table": "testCollection",
"ts": 1694056577789
}]
}
Créer un index (DDL)
db.testCollection.createIndex({name: 1})
{
"Records": [{
"data": [{"doc": "{\"createIndexes\": \"testCollection\", \"v\": 2, \"key\": {\"name\": 1}, \"name\": \"name_1\"}"}],
"pkNames": ["_id"],
"type": "DDL",
"es": 1694056670000,
"database": "MongoDBTest",
"id": 0,
"isDdl": true,
"table": "testCollection",
"ts": 1694056670719
}]
}
Supprimer un index (DDL)
db.testCollection.dropIndex({name: 1})
{
"Records": [{
"data": [{"doc": "{\"dropIndexes\": \"testCollection\", \"index\": \"name_1\"}"}],
"pkNames": ["_id"],
"type": "DDL",
"es": 1694056817000,
"database": "MongoDBTest",
"id": 0,
"isDdl": true,
"table": "$cmd",
"ts": 1694056818035
}]
}
Insérer des documents (DML)
// Batch insert
db.runCommand({insert: "user", documents: [{"name": "jack", "age": 20}, {"name": "lili", "age": 20}]})
// Single insert
db.user.insert({"name": "jack", "age": 20})
{
"Records": [
{
"data": [{"doc": "{\"_id\": {\"$oid\": \"64f9397f6e255f74d65a****\"}, \"name\": \"jack\", \"age\": 20}"}],
"pkNames": ["_id"],
"type": "INSERT",
"es": 1694054783000,
"database": "MongoDBTest",
"id": 0,
"isDdl": false,
"table": "user",
"ts": 1694054784427
},
{
"data": [{"doc": "{\"_id\": {\"$oid\": \"64f9397f6e255f74d65a****\"}, \"name\": \"lili\", \"age\": 20}"}],
"pkNames": ["_id"],
"type": "INSERT",
"es": 1694054783000,
"database": "MongoDBTest",
"id": 0,
"isDdl": false,
"table": "user",
"ts": 1694054784428
}
]
}
Mettre à jour un document (DML)
db.user.update({"name": "jack"}, {$set: {"age": 30}})
{
"Records": [{
"data": [{"doc": "{\"$set\": {\"age\": 30}}"}],
"pkNames": ["_id"],
"old": [{"doc": "{\"_id\": {\"$oid\": \"64f9397f6e255f74d65a****\"}}"}],
"type": "UPDATE",
"es": 1694054989000,
"database": "MongoDBTest",
"id": 0,
"isDdl": false,
"table": "user",
"ts": 1694054990555
}]
}
Pour les opérations UPDATE, seule la commande $set s'exécute de manière synchrone lors de la synchronisation des données incrémentielles par DTS.
Supprimer un document (DML)
db.user.remove({"name": "jack"})
{
"Records": [{
"data": [{"doc": "{\"_id\": {\"$oid\": \"64f9397f6e255f74d65a****\"}}"}],
"pkNames": ["_id"],
"type": "DELETE",
"es": 1694055452000,
"database": "MongoDBTest",
"id": 0,
"isDdl": false,
"table": "user",
"ts": 1694055452852
}]
}
Limitations
Vérifiez ces contraintes avant de créer votre tâche de synchronisation.
Contraintes de périmètre :
Seule la synchronisation des données incrémentielles est prise en charge. La synchronisation complète des données n'est pas disponible.
La synchronisation interrégionale n'est pas prise en charge.
DTS ne peut pas synchroniser les données des bases de données
admin,configoulocal.Le mappage d'objets n'est pas pris en charge.
Les informations de transaction ne sont pas conservées. Les transactions sont converties en enregistrements individuels dans la destination.
Contraintes liées à la base de données source :
La source doit utiliser une architecture de cluster fragmenté, avec un maximum de 10 nœuds Mongos.
La source ne peut pas être un cluster Azure Cosmos DB for MongoDB ni un cluster élastique Amazon DocumentDB.
Les collections à synchroniser doivent disposer de contraintes PRIMARY KEY ou UNIQUE et tous les champs doivent être uniques. Sinon, la base de données de destination risque de contenir des enregistrements de données en double.
Un document unique ne doit pas dépasser 16 Mo. Les documents dépassant cette taille ne peuvent pas être écrits dans la fonction de destination et déclenchent une erreur. Utilisez la fonctionnalité ETL (Extract, Transform, Load) pour filtrer les champs volumineux si nécessaire.
Synchronisez jusqu'à 1 000 collections par tâche. Pour un nombre supérieur de collections, créez plusieurs tâches ou effectuez la synchronisation au niveau de la base de données.
L'instance source ne peut pas être mise à l'échelle pendant l'exécution d'une tâche de synchronisation.
DTS ne peut pas se connecter à une base de données MongoDB via un endpoint SRV.
Si l'équilibreur de charge de la base de données source est actif, la tâche peut subir des retards.
Si la base de données source est une base de données MongoDB auto-gérée utilisant une architecture de cluster fragmenté, définissez le paramètre Access Method sur Express Connect, VPN Gateway, or Smart Access Gateway ou Cloud Enterprise Network (CEN).
Contraintes d'écriture :
Pour les opérations INSERT, les données insérées doivent contenir des clés de fragmentation (shard keys).
Pour les opérations UPDATE, les clés de fragmentation ne peuvent pas être modifiées.
Configurez une seule tâche DTS par fonction de destination. Plusieurs tâches écrivant dans la même fonction peuvent provoquer des erreurs de données.
Exigences relatives à l'oplog et aux flux de modifications (change streams) :
L'oplog doit être activé et conserver au moins 7 jours de données de journal, OU les flux de modifications doivent être activés pour couvrir au moins les 7 derniers jours de modifications. Si aucune de ces conditions n'est remplie, DTS peut échouer à capturer les modifications sources, ce qui peut entraîner une incohérence ou une perte de données non couverte par l'accord de niveau de service (SLA) de DTS.
Restrictions liées aux flux de modifications (le cas échéant) :
Les flux de modifications nécessitent MongoDB 4.0 ou une version ultérieure.
La synchronisation bidirectionnelle n'est pas prise en charge lors de l'utilisation des flux de modifications.
Pour les clusters Amazon DocumentDB non élastiques, utilisez les flux de modifications : définissez Migration Method sur ChangeStream et Architecture sur Sharded Cluster.
Nouvelles bases de données :
DTS ne synchronise pas les données incrémentielles des bases de données créées après le démarrage de la tâche de synchronisation.
Opérations prises en charge
Les opérations capturées dépendent de la méthode de migration.
Utilisation de l'oplog (recommandé) :
CREATE COLLECTION,CREATE INDEXDROP DATABASE,DROP COLLECTION,DROP INDEXRENAME COLLECTIONOpérations INSERT, UPDATE et DELETE au niveau des documents
Utilisation des flux de modifications :
DROP DATABASE,DROP COLLECTIONRENAME COLLECTIONOpérations INSERT, UPDATE et DELETE au niveau des documents
Facturation
La synchronisation des données incrémentielles est facturée. Pour plus de détails sur les tarifs, consultez Présentation de la facturation.
| Méthode de facturation | Description |
|---|---|
| Abonnement | Paiement anticipé pour 1 à 9 mois, ou 1, 2, 3 ou 5 ans. Plus économique pour une utilisation à long terme |
| Paiement à l'utilisation | Facturation horaire. Libérez l'instance lorsqu'elle n'est plus nécessaire pour arrêter la facturation |
DTS facture l'instance pendant les périodes de nouvelle tentative de connexion.
Prérequis
Avant de commencer, assurez-vous d'avoir :
Une instance ApsaraDB for MongoDB en cluster fragmenté en cours d'exécution. Consultez Créer une instance de cluster fragmenté
Un service et une fonction Function Compute, avec Handler Type défini sur Event Handler. Consultez Créer rapidement une fonction
-
Un compte de base de données sur l'instance ApsaraDB for MongoDB source disposant d'autorisations de lecture sur les bases de données source,
adminetlocal. Consultez Gérer les autorisations des utilisateurs de base de données MongoDBRemarqueSi vous utilisez ChangeStream comme méthode de synchronisation incrémentielle, le compte de la base de données source nécessite des autorisations de lecture Change Streams à l'échelle de l'instance (telles que
readAnyDatabase). Si la source est une instance ApsaraDB for MongoDB avec un compte personnalisé, vous devez également accorder au compte l'autorisation de lecture sur la base de donnéesadmin. Pour plus de détails, consultez Autorisations du compte racine spécifié lors de la création de l'instance.
Créer une tâche de synchronisation
Étape 1 : Accéder à la page Data Synchronization
Accédez à la page Data Synchronization en utilisant l'une des consoles suivantes :
Console DTS
Connectez-vous à la console DTS.console DTS
Dans le volet de navigation de gauche, cliquez sur Data Synchronization.
Dans le coin supérieur gauche, sélectionnez la région où la tâche de synchronisation sera exécutée.
Console DMS
Le chemin de navigation exact dépend de la disposition de votre console DMS. Consultez Mode simple et Personnaliser la disposition et le style de la console DMS.
Connectez-vous à la console DMS.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 cible.
Étape 2 : Configurer les bases de données source et de destination
Cliquez sur Create Task, puis configurez les paramètres suivants :
| Section | Paramètre | Description |
|---|---|---|
| N/A | Task Name | DTS génère automatiquement un nom. Spécifiez un nom descriptif pour faciliter l'identification de la tâche. L'unicité n'est pas requise |
| Base de données source | Select Existing Connection | Sélectionnez une instance de base de données enregistrée pour remplir automatiquement les paramètres ci-dessous, ou configurez-les manuellement |
| Database Type | Sélectionnez MongoDB | |
| Access Method | Sélectionnez Alibaba Cloud Instance | |
| Instance Region | Région de l'instance MongoDB source | |
| Replicate Data Across Alibaba Cloud Accounts | Sélectionnez No pour une synchronisation au sein du même compte | |
| Architecture | Sélectionnez Sharded Cluster | |
| Migration Method | Méthode utilisée par DTS pour capturer les données incrémentielles. Options : Oplog (recommandé) ou ChangeStream (voir les détails ci-dessous) | |
| Instance ID | ID de l'instance MongoDB source | |
| Authentication Database | Base de données stockant les identifiants du compte. Par défaut : admin |
|
| Database Account | Compte de la base de données source disposant des autorisations de lecture requises | |
| Database Password | Mot de passe du compte de base de données | |
| Shard account | Compte permettant d'accéder aux fragments dans l'instance source | |
| Shard password | Mot de passe du compte de fragment | |
| Encryption | Mode de chiffrement de la connexion. Options : Non-encrypted, SSL-encrypted ou Mongo Atlas SSL. Les options disponibles dépendent des sélections Access Method et Architecture. SSL-encrypted n'est pas disponible lorsque Architecture est Sharded Cluster et que Migration Method est Oplog | |
| Base de données de destination | Select Existing Connection | Sélectionnez une instance Function Compute enregistrée pour remplir automatiquement les paramètres ci-dessous, ou configurez-les manuellement |
| Database Type | Sélectionnez Function Compute | |
| Access Method | Sélectionnez Alibaba Cloud Instance | |
| Instance Region | Correspond à la région source. Ne peut pas être modifié | |
| Service | Le service Function Compute contenant la fonction de destination | |
| Function | La fonction recevant les données synchronisées | |
| Service Version and Alias | Version ou alias du service. Options : Default Version (fixé sur LATEST), Specified Version (nécessite Service Version) ou Specified Alias (nécessite Service Alias). Consultez Conditions |
Choisir une méthode de migration :
| Méthode | Quand l'utiliser |
|---|---|
| Oplog (recommandé) | L'oplog est activé sur la source (paramètre par défaut pour MongoDB auto-géré et ApsaraDB for MongoDB). Offre une latence de synchronisation plus faible grâce à une extraction plus rapide des journaux |
| ChangeStream | L'oplog est désactivé, ou vous utilisez un cluster Amazon DocumentDB non élastique (flux de modifications requis). Nécessite MongoDB 4.0 ou une version ultérieure. La synchronisation bidirectionnelle n'est pas prise en charge |
Lorsque Architecture est Sharded Cluster et que Migration Method est ChangeStream , les paramètres Shard account et Shard password ne sont pas requis.
Étape 3 : Tester la connectivité
Cliquez sur Test Connectivity and Proceed.
Assurez-vous que les blocs CIDR du serveur DTS sont ajoutés au groupe de sécurité ou à la liste d'autorisation de la source et de la destination. Consultez Ajouter les blocs CIDR des serveurs DTS . Si la source ou la destination utilise une méthode d'accès auto-gérée, cliquez d'abord sur Test Connectivity dans la boîte de dialogue CIDR Blocks of DTS Servers .
Étape 4 : Sélectionner les objets à synchroniser
À l'étape Configure Objects, configurez les éléments suivants :
| Paramètre | Description |
|---|---|
| Synchronization Types | Fixé sur Incremental Data Synchronization. Ne peut pas être modifié |
| Data Format | Fixé sur Canal Json. Pour les descriptions des champs, consultez la section Canal Json des formats de données d'un sujet de cluster Kafka |
| Source Objects | Sélectionnez les bases de données ou les collections à synchroniser, puis cliquez sur |
| Selected Objects | Vérifiez les objets sélectionnés. Cliquez sur |
Étape 5 : Configurer les paramètres avancés
Cliquez sur Next: Advanced Settings, puis configurez :
| Paramètre | Description |
|---|---|
| Dedicated Cluster for Task Scheduling | Par défaut, DTS planifie la tâche sur le cluster partagé. Achetez un cluster dédié pour une stabilité accrue. Consultez Qu'est-ce qu'un cluster dédié DTS ? |
| Retry Time for Failed Connections | Durée pendant laquelle DTS effectue des nouvelles tentatives lorsque la source ou la destination est inaccessible. Plage : 10–1440 minutes. Par défaut : 720. Définissez au moins 30 minutes. Si plusieurs tâches partagent la même source ou destination, la durée de nouvelle tentative la plus courte est prioritaire |
| Retry Time for Other Issues | Durée pendant laquelle DTS effectue des nouvelles tentatives pour les opérations DDL ou DML ayant échoué. Plage : 1–1440 minutes. Par défaut : 10. Définissez au moins 10 minutes. Doit être inférieure à Retry Time for Failed Connections |
| Obtain the entire document after it is updated | Flux de modifications uniquement. Yes : envoyer le document complet après une mise à jour. No : envoyer uniquement les champs modifiés |
| Enable Throttling for Incremental Data Synchronization | Limiter le débit de synchronisation pour réduire la charge sur la destination. Configurez RPS of Incremental Data Synchronization et Data synchronization speed for incremental synchronization (MB/s) |
| Environment Tag | Tag permettant d'identifier l'environnement de l'instance DTS. Facultatif |
| Configure ETL | Activez la fonctionnalité ETL pour transformer les données en transit. Consultez Qu'est-ce que l'ETL ? et Configurer l'ETL dans une tâche de migration ou de synchronisation de données |
| Monitoring and Alerting | Envoyer des alertes lorsque la tâche échoue ou que la latence de synchronisation dépasse un seuil. Consultez Configurer la surveillance et les alertes lors de la création d'une tâche DTS |
Étape 6 : Exécuter la prévérification
Cliquez sur Next: Save Task Settings and Precheck.
Pour afficher un aperçu des paramètres API pour cette configuration de tâche, placez le pointeur sur Next: Save Task Settings and Precheck et cliquez sur Preview OpenAPI parameters .
DTS exécute une prévérification avant de démarrer la tâche de synchronisation. La tâche ne démarre qu'après la réussite de la prévérification.
Si un élément échoue : cliquez sur View Details à côté de l'élément ayant échoué, corrigez le problème signalé, puis cliquez sur Precheck Again.
-
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, confirmez avec OK, puis cliquez sur Precheck Again. Ignorer les alertes peut entraîner une incohérence des données.
Étape 7 : Acheter une instance
Attendez que le Success Rate atteigne 100 %, puis cliquez sur Next: Purchase Instance.
Sur la page buy, configurez :
| Section | Paramètre | Description |
|---|---|---|
| New Instance Class | Billing Method | Subscription ou Pay-as-you-go |
| Resource Group Settings | Groupe de ressources pour l'instance. Par défaut : default resource group. Consultez Qu'est-ce que Resource Management ? | |
| Instance Class | Détermine la vitesse de synchronisation. Consultez Classes d'instance des instances de synchronisation de données | |
| Subscription Duration | Disponible uniquement pour la facturation Subscription. Options : 1 à 9 mois, ou 1, 2, 3 ou 5 ans |
Lisez et acceptez les Data Transmission Service (Pay-as-you-go) Service Terms.
Cliquez sur Buy and Start, puis cliquez sur OK dans la boîte de dialogue de confirmation.
Suivez la progression de la tâche dans la liste des tâches.
Étapes suivantes
Rédigez votre gestionnaire d'événements Function Compute pour traiter la charge utile Canal JSON. Utilisez le champ
isDdlpour distinguer la logique DDL et DML, et désérialisez la chaînedocdans chaque élémentdatapour accéder aux champs du document.Pour réduire la charge des documents contenant des champs volumineux sur votre fonction, configurez des filtres ETL avant que les données n'atteignent la fonction. Consultez Configurer l'ETL dans une tâche de migration ou de synchronisation de données.
Pour surveiller l'état de santé de la synchronisation, configurez les alertes dans Advanced Settings ou après la création de la tâche. Consultez Configurer la surveillance et les alertes lors de la création d'une tâche DTS.
En cas d'échec d'une tâche, l'assistance technique DTS tentera de la restaurer dans un délai de 8 heures. Pendant la restauration, la tâche peut être redémarrée et les paramètres de la tâche (et non ceux de la base de données) peuvent être ajustés. Pour obtenir la liste des paramètres susceptibles d'être modifiés, consultez Modifier les paramètres de l'instance.