Migrações modernas de dados raramente envolvem uma simples migração do tipo 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 tempo real orientadas a eventos à medida que os dados chegam, permitindo que as equipes remodelen esquemas, normalizem valores, enriqueçam com metadados e preparem documentos para SQL++, Search, Analytics e sincronização móvel desde o início.
Objetivos
- Fornecer um padrão de migração repetível e orientado a eventos de qualquer banco de dados relacional ou não relacional para o Couchbase Capella, que transforma dados em trânsito para usabilidade imediata em aplicações e análises
Neste exemplo, usaremos o MongoDB Atlas como banco de dados de origem. - Forneça uma implementação de referência mínima e pronta para produção usando cbimport e o Capella Eventing para converter esquemas de origem (por exemplo, decimais, estruturas aninhadas, identificadores) em modelos otimizados para consulta
- Delimite diretrizes operacionais, pré-requisitos e etapas de validação para que as equipes possam executar com confiança, resultados previsíveis e opções de reversão, se necessário.
Por que migração orientada a eventos
- A transformação em linha reduz o retrabalho pós-migração aplicando normalização e enriquecimento de esquema à medida que os documentos chegam, acelerando assim a virada de chave e reduzindo o risco
- As funções de eventing mantêm as transformações com controle de origem e auditáveis, para que as mudanças sejam consistentes, testáveis e repetíveis em todos os ambientes
- O resultado são dados prontos para o Capella que suportam SQL++, Pesquisa de Texto Completo (Full-Text Search), Pesquisa Vetorial, Análise e App Services sem fases intermediárias de refatoração

Pré-requisitos
- Instalar Ferramentas de Banco de Dados do MongoDB (inclui mongoexport, mongoimport, etc.)
- Baixar o Couchbase CLI
- Conta paga do Capella e acesso ao cluster, com endereços IP permitidos configurados e o certificado raiz do Capella baixado e salvo como ca.pem
- Crie os seguintes artefatos no Couchbase Capella:
-
- Um bucket com o nome: Teste
- Escopo sob o bucket: Teste com o nome: amostra_airbnb
- Duas coleções com nomes listingAndReviewsTemp e listagemEComentários
- Uma função JavaScript com o nome transformação de dados
Clique para assistir aos vídeos abaixo, veja o Configuração do Capella e criando acesso ao cluster etapas.
-
- Credenciais com acesso de leitura/gravação ao bucket/escopo/coleções de destino e ferramentas de linha de comando instaladas para o cbimport e utilitários de exportação do MongoDB.
- Strings de conexão para o MongoDB Atlas (origem) e o Couchbase Capella (destino), além de uma coleção temporária para a ingestão inicial antes da transformação.
Exemplo de código usando o MongoDB Atlas
Um documento de anúncio típico do Airbnb ilustra necessidades comuns de transformação: normalização decimal, tratamento de identificadores, campos aninhados e desaninhamento para desempenho de consultas.
Os campos de exemplo incluem url_do_anúncio, metadados do anfitrião, endereço com coordenadas e wrappers decimais para campos como banheiros e preço usando o formato JSON estendido do MongoDB.
Padrão de transformação baseada em eventos
- Use uma coleção temporária como origem do Eventing (listingAndReviewsTemp) e uma coleção de destino (listagemEComentários) para os documentos transformados manterem a migração idempotente e testável.
- Converter decimais do JSON estendido do MongoDB em números nativos, renomear campos para legibilidade de domínio, derivar uma chave do Couchbase a partir da original _id, e carimbar documentos com migrado_em.
Passo 1: Exportar do MongoDB
Exportar documentos para JSON usando mongoexport com –jsonArray para produzir uma lista limpa para importação em lote no Couchbase.
Acompanhe este vídeo da 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” —nome de usuário=Teste —senha=Teste_123 —bancoDeDadosDeAutenticação administrador —coleção=listagemEComentários —fora=listagemEComentários.json —arrayJson |
Passo 2: Implantar o Eventing
- Configure a função de Eventing com a coleção temp como origem (listingAndReviewsTemp) e a coleção de destino (listagemEComentários) como destino, depois implante para transformar e gravar documentos automaticamente.
- Monitore as métricas de sucesso e os logs no Eventing; verifique contagens e amostras aleatórias nas Ferramentas de Dados para confirmar a fidelidade e a conformidade com o esquema.
- Assista ao vídeo para configuração e implantação
Código: Função de eventos (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 |
função AoAtualizar(doc, meta) { tentar { // Processar diretamente cada mutação de documento no bucket de origem variável novoId = doc._id ? doc._id.toString() : meta.identidade; <forte> </forte>variável documentoTransformado = { ID do anúncio: novoId, URL: doc.url_do_anúncio, título: doc.nome, resumo: doc.resumo, tipo: doc.tipo de propriedade, sala: doc.tipo de quarto, acomoda: doc.acomoda, quartos: doc.quartos, camas: doc.camas, Banheiros: parseFloat(doc.Banheiros?.$númeroDecimal || doc.Banheiros) || nulo, preço: parseFloat(doc.preço?.$númeroDecimal || doc.preço) || nulo, foto: doc.imagens?.url_da_imagem, anfitrião: { identidade: doc.anfitrião?.id_do_anfitrião, nome: doc.anfitrião?.nome_do_host, localização: doc.anfitrião?.anfitrião_localização }, endereço: { street: doc.endereço?.street, country: doc.endereço?.country, coordinates: doc.endereço?.localização?.coordinates }, migrado_em: novo Data().toISOString() }; // Use a new prefixed key in the destination bucket dst_bucket[novoId] = documentoTransformado; } catch (e) { log(“Error during transformation:”, e); } } |
Step 3: Import to temporary collection
Ingest exported JSON into a temporary collection (listingAndReviewsTemp) using cbimport with list format and Capella’s TLS certificate.
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 —balde Teste —escopo sample_airbnb —coleção listingAndReviewsTemp —format lista —file listagemEComentários.json —cacert MyCert.pem |
Watch the Couchbase data import steps:

Keep the destination collection empty during this phase—Eventing will populate it post-transformation.
Validation checklist
- Document counts between the source and the transformed destination align within expected variances for filtered fields and transformations
- Numeric fields parsed from extended JSON (e.g., price, bathrooms) match expected numeric ranges, and keys map one-to-one with original IDs
- Representative queries in SQL++ (lookup by host, geospatial proximity by coordinates, price range filters) return expected results on transformed data
- While importing documents into Couchbase, the new ID will be UUID in listingAndReviewsTemp collection
- The given eventing script will remove _id field of MongoDB unique Identifier, change the document ID field from UUID to value of _id as it was in MongoDB
- Watch the import validation video
Operational tips
- Run in small batches first to validate performance of Eventing and backfill posture; scale up once transformation throughput is stable
- Keep the Eventing function versioned; test changes in non-prod with identical collections and a snapshot of export data before promoting
- Apply TTL on temporary collection listingAndReviewsTemp to save the storage cost. Read more information on TTL in the Couchbase docs
Expanded use cases
- E-commerce: Normalize prices and currencies, enrich with inventory status, and denormalize SKU attributes for fast product detail queries
- IoT pipelines: Aggregate sensor readings by device/time window and flag anomalies on ingest to reduce downstream processing latency
- User profiles: Standardize emails/phone numbers, derive geo fields, and attach consent/audit metadata for compliance-ready datasets
- Multi-database consolidation: Harmonize heterogeneous schemas into a unified model that fits Capella’s SQL++, FTS, and Vector Search features
- Content catalogs: Flatten nested media metadata, extract searchable keywords, and precompute facets for low-latency discovery experiences
- Financial records: Convert decimal and date types, attach lineage and reconciliation tags, and route exceptions for manual review on ingest
What’s next
- Add incremental sync by reusing the temp collection as a landing zone for deltas and letting Eventing upsert into the destination for continuous migration
- Layer FTS and vector indexes over transformed documents to enable semantic and hybrid search patterns post-cutover without reindexing cycles
- Continuously stream the data from various relational and non-relation sources to Couchbase for live data migration scenarios using data streaming or ETL technologies, some examples are:
Conclusão
Event-driven migration turns a one-time port into a durable transformation pipeline that produces clean, query-ready data in Capella with minimal post-processing work. By exporting from MongoDB, importing into a temp collection, and applying a controlled Eventing transform, the destination model is ready for SQL++, Search, Analytics, and App Services on day one.
Start for free
Spin up a Capella environment and test this pattern end-to-end with a small sample to validate mappings, performance, and query behavior before scaling.
Start your free tier cluster Sign up for free tier to run your experiment today!


Deixe um comentário
Você precisa fazer o login para publicar um comentário.