As migrações de dados modernas raramente envolvem um simples lift-and-shift; elas exigem transformação, limpeza e enriquecimento para que os aplicativos possam aproveitar imediatamente os pontos fortes da plataforma de destino. O serviço Eventing do Couchbase Capella permite transformações em linha orientadas por eventos à medida que os dados chegam, permitindo que as equipes reformulem esquemas, normalizem valores, enriqueçam com metadados e preparem documentos para SQL++, pesquisa, análise e sincronização móvel desde o início.
Objetivos
-
-
- Forneça um padrão de migração repetível e orientado por eventos de qualquer banco de dados relacional ou não relacional para o Couchbase Capella que transforma os dados em tempo real para usabilidade imediata em aplicativos e análises
Neste exemplo, usaremos o MongoDB Atlas como banco de dados de origem. - Fornecer uma implementação de referência mínima, pronta para produção, usando cbimport e Capella Eventing para converter esquemas de origem (por exemplo, decimais, estruturas aninhadas, identificadores) em modelos otimizados para consultas
- Descreva as proteções operacionais, os pré-requisitos e as etapas de validação para que as equipes possam executar com confiança, com resultados previsíveis e opções de reversão, se necessário
- Forneça um padrão de migração repetível e orientado por eventos de qualquer banco de dados relacional ou não relacional para o Couchbase Capella que transforma os dados em tempo real para usabilidade imediata em aplicativos e análises
-
Por que a migração orientada por eventos
-
-
- A transformação em linha reduz o retrabalho pós-migração, aplicando a normalização e o enriquecimento do esquema à medida que os documentos chegam, acelerando assim a transferência e diminuindo os riscos
- As funções de eventos mantêm as transformações com controle de origem e auditáveis, para que as alterações sejam consistentes, testáveis e repetíveis em todos os ambientes
- O resultado são dados prontos para o Capella que suportam SQL++, Full-Text Search, Vector Search, Analytics e App Services sem fases intermediárias de refatoração
-

Pré-requisitos
-
-
- Instalar Ferramentas de banco de dados MongoDB (inclui mongoexportação, mongoimportação, etc.)
- Download da CLI do Couchbase
- Conta paga da Capella e acesso ao cluster, com endereços IP permitidos configurados e o certificado raiz da Capella baixado e salvo como ca.pem
- Crie os seguintes artefatos no Couchbase Capella:
-
- Um balde com nome: Teste
- Escopo sob balde: Teste com nome: amostra_airbnb
- Duas coleções com nomes listingAndReviewsTemp e listingAndReviews
- Uma função Javascript com o nome dataTransformation
Clique para assistir aos vídeos abaixo e veja o Configuração da Capella e criação de acesso ao cluster passos.
-
- Credenciais com acesso de leitura/gravação ao bucket/escopo/coleções de destino e ferramentas CLI instaladas para os utilitários de exportação cbimport e MongoDB.
- Cadeias de conexão para MongoDB Atlas (origem) e Couchbase Capella (destino), além de uma coleção temporária para ingestão inicial antes da transformação.
-
Exemplo de código-fonte usando o MongoDB Atlas
Um documento de anúncio representativo do Airbnb ilustra as necessidades comuns de transformação: normalização decimal, manipulação de identificadores, campos aninhados e nivelamento para desempenho de consulta.
Os campos de exemplo incluem listing_url, O sistema de metadados do host, o endereço com coordenadas e os invólucros decimais para campos como banheiros e preço usando o formato JSON estendido do MongoDB.
Padrão de transformação de eventos
-
-
- Use uma coleção temporária como a fonte de eventos (listingAndReviewsTemp) e uma coleção de destino (listingAndReviews) para que os documentos transformados mantenham a migração idempotente e testável.
- Converter decimais JSON estendidos do MongoDB em números nativos, renomear campos para facilitar a leitura do domínio, derivar uma chave do Couchbase a partir do original _id, e carimbar documentos com migrated_at.
-
Etapa 1: Exportar do MongoDB
Exportar documentos para JSON usando mongoexportação com -jsonArray para produzir uma lista limpa para importação em lote para o Couchbase.
Assista a este vídeo sobre a execução do comando de exportação do Mongo:

Exemplo de sintaxe:
|
1 2 3 4 5 6 7 8 |
mongoexport \ --uri="mongodb+srv://cluster0.xxxx.mongodb.net/test" \ --username=Test \ --password=Test_123 \ --authenticationDatabase admin \ --collection=listingAndReviews \ --out=listingAndReviews.json \ --jsonArray |
Etapa 2: implantar eventos
-
-
- Configure a função Eventing com a coleção temporária como fonte (listingAndReviewsTemp) e a coleção de destino (listingAndReviews) como destino e, em seguida, implante para transformar e gravar documentos automaticamente.
- Monitore as métricas de sucesso e os registros em Eventing; verifique as contagens e amostras aleatórias em Data Tools para confirmar a fidelidade e a conformidade do esquema.
- Assista ao vídeo para configuração e implantação
-
Código: Função de evento (OnUpdate)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
function OnUpdate(doc, meta) { try { // Directly process every document mutation in the source bucket var newId = doc._id ? doc._id.toString() : meta.id; <strong> </strong>var transformedDoc = { listingId: newId, url: doc.listing_url, title: doc.name, summary: doc.summary, type: doc.property_type, room: doc.room_type, accommodates: doc.accommodates, bedrooms: doc.bedrooms, beds: doc.beds, bathrooms: parseFloat(doc.bathrooms?.$numberDecimal || doc.bathrooms) || null, price: parseFloat(doc.price?.$numberDecimal || doc.price) || null, picture: doc.images?.picture_url, host: { id: doc.host?.host_id, name: doc.host?.host_name, location: doc.host?.host_location }, address: { street: doc.address?.street, country: doc.address?.country, coordinates: doc.address?.location?.coordinates }, migrated_at: new Date().toISOString() }; // Use a new prefixed key in the destination bucket dst_bucket[newId] = transformedDoc; } catch (e) { log("Error during transformation:", e); } } |
Etapa 3: Importar para a coleção temporária
Ingerir o JSON exportado em uma coleção temporária (listingAndReviewsTemp) usando cbimport com formato de lista e certificado TLS da Capella.
Exemplo de sintaxe:
|
1 2 3 4 5 6 7 8 9 10 |
cbimport json \ -c couchbases://cb.xxxx.cloud.couchbase.com \ -u MyUser \ -p MyPassword \ --bucket Test \ --scope sample_airbnb \ --collection listingAndReviewsTemp \ --format list \ --file listingAndReviews.json \ --cacert MyCert.pem |
Assista ao Importação de dados do Couchbase passos:

Mantenha a coleção de destino vazia durante essa fase - o Eventing a preencherá após a transformação.
Lista de verificação de validação
-
-
- As contagens de documentos entre a origem e o destino transformado se alinham dentro das variações esperadas para campos filtrados e transformações
- Os campos numéricos analisados do JSON estendido (por exemplo, preço, banheiros) correspondem aos intervalos numéricos esperados e as chaves mapeiam um a um com os IDs originais
- As consultas representativas no SQL++ (pesquisa por host, proximidade geoespacial por coordenadas, filtros de faixa de preço) retornam os resultados esperados nos dados transformados
- Ao importar documentos para o Couchbase, o novo ID será o UUID na coleção listingAndReviewsTemp
- O script de evento fornecido removerá _id do identificador exclusivo do MongoDB, altere o campo de ID do documento de UUID ao valor de _id como era no MongoDB
- Assista ao validação de importação vídeo
-
Dicas operacionais
-
-
- Execute em pequenos lotes primeiro para validar o desempenho da postura de Eventing e backfill; aumente a escala quando o rendimento da transformação estiver estável
- Mantenha a função Eventing com versão; teste as alterações em não-produto com coleções idênticas e um instantâneo dos dados de exportação antes de promover.
- Aplicar TTL na coleção temporária listingAndReviewsTemp para economizar o custo de armazenamento. Ler Mais informações sobre TTL nos documentos do Couchbase
-
Casos de uso ampliados
-
-
- Comércio eletrônico: Normalize preços e moedas, enriqueça com status de estoque e desnormalize atributos de SKU para consultas rápidas de detalhes de produtos
- Pipelines de IoT: Agregue leituras de sensores por dispositivo/janela de tempo e sinalize anomalias na ingestão para reduzir a latência do processamento downstream
- Perfis de usuário: Padronize e-mails/números de telefone, derive campos geográficos e anexe metadados de consentimento/auditoria para obter conjuntos de dados prontos para conformidade
- Consolidação de vários bancos de dados: Harmonize esquemas heterogêneos em um modelo unificado que se encaixa nos recursos SQL++, FTS e Vector Search do Capella
- Catálogos de conteúdo: Achate metadados de mídia aninhados, extraia palavras-chave pesquisáveis e pré-compute facetas para experiências de descoberta de baixa latência
- Registros financeiros: Converter tipos decimais e de data, anexar tags de linhagem e reconciliação e encaminhar exceções para revisão manual na ingestão
-
O que vem a seguir
-
-
- Adicione sincronização incremental reutilizando a coleção temporária como uma zona de aterrissagem para deltas e permitindo que o Eventing faça upsert no destino para migração contínua
- Coloque índices FTS e vetoriais em camadas sobre documentos transformados para permitir padrões de pesquisa semântica e híbrida após a conversão sem ciclos de reindexação
- Transmita continuamente os dados de várias fontes relacionais e não relacionais para o Couchbase para cenários de migração de dados em tempo real usando tecnologias de ETL ou de transmissão de dados:
-
Conclusão
A migração orientada por eventos transforma uma porta única em um pipeline de transformação durável que produz dados limpos e prontos para consulta no Capella com o mínimo de trabalho de pós-processamento. Ao exportar do MongoDB, importar para uma coleção temporária e aplicar uma transformação controlada de eventos, o modelo de destino está pronto para SQL++, pesquisa, análise e serviços de aplicativos no primeiro dia.
Comece gratuitamente
Crie um ambiente Capella e teste esse padrão de ponta a ponta com uma pequena amostra para validar os mapeamentos, o desempenho e o comportamento da consulta antes do dimensionamento.
Inicie seu cluster de camada gratuita Inscreva-se para obter um nível gratuito para realizar seu experimento hoje mesmo!