O Data Transmission Service (DTS) oferece suporte à sincronização de dados incrementais de uma instância de conjunto de réplicas do ApsaraDB for MongoDB para uma função específica no Function Compute (FC). Escreva o código da função para processar adicionalmente os dados sincronizados.
Pré-requisitos
A instância de conjunto de réplicas de origem do ApsaraDB for MongoDB foi criada. Para mais informações, consulte Criar uma instância de conjunto de réplicas.
-
O serviço e a função de destino foram criados e o Handler Type foi definido como Event Handler. Para criar uma função, consulte Criar rapidamente uma função.
NotaApenas o Function Compute (FC) 2.0 é suportado.
Observações de uso
Tipo | Descrição |
Limites do banco de dados de origem |
|
Outros limites |
|
Casos especiais | Se o seu banco de dados de origem for um MongoDB autogerenciado:
Nota Se você selecionar a sincronização de banco de dados completo, crie uma tabela de heartbeat. Atualize ou grave nessa tabela a cada segundo. |
Faturamento
|
Tipo de sincronização |
Taxa de configuração da tarefa |
|
Sincronização incremental de dados |
Cobrada. Para mais informações, consulte Billing overview. |
Operações de sincronização suportadas
Tipo de sincronização | Descrição |
Sincronização incremental | OplogA sincronização incremental de dados não replica bancos de dados criados após o início da tarefa. As seguintes alterações são replicadas:
Change streamAs seguintes alterações são replicadas:
|
Permissões necessárias para contas de banco de dados
|
Banco de dados |
Permissões necessárias |
Métodos de criação e autorização |
|
Instância de origem do ApsaraDB for MongoDB |
As permissões de leitura nos bancos de dados de origem, admin e local. |
Gerencie as permissões dos usuários do banco de dados MongoDB |
Ao usar o ChangeStream como método de sincronização incremental, a conta do banco de dados de origem exige permissões de leitura do Change Streams em toda a instância (como readAnyDatabase). Se a origem for uma instância do ApsaraDB for MongoDB com conta personalizada, conceda também permissão de leitura à conta no banco de dados admin. Para obter detalhes, consulte Permissions of the root account specified during instance creation.
Procedimento
-
Acesse a página da lista de tarefas de sincronização da região de destino. Use um dos seguintes métodos:
Pelo console do DTS
Faça login no Data Transmission Service (DTS) console.
No painel de navegação à esquerda, clique em Data Synchronization.
No canto superior esquerdo da página, selecione a região da instância de sincronização.
Pelo console do DMS
NotaAs operações reais podem variar de acordo com o modo e o layout do console do DMS. Para mais informações, consulte Simple mode e Customize the layout and style of the DMS interface.
Faça login no Data Management (DMS).
Na barra de menu superior, escolha .
À direita de Data Synchronization Tasks, selecione a região da instância de sincronização.
Clique em Create Task para abrir a página de configuração da tarefa.
-
Configure os bancos de dados de origem e de destino.
Categoria
Configuração
Descrição
N/D
Task Name
O DTS gera automaticamente um nome para a tarefa. Especifique um nome descritivo para facilitar a identificação. O nome não precisa ser exclusivo.
Source Database
Select Existing Connection
-
Para usar uma instância de banco de dados added to the system (recém-criada ou salva), selecione-a na lista suspensa. As informações do banco de dados são configuradas automaticamente.
NotaNo console do DMS, este item de configuração chama-se Select a DMS database instance..
-
Caso não tenha adicionado a instância de banco de dados ao sistema ou não precise usar uma instância já adicionada, configure manualmente as seguintes informações do banco de dados.
Database Type
O tipo do banco de dados de origem. Selecione MongoDB.
Access Method
Selecione Alibaba Cloud Instance.
Instance Region
Selecione a região da instância de origem do ApsaraDB for MongoDB.
Replicate Data Across Alibaba Cloud Accounts
Indica se os dados são sincronizados entre contas da Alibaba Cloud. Neste exemplo, selecione No.
Architecture
Selecione Replica Set.
Migration Method
Selecione um método para a sincronização incremental de dados com base em seus requisitos.
-
Oplog (Recomendado):
Esta opção estará disponível se o Oplog estiver ativado no banco de dados de origem.
NotaO Oplog é ativado por padrão em bancos de dados MongoDB autogerenciados e instâncias do ApsaraDB for MongoDB. Este método oferece menor latência para tarefas de sincronização incremental, pois os logs são recuperados mais rapidamente. Recomendamos selecionar Oplog.
-
ChangeStream:
Esta opção estará disponível se o Change Streams estiver ativado no banco de dados de origem.
Nota-
Se o banco de dados de origem for uma instância do Amazon DocumentDB (cluster não elástico), selecione apenas ChangeStream.
-
Ao definir a Architecture do banco de dados de origem como Sharded Cluster, não é necessário especificar Shard account e Shard password.
-
Instance ID
Selecione o ID da instância de origem do ApsaraDB for MongoDB.
Authentication Database
Insira o nome do banco de dados de autenticação para a conta da instância de origem do ApsaraDB for MongoDB. O nome padrão é admin.
Database Account
Insira a conta do banco de dados para a instância de origem do ApsaraDB for MongoDB. Para requisitos de permissão, consulte Permission requirements for database accounts.
Database Password
Insira a senha correspondente à conta do banco de dados.
Encryption
O DTS oferece suporte a três métodos de conexão: Non-encrypted, SSL-encrypted e Mongo Atlas SSL. As opções de Encryption variam de acordo com o Access Method e a Architecture selecionados. Prevalecem as opções exibidas no console.
Nota-
Um banco de dados MongoDB com Architecture definida como Sharded Cluster e Migration Method como Oplog não oferece suporte a SSL-encrypted.
-
Se a origem for um banco de dados MongoDB autogerenciado (Access Method diferente de Alibaba Cloud Instance) com arquitetura Replica Set e você selecionar SSL-encrypted, o DTS também permitirá o upload de um certificado CA para que você verifique a conexão.
Destination Database
Select Existing Connection
-
Para usar uma instância de banco de dados added to the system (recém-criada ou salva), selecione-a na lista suspensa. As informações do banco de dados são configuradas automaticamente.
NotaNo console do DMS, este item de configuração chama-se Select a DMS database instance..
-
Caso não tenha adicionado a instância de banco de dados ao sistema ou não precise usar uma instância já adicionada, configure manualmente as seguintes informações do banco de dados.
Database Type
Selecione Function Compute.
Access Method
Selecione Alibaba Cloud Instance.
Instance Region
Por padrão, o valor é o mesmo da Instance Region do banco de dados de origem e não pode ser modificado.
Service
O nome do serviço do Function Compute de destino.
Function
A função de destino no Function Compute (FC) que recebe os dados.
Service Version and Alias
Selecione uma opção conforme a necessidade.
Default Version: A Service Version é fixada como LATEST.
Specified Version: Selecione a Service Version.
Specified Alias: Selecione o Service Alias.
NotaPara mais informações sobre os termos do Function Compute, consulte Terms.
-
-
Após concluir a configuração, clique em Test Connectivity and Proceed na parte inferior da página.
NotaCertifique-se de que os blocos CIDR de endereços IP dos servidores do DTS estejam adicionados às configurações de segurança dos bancos de dados de origem e de destino para permitir o acesso. Essa adição pode ser automática ou manual. Para mais informações, consulte Add the IP address CIDR blocks of DTS servers to a whitelist.
Se o banco de dados de origem ou de destino for autogerenciado (onde o Access Method não é Alibaba Cloud Instance), clique também em Test Connectivity na caixa de diálogo CIDR Blocks of DTS Servers.
-
Configure os objetos da tarefa.
-
Na página Configure Objects, configure os objetos a serem sincronizados.
Configuração
Descrição
Synchronization Types
Há suporte apenas para Incremental Data Synchronization, selecionada por padrão.
Data Format
O formato de armazenamento dos dados sincronizados para a função do FC. Há suporte apenas para Canal Json.
NotaPara descrições de parâmetros e exemplos do formato Canal Json, consulte Canal Json description.
Source Objects
Na caixa Source Objects, clique em um objeto a ser sincronizado e, em seguida, clique em
para movê-lo para a caixa Selected Objects.NotaSelecione objetos no nível do banco de dados ou da coleção.
Selected Objects
Na caixa Selected Objects, confirme os dados a serem sincronizados.
NotaPara remover objetos, selecione-os na caixa Selected Objects e clique em
.Para filtrar operações de atualização incremental por banco de dados ou coleção, clique com o botão direito em um objeto na caixa Selected Objects e selecione as operações na caixa de diálogo exibida.
-
Clique em Next: Advanced Settings para configurar parâmetros avançados.
Configuração
Observação
Dedicated Cluster for Task Scheduling
Por padrão, o DTS agenda tarefas em um cluster compartilhado, não sendo necessário selecionar um cluster. Para um desempenho mais estável, adquira um cluster dedicado para executar tarefas de sincronização do DTS. Para mais informações, consulte What is a DTS dedicated cluster?.
Retry Time for Failed Connections
Após o início de uma tarefa de sincronização, se a conexão com o banco de dados de origem ou de destino falhar, o DTS relatará um erro e tentará reconectar imediatamente. A duração padrão de nova tentativa é de 720 minutos. Especifique uma duração personalizada de 10 a 1.440 minutos. Recomendamos definir a duração para 30 minutos ou mais. Se o DTS reconectar com sucesso ao banco de dados dentro da duração especificada, a tarefa de sincronização será retomada automaticamente. Caso contrário, a tarefa falhará.
Nota-
Se houver várias instâncias do DTS (por exemplo, Instância A e Instância B) compartilhando a mesma origem ou destino, e o tempo de nova tentativa de rede for definido para 30 minutos na Instância A e 60 minutos na Instância B, a duração menor de 30 minutos será usada para ambas.
-
Como o DTS cobra pelo tempo de execução da tarefa durante o período de nova tentativa de conexão, personalize a duração da nova tentativa com base nas necessidades do seu negócio ou libere a instância do DTS o mais rápido possível após a liberação das instâncias de banco de dados de origem e de destino.
Retry Time for Other Issues
Após o início da tarefa de sincronização, se ocorrerem outros problemas não relacionados à conectividade com o banco de dados de origem ou de destino (como exceções de execução de DDL ou DML), o DTS relatará um erro e iniciará imediatamente operações contínuas de nova tentativa. A duração padrão é de 10 minutos. Personalize a duração dentro do intervalo de 1 a 1.440 minutos. Recomendamos definir para 10 minutos ou mais. Se as operações relevantes forem bem-sucedidas dentro da duração definida, a tarefa de sincronização será retomada automaticamente. Caso contrário, a tarefa falhará.
ImportanteO valor para Retry Time for Other Issues deve ser menor que o valor para Retry Time for Failed Connections.
Obtain the entire document after it is updated.
Durante a sincronização incremental de dados, especifica se os dados completos do documento correspondente a uma operação de atualização devem ser sincronizados para o destino.
NotaEste item de configuração está disponível apenas quando o Migration Method está definido como ChangeStream.
Yes: Sincroniza os dados completos do documento que contém o campo atualizado.
ImportanteEste recurso baseia-se nas capacidades nativas do MongoDB e pode aumentar a carga no banco de dados de origem, reduzindo a velocidade de coleta de dados incrementais e causando latência na instância de sincronização.
Se o DTS falhar ao obter os dados completos, apenas os dados do campo atualizado serão sincronizados.
No: Sincroniza apenas os dados dos campos atualizados.
Enable Throttling for Incremental Data Synchronization
Defina um limite de taxa para a tarefa de sincronização incremental. Para aliviar a pressão no banco de dados de destino, defina RPS of Incremental Data Synchronization e Data synchronization speed for incremental synchronization (MB/s).
Environment Tag
Se necessário, selecione uma tag de ambiente para identificar a instância. Para este exemplo, não é necessária nenhuma seleção.
Configure ETL
Escolha se deseja ativar o recurso de extração, transformação e carga (ETL). Para mais informações, consulte What is ETL? Valid values:
-
Yes: Ativa o recurso ETL. Insira instruções de processamento de dados no editor de código. Para mais informações, consulte Configure ETL in a data migration or data synchronization task.
-
No: Desativa o recurso ETL.
Monitoring and Alerting
Especifique se deseja configurar alertas. Se a sincronização falhar ou a latência exceder o limiar especificado, uma notificação será enviada para um contato de alerta.
-
No: Nenhum alerta configurado.
-
Yes: Configure alertas definindo um limiar de alerta e especificando um notificação de alerta. Para mais informações, consulte Configure monitoring and alerting during task configuration.
-
-
-
Salve a tarefa e execute uma pré-verificação.
Visualize os parâmetros da API para configurar esta instância passando o mouse sobre o botão Next: Save Task Settings and Precheck e clique em Preview OpenAPI parameters na dica exibida.
Depois de visualizar os parâmetros da API, clique em Next: Save Task Settings and Precheck na parte inferior da página.
NotaAntes do início do trabalho de sincronização, o DTS executa uma pré-verificação. O trabalho só pode começar após a aprovação de todos os itens.
Se a pré-verificação falhar, clique em View Details no item com falha. Corrija o problema conforme instruído e execute a pré-verificação novamente.
-
Se a pré-verificação retornar um aviso:
Se um item de verificação falhar e não puder ser ignorado, clique em View Details ao lado do item. Siga as instruções para corrigir o problema e execute a pré-verificação novamente.
Para itens de verificação que podem ser ignorados, clique em Confirm Alert Details, Ignore, OK e Precheck Again em sequência para pular o aviso e executar a pré-verificação novamente. Ocultar o item de aviso pode causar problemas como inconsistência de dados e representar riscos para o seu negócio.
-
Adquira uma instância.
Quando a Success Rate for de 100%, clique em Next: Purchase Instance.
-
Na página Purchase, selecione o método de faturamento e a especificação do link para a instância de sincronização de dados. A tabela a seguir descreve esses parâmetros em detalhes.
Categoria
Parâmetro
Descrição
New Instance Class
Método de faturamento
-
Assinatura: o pagamento é feito na criação da instância. Adequado para necessidades de longo prazo, é mais econômico que o pagamento conforme o uso. Quanto maior a duração da assinatura, maior o desconto.
-
Pagamento conforme o uso: a cobrança é feita por hora. Adequado para necessidades de curto prazo. Libere a instância imediatamente após o uso para economizar custos.
Configuração do grupo de recursos
O grupo de recursos ao qual a instância pertence. O padrão é o grupo de recursos padrão. Para mais informações, consulte What is Resource Management?.
Especificação do link
O DTS fornece especificações de sincronização com diferentes níveis de desempenho. A especificação do link de sincronização afeta a taxa de sincronização. Escolha uma especificação com base no seu cenário de negócios. Para mais informações, consulte Data synchronization link specifications.
Duração da assinatura
No modo de assinatura, selecione a duração e a quantidade para a instância. Escolha uma assinatura mensal de 1 a 9 meses ou uma assinatura anual de 1, 2, 3 ou 5 anos.
NotaEsta opção está disponível apenas quando o método de faturamento é Subscription.
-
Após concluir a configuração, leia e selecione Data Transmission Service (Pay-as-you-go) Service Terms.
-
Clique em Buy and Start. Na caixa de diálogo OK, clique em OK.
Visualize o progresso da tarefa na página Data Synchronization.
Próximos passos
Se uma tarefa do DTS falhar porque um único registro de dados a ser sincronizado excede 16 MB, modifique os objetos de sincronização ou use o recurso ETL para filtrar dados de objetos grandes. Para mais informações, consulte Modifique a configuração de ETL de uma tarefa de sincronização existente e Modifique os objetos de sincronização.
Escreva o código da função conforme necessário. Para mais informações, consulte Code Development Overview.
Formatos dos dados recebidos pelo serviço de destino
O FC recebe dados do tipo Object. Os dados incrementais do banco de dados de origem são armazenados no campo Records como uma matriz. Cada elemento na matriz é um registro de dados do tipo Object. A tabela a seguir descreve os campos do Object.
O FC recebe dois tipos de dados: DML e DDL.
DDL: Registra alterações na estrutura do banco de dados, como CreateIndex, CreateCollection, DropIndex e DropCollection.
DML: Registra operações de dados no banco de dados, como INSERT, UPDATE e DELETE.
Campo | Categoria | Observação |
| Boolean | Indica se a operação é uma operação de Data Definition Language (DDL). Valores válidos:
|
| String | O tipo da operação SQL.
|
| String | O nome do banco de dados MongoDB. |
| String | O nome da coleção do MongoDB. |
| String | O nome da chave primária para o MongoDB é fixo como _id. |
| Long | O tempo de execução da operação no banco de dados de origem. O valor é um carimbo de data/hora UNIX de 13 dígitos. Unidade: milissegundos. Nota Use um mecanismo de busca para encontrar um conversor de carimbo de data/hora UNIX. |
| Long | O horário de início da gravação no banco de dados de destino. Este é um carimbo de data/hora UNIX de 13 dígitos em milissegundos. Nota Use um mecanismo de busca para encontrar um conversor de carimbo de data/hora UNIX. |
| Object Array | A matriz contém um único elemento do tipo Object. A chave é doc e o valor é uma string JSON. Nota Desserialize o valor para obter o registro de dados. |
old | Object Array | Os dados antes da atualização. O formato é o mesmo do campo Importante Este campo está presente apenas quando |
| Int | O número de série da operação. |
Exemplo de formato de dados de operação DDL
Crie uma coleção
Instrução SQL
db.createCollection("testCollection")
Dados recebidos pelo FC
{
'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
Instrução SQL
db.testCollection.drop()
Dados recebidos pelo FC
{
'Records': [{
'data': [{
'doc': '{"drop": "testCollection"}'
}],
'pkNames': ['_id'],
'type': 'DDL',
'es': 1694056577000,
'database': 'MongoDBTest',
'id': 0,
'isDdl': True,
'table': 'testCollection',
'ts': 1694056577789
}]
}
Crie um índice
Instrução SQL
db.testCollection.createIndex({name:1})
Dados recebidos pelo FC
{
'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
Instrução SQL
db.testCollection.dropIndex({name:1})
Dados recebidos pelo FC
{
'Records': [{
'data': [{
'doc': '{"dropIndexes": "testCollection", "index": "name_1"}'
}],
'pkNames': ['_id'],
'type': 'DDL',
'es': 1694056817000,
'database': 'MongoDBTest',
'id': 0,
'isDdl': True,
'table': '$cmd',
'ts': 1694056818035
}]
}
Exemplo de formato de dados de operação DML
Insira dados
Instrução SQL
// Bulk insert
db.runCommand({insert: "user", documents: [{"name":"jack","age":20},{"name":"lili","age":20}]})
// Insert one by one
db.user.insert({"name":"jack","age":20})
db.user.insert({"name":"lili","age":20})
Dados recebidos pelo FC
{
'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 dados
Instrução SQL
db.user.update({"name":"jack"},{$set:{"age":30}})
Dados recebidos pelo FC
{
'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
}]
}
Exclua dados
Instrução SQL
db.user.remove({"name":"jack"})
Dados recebidos pelo FC
{
'Records': [{
'data': [{
'doc': '{"_id": {"$oid": "64f9397f6e255f74d65a****"}}'
}],
'pkNames': ['_id'],
'type': 'DELETE',
'es': 1694055452000,
'database': 'MongoDBTest',
'id': 0,
'isDdl': False,
'table': 'user',
'ts': 1694055452852
}]
}