O Data Transmission Service (DTS) captura alterações incrementais de um cluster sharded do ApsaraDB for MongoDB e entrega cada evento de alteração para uma função do Function Compute no formato Canal JSON. Escreva o código da sua função para processar, transformar ou encaminhar os eventos para sistemas downstream.
O que sua função recebe
Cada invocação passa um objeto com um array Records. Cada elemento no array representa um evento de alteração:
|
Campo |
Tipo |
Descrição |
|
|
Boolean |
|
|
|
String |
DML: |
|
|
String |
Nome do banco de dados MongoDB |
|
|
String |
Nome da coleção |
|
|
String |
Nome da chave primária. Sempre |
|
|
Long |
Timestamp UNIX de 13 dígitos (ms) — quando a operação ocorreu na source |
|
|
Long |
Timestamp UNIX de 13 dígitos (ms) — quando o DTS começou a gravar no destino |
|
|
Object Array |
Array de um elemento. O elemento possui uma chave |
|
|
Object Array |
Mesmo formato de |
|
|
Int |
Número de série da operação |
A função recebe duas categorias de operações:
DDL — alterações de schema:
CreateIndex,CreateCollection,DropIndex,DropCollectionDML — alterações de dados:
INSERT,UPDATE,DELETE
Payloads de exemplo
Crie uma coleção (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
}]
}
Exclua uma coleção (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
}]
}
Crie um índice (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
}]
}
Exclua um índice (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
}]
}
Inserir documentos (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
}
]
}
Atualize um documento (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
}]
}
Para operações UPDATE, apenas o comando $set é executado de forma síncrona quando o DTS sincroniza dados incrementais.
Exclua um documento (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
}]
}
Limitações
Revise estas restrições antes de criar sua tarefa de sincronização.
Restrições de escopo:
O DTS suporta apenas a sincronização incremental de dados, sem suporte para sincronização completa.
O DTS não suporta a sincronização entre regiões.
O DTS não pode sincronizar dados dos bancos de dados
admin,configoulocal.O DTS não suporta o mapeamento de objetos.
O DTS não retém informações de transação. As transações são convertidas em registros individuais no destino.
Restrições do banco de dados source:
A source deve usar a arquitetura de cluster sharded, com no máximo 10 nós Mongos.
A source não pode ser um cluster do Azure Cosmos DB for MongoDB ou um cluster elástico do Amazon DocumentDB.
As coleções a serem sincronizadas devem ter restrições PRIMARY KEY ou UNIQUE e todos os campos devem ser únicos. Caso contrário, o banco de dados de destino poderá conter registros duplicados.
Um único documento não pode exceder 16 MB. O DTS não grava documentos acima desse tamanho na função de destino, gerando um erro. Se necessário, use o recurso de extração, transformação e carga (ETL) para filtrar campos grandes.
Sincronize até 1.000 coleções por tarefa. Para mais coleções, crie várias tarefas ou sincronize no nível do banco de dados.
Não redimensione a instância source enquanto uma tarefa de sincronização estiver em execução.
O DTS não pode se conectar a um banco de dados MongoDB por meio de um endpoint SRV.
Se o balanceador do banco de dados source estiver ativo, a tarefa poderá sofrer atrasos.
Se o banco de dados source for um banco de dados MongoDB autogerenciado que usa a arquitetura de cluster sharded, defina o parâmetro Access Method como Express Connect, VPN Gateway, or Smart Access Gateway ou Cloud Enterprise Network (CEN).
Restrições de gravação:
Para operações INSERT, os dados inseridos devem conter chaves de shard.
Não é possível modificar chaves de shard em operações UPDATE.
Configure apenas uma tarefa do DTS por função de destino. Várias tarefas que gravam na mesma função podem causar erros de dados.
Requisitos de oplog e change stream:
O oplog deve estar ativado e reter pelo menos 7 dias de dados de log, ou os change streams devem estar ativados para cobrir pelo menos os últimos 7 dias de alterações. Se nenhuma dessas condições for atendida, o DTS poderá falhar ao capturar as alterações da source, causando inconsistência ou perda de dados não coberta pelo acordo de nível de service (SLA) do DTS.
Restrições de change stream (se aplicável):
Os change streams exigem o MongoDB 4.0 ou posterior.
O DTS não suporta sincronização bidirecional ao usar change streams.
Para clusters não elásticos do Amazon DocumentDB, use change streams: defina Migration Method como ChangeStream e Architecture como Sharded Cluster.
Novos bancos de dados:
O DTS não sincroniza dados incrementais de bancos de dados criados após o início da tarefa de sincronização.
Operações suportadas
As operações capturadas dependem do método de migração.
Usando oplog (recomendado):
CREATE COLLECTION,CREATE INDEXDROP DATABASE,DROP COLLECTION,DROP INDEXRENAME COLLECTIONINSERT, UPDATE e DELETE no nível do documento
Usando change streams:
DROP DATABASE,DROP COLLECTIONRENAME COLLECTIONINSERT, UPDATE e DELETE no nível do documento
Faturamento
A sincronização incremental de dados é cobrada. Para detalhes de preços, consulte Billing overview.
|
Método de faturamento |
Descrição |
|
Assinatura |
Pague antecipadamente por 1 a 9 meses, ou 1, 2, 3 ou 5 anos. Mais econômico para uso a longo prazo |
|
Pagamento conforme o uso |
Cobrança por hora. Libere a instância quando não for mais necessária para interromper as cobranças |
O DTS cobra pela instância durante os períodos de tentativa de reconexão.
Pré-requisitos
Antes de começar, certifique-se de ter:
Uma instância de cluster sharded do ApsaraDB for MongoDB em execução. Consulte Create a sharded cluster instance
Um service e uma função do Function Compute, com Handler Type definido como Event Handler. Consulte Crie rapidamente uma função
-
Uma conta de banco de dados na instância source do ApsaraDB for MongoDB com permissões de leitura nos bancos de dados source,
adminelocal. Consulte Manage the permissions of MongoDB database usersNotaSe você usar ChangeStream como método de sincronização incremental, a conta do banco de dados source requer permissões de leitura de Change Streams em toda a instância (como
readAnyDatabase). Se a source for uma instância do ApsaraDB for MongoDB com uma conta personalizada, você também deve conceder à conta permissão de leitura no banco de dadosadmin. Para obter detalhes, consulte Permissions of the root account specified during instance creation.
Crie uma tarefa de sincronização
Etapa 1: Acesse a página Data Synchronization
Acesse a página Data Synchronization usando um dos consoles:
Console do DTS
Faça logon no console do DTS.console do DTS
No painel de navegação à esquerda, clique em Data Synchronization.
No canto superior esquerdo, selecione a região de execução da tarefa de sincronização.
Console do DMS
O caminho exato de navegação depende do layout do seu console do DMS. Consulte Modo simples e Personalizar o layout e o estilo do console do DMS.
Faça logon no console do DMS.console do DMS
Na barra de navegação superior, mova o ponteiro sobre Data + AI e escolha DTS (DTS) > Data Synchronization.
No menu suspenso à direita de Data Synchronization Tasks, selecione a região de destino.
Etapa 2: Configure os bancos de dados source e de destino
Clique em Create Task e configure os seguintes parâmetros:
| Seção | Parâmetro | Descrição |
|---|---|---|
| N/D | Task Name | O DTS gera um nome automaticamente. Especifique um nome descritivo para facilitar a identificação da tarefa. A exclusividade não é obrigatória |
| Source Database | Select Existing Connection | Selecione uma instância de banco de dados registrada para preencher automaticamente os parâmetros abaixo ou configure-os manualmente |
| Database Type | Selecione MongoDB | |
| Access Method | Selecione Alibaba Cloud Instance | |
| Instance Region | Região da instância source do MongoDB | |
| Replicate Data Across Alibaba Cloud Accounts | Selecione No para sincronização na mesma conta | |
| Architecture | Selecione Sharded Cluster | |
| Migration Method | Como o DTS captura dados incrementais. Opções: Oplog (recomendado) ou ChangeStream (veja os detalhes abaixo) | |
| Instance ID | ID da instância source do MongoDB | |
| Authentication Database | Banco de dados que armazena as credenciais da conta. Padrão: admin |
|
| Database Account | Conta do banco de dados source com as permissões de leitura necessárias | |
| Database Password | Senha da conta do banco de dados | |
| Shard account | Conta para acessar shards na instância source | |
| Shard password | Senha da conta de shard | |
| Encryption | Modo de criptografia da conexão. Opções: Non-encrypted, SSL-encrypted ou Mongo Atlas SSL. As opções disponíveis dependem das seleções de Access Method e Architecture. SSL-encrypted não está disponível quando Architecture é Sharded Cluster e Migration Method é Oplog | |
| Destination Database | Select Existing Connection | Selecione uma instância registrada do Function Compute para preencher automaticamente os parâmetros abaixo ou configure-os manualmente |
| Database Type | Selecione Function Compute | |
| Access Method | Selecione Alibaba Cloud Instance | |
| Instance Region | Corresponde à região da source. Não é possível alterá-la | |
| Service | O service do Function Compute que contém a função de destino | |
| Function | A função que recebe os dados sincronizados | |
| Service Version and Alias | Versão ou alias do service. Opções: Default Version (fixo em LATEST), Specified Version (requer Service Version) ou Specified Alias (requer Service Alias). Consulte Terms |
Escolha um método de migração:
|
Método |
Quando usar |
|
Oplog (recomendado) |
O oplog está ativado na source (padrão para MongoDB autogerenciado e ApsaraDB for MongoDB). Fornece menor latência de sincronização devido à extração mais rápida de logs |
|
ChangeStream |
O oplog está desativado ou você usa um cluster não elástico do Amazon DocumentDB (change streams obrigatórios). Exige MongoDB 4.0 ou posterior. O DTS não suporta sincronização bidirecional |
Quando Architecture é Sharded Cluster e Migration Method é ChangeStream , os parâmetros Shard account e Shard password não são necessários.
Etapa 3: Testar a conectividade
Clique em Test Connectivity and Proceed.
Certifique-se de adicionar os blocos CIDR dos servidores DTS ao grupo de segurança ou à lista de permissões da source e do destino. Consulte Adicionar os blocos CIDR dos servidores DTS . Se a source ou o destino usar um método de acesso autogerenciado, clique primeiro em Test Connectivity na caixa de diálogo CIDR Blocks of DTS Servers .
Etapa 4: Selecione objetos para sincronizar
Na etapa Configure Objects, configure os seguintes parâmetros:
|
Parâmetro |
Descrição |
|
Synchronization Types |
Fixo como Incremental Data Synchronization. Não é possível alterá-lo |
|
Data Format |
Fixo como Canal Json. Para descrições dos campos, consulte a Canal Json section dos formatos de dados de um tópico de cluster Kafka |
|
Source Objects |
Selecione os bancos de dados ou coleções para sincronizar e clique em |
|
Selected Objects |
Revise os objetos selecionados. Clique em |
Etapa 5: Configure configurações avançadas
Clique em Next: Advanced Settings e configure:
|
Parâmetro |
Descrição |
|
Dedicated Cluster for Task Scheduling |
Por padrão, o DTS agenda a tarefa para o cluster compartilhado. Adquira um cluster dedicado para maior estabilidade. Consulte O que é um cluster dedicado do DTS |
|
Retry Time for Failed Connections |
Tempo durante o qual o DTS tenta reconectar quando a source ou o destino está inacessível. Intervalo: 10 a 1440 minutos. Padrão: 720. Defina como pelo menos 30 minutos. Se várias tarefas compartilharem a mesma source ou destino, o menor tempo de nova tentativa terá precedência |
|
Retry Time for Other Issues |
Tempo durante o qual o DTS repete operações DDL ou DML com falha. Intervalo: 1 a 1440 minutos. Padrão: 10. Defina como pelo menos 10 minutos. Deve ser menor que Retry Time for Failed Connections |
|
Obtain the entire document after it is updated |
Apenas para ChangeStream. Yes: envia o documento completo após uma atualização. No: envia apenas os campos alterados |
|
Enable Throttling for Incremental Data Synchronization |
Limite o throughput de sincronização para reduzir a carga no destino. Configure RPS of Incremental Data Synchronization e Data synchronization speed for incremental synchronization (MB/s) |
|
Environment Tag |
Tag para identificar o ambiente da instância do DTS. Opcional |
|
Configure ETL |
Ative o recurso ETL para transformar dados em trânsito. Consulte O que é ETL? e Configure ETL em uma tarefa de migração ou sincronização de dados |
|
Monitoring and Alerting |
Envie alertas quando a tarefa falhar ou a latência de sincronização exceder um limiar. Consulte Configure monitoramento e alertas ao criar uma tarefa do DTS |
Etapa 6: Execute a pré-verificação
Clique em Next: Save Task Settings and Precheck.
visualize os parâmetros da API para esta configuração de tarefa passando o mouse sobre Next: Save Task Settings and Precheck e clique em Preview OpenAPI parameters .
O DTS executa uma pré-verificação antes de iniciar a tarefa de sincronização. A tarefa só é iniciada após a aprovação nessa pré-verificação.
Se um item falhar: clique em View Details ao lado do item com falha, corrija o problema relatado e clique em Precheck Again.
-
Se um alerta for acionado:
Se não for possível ignorar o alerta: clique em View Details, corrija o problema e execute a pré-verificação novamente.
Se for possível ignorar o alerta: clique em Confirm Alert Details, clique em Ignore na caixa de diálogo, confirme com OK e clique em Precheck Again. Ignorar alertas pode resultar em inconsistência de dados.
Etapa 7: Comprar uma instância
Aguarde até que a Success Rate atinja 100% e clique em Next: Purchase Instance.
Na página buy, configure:
| Seção | Parâmetro | Descrição |
|---|---|---|
| New Instance Class | Billing Method | Assinatura ou Pagamento conforme o uso |
| Resource Group Settings | Grupo de recursos para a instância. Padrão: default resource group. Consulte O que é o Resource Management? | |
| Instance Class | Determina a velocidade de sincronização. Consulte Classes de instância de instâncias de sincronização de dados | |
| Subscription Duration | Disponível apenas para faturamento por Assinatura. Opções: 1 a 9 meses, ou 1, 2, 3 ou 5 anos |
Leia e selecione Data Transmission Service (Pay-as-you-go) Service Terms.
Clique em Buy and Start e clique em OK na caixa de diálogo de confirmação.
Acompanhe o progresso da tarefa na lista de tarefas.
Próximos passos
Escreva o manipulador de eventos do Function Compute para processar o payload Canal JSON. Use o campo
isDdlpara ramificar a lógica entre DDL e DML e desserialize a stringdocem cada elementodatapara acessar os campos do documento.Para reduzir a carga de documentos com campos grandes na sua função, configure filtros ETL antes que os dados cheguem à função. Consulte Configure ETL em uma tarefa de migração ou sincronização de dados.
Para monitorar a integridade da sincronização, configure alertas em Advanced Settings ou após a criação da tarefa. Consulte Configure monitoramento e alertas ao criar uma tarefa do DTS.
Se uma tarefa falhar, o suporte técnico do DTS tentará restaurá-la em até 8 horas. Durante a restauração, o DTS pode reiniciar a tarefa e ajustar os parâmetros da tarefa (não os parâmetros do banco de dados). Para obter uma lista de parâmetros modificáveis, consulte Modifique parâmetros da instância.