Migração de buckets para coleções e escopos por meio de eventos: Parte 1

Primeiramente, gostaria de destacar um excelente blog escrito por Shivani Gupta, Como migrar para escopos e coleções no Couchbase 7.0que aborda em detalhes outros métodos de migração de documentos baseados em buckets para Scopes e Collections no Couchbase. Recomendo que você leia também sobre os vários métodos que não são de eventos abordados por Shivani.

Quer você seja novo no Couchbase ou Se você é um veterano experiente, provavelmente já ouviu falar de Scopes e Collections. Se estiver pronto para experimentá-los, este artigo o ajudará a fazer isso.

Os escopos e as coleções são um novo recurso introduzido no Servidor Couchbase 7.0 que permite que você organize logicamente os dados no Couchbase. Para saber mais, leia esta introdução a Escopos e Coleções.

Você deve aproveitar os escopos e as coleções se quiser mapear seu RDBMS legado para um banco de dados de documentos ou se estiver tentando consolidar centenas de microsserviços e/ou locatários em um único Couchbase cluster (resultando em um TCO muito menor).


Uso de eventos para migração de escopos e coleções

Neste artigo, discutirei a mecânica de outro método de alto desempenho para migrar de uma versão mais antiga do Couchbase para Scopes e Collections no Couchbase 7.0.

Você só precisa do Data Service (ou KV) e do Eventing para migrar de buckets para coleções. Em um cluster grande e bem ajustado do Couchbase, é possível migrar mais de 1 milhão de documentos por segundo. Sim, sem N1QL e sem necessidade de índice.

Na postagem seguinte (Parte 2), apresentarei uma metodologia simples e totalmente automatizada para fazer grandes migrações com dezenas de  (ou até centenas) de tipos de dados por meio de um simples Perl roteiro.

Pré-requisitos: Aprendendo sobre eventos

Neste artigo, usaremos a versão mais recente do Couchbase (7.0.2), mas as versões anteriores da 7.0 também funcionam bem.

Se você não estiver familiarizado com o Couchbase ou com o serviço Eventing, consulte os recursos a seguir, incluindo pelo menos um exemplo de Eventing:

Função de eventos: ConvertBucketToCollections

O Eventing permite que você escreva lógica comercial pura. O serviço Eventing cuida de toda a infraestrutura necessária para gerenciar e dimensionar sua função (horizontal e verticalmente) em vários nós de forma confiável e com desempenho.

Todas as funções do Eventing têm dois pontos de entrada OnUpdate(doc, meta) e OnDelete(meta, options). Observe que, neste exemplo, não estamos preocupados com o último ponto de entrada.

Quando um documento é alterado ou sofre mutação (inserção, upsert, substituição etc.), uma cópia do documento e alguns metadados sobre o documento são passados para um pequeno ponto de entrada JavaScript OnUpdate(doc, meta).

As Eventing Functions podem ser implementadas com dois limites de feed de implementação diferentes: "A partir de agora" ou "Tudo". O último permite o acesso a todos os documentos atuais em um Bucket no Couchbase 6.6 ou em um Keyspace (Bucket/Scope/Collection) no Couchbase 7.0.

O scriptlet ConvertBucketToCollections da documentação principal do Eventing mostra como utilizar o Eventing para levar os dados de um bucket de origem para um bucket de destino e dividir seus dados em coleções.

Etapa 1: Carregar dados de amostra

Na interface do usuário do Couchbase, selecione "Configurações/baldes de amostragem". Verificar amostra de cerveja e clique no botão "Carregar dados de amostra“.

Etapa 2: criar os espaços-chave necessários

Este exemplo requer três baldes: "amostra de cerveja" (ou seja, seu armazenamento de documentos para migrar), "rr100 (ou seja, um bloco de notas para Eventing que pode ser compartilhado com outras funções de Eventing) e volume (o bucket no qual criar suas coleções migradas). O "rr100 e "em massa" O bucket deve ter um tamanho mínimo de 100 MB.

Na interface do usuário do Couchbase, selecione "Baldes" e pressione o botão "ADICIONAR BALDE" no canto superior direito.

Criar dois Buckets com tamanho de 100 MB, "rr100" (para o armazenamento ou bloco de notas do Eventing) e "volume" (para o destino da migração).

No balde "rr100 criar escopo "eventos“.

No escopo "rr100.eventos" criar a coleção "metadados“.

No balde "volume" criar escopo "dados“.

No escopo "bulk.data" criar as coleções "cerveja" e "cervejaria“.

Nesse ponto, você deve ter três (3) baldes, como segue:

com as seguintes coleções na seção "em massa" balde:

e as seguintes coleções na seção "rr100 balde:

Etapa 3: criar a função de eventos

Na interface do usuário do Couchbase, selecione "Eventos" e pressione o botão "ADICIONAR FUNÇÃO" no canto superior direito.

As configurações da função Eventing são as seguintes:

Aperte o botão "Salvar" e, em seguida, cole esse script no painel Function Editor:

Seu editor de código deve ter a seguinte aparência:

Aperte o botão "Salvar e retornar

O que o ConvertBucketToCollections faz

O OnUpdate(doc, meta) A lógica processará todos os dados no amostra de cerveja._default._default e executará o seguinte em todas as mutações passadas (históricas) e novas (futuras).

    • Primeiro, a propriedade do doc.tipo é verificado em dois blocos de código quase idênticos para ver se corresponde a cervejaou cervejaria. Se houver uma correspondência, continue.
    • Uma constante global DO_COPY (fornecido pelas configurações de Funções por meio de um alias Constant Binding) é verificado para saber se o item deve ser copiado.
    • Se DO_COPY for verdadeiro, o documento será gravado na coleção de destino ou no espaço-chave cerveja_col ou cervejaria_col (definido nas configurações de Funções por meio de um alias de Bucket Binding), dependendo do bloco de código correspondente.
    • Uma constante global DO_DELETE (fornecido pelas configurações de Functions por meio de um alias de Constant Binding) é verificado para saber se o item deve ser removido do espaço-chave ou da coleção de origem (definido pelas configurações de Functions por meio de um alias de Bucket Binding)
    • Se DO_DELETE for verdadeiro, o documento será removido da coleção ou do espaço-chave src_col (definido nas configurações de Funções por meio de um alias de Bucket Binding).

Poderíamos aumentar os workers de 1 para o número de vCPUs para melhorar o desempenho, mas nosso conjunto de dados é trivial, portanto, deixamos a contagem de workers em um (1). Observação: A configuração para trabalhadores é encontrada na seção expansível Configurações, no meio da caixa de diálogo Configurações de função.

Implementação da função de eventos

Agora é hora de implementar a função Eventing. Revisamos um pouco do código e do design do script de migração ConvertBucketToCollections, e agora é hora de ver tudo funcionando em conjunto.

Neste ponto, temos uma função em JavaScript, portanto, precisamos adicioná-lo ao nosso cluster do Couchbase e implantá-lo em um estado ativo.

Aperte o botão "Implementar“.

O Eventing Service leva cerca de 18 segundos para implantar sua Eventing Function e, nesse momento, você deve ver imediatamente 7303 itens processados. Como o conjunto de dados é estático, você terminará quando todos os itens tiverem sido processados. Como o conjunto de dados é estático, você estará concluído quando todos os itens tiverem sido processados.

 

Aperte o botão "Desimplantação“.

Como analisar os dados migrados

Agora que terminamos de usar a Eventing Function, podemos inspecionar os Buckets e Collections para ver o que aconteceu.

Na interface do usuário do Couchbase, selecione "Baldes

Agora, selecione "Scopes & Collections" (Escopos e coleções) para o bucket "em massa"e, em seguida, expanda o escopo "dados".

Na interface do usuário do Couchbase, selecione "Documentos" e, em seguida, selecione o espaço-chave "bulk.data.beer" e você verá os documentos migrados nessa coleção.

Na interface do usuário do Couchbase, selecione "Documentos" e, em seguida, selecione o espaço-chave "bulk.data.brewery" e você verá os documentos migrados nessa coleção.

 

Vamos aprimorar a função de eventos

Lembre-se de que o Eventing pode enriquecer os dados em tempo real e, se estivermos realmente dividindo um bucket (por volta do Couchbase 6.x) em coleções separadas (por volta do Couchbase 7.0), não precisaremos mais da função tipo propriedade. Portanto, vamos modificar nossa Function para transformar nossos dados também.

Por exemplo, dado o documento com a chave "abhi_brewery" em nossos dados de origem em amostra de cerveja._default._default:

Aqui está a modificação em nossa Eventing Function:

E como adicionamos uma nova constante global DROP_TYPETambém modificamos as configurações da seguinte forma:

Considerações finais

Se você achou este artigo útil e está interessado em continuar aprendendo sobre eventos, clique aqui o serviço de eventos do Couchbase.

Agora que você entende a mecânica do uso do Eventing para migrar seus buckets para escopos e coleções, explore a postagem de acompanhamento (Parte 2), onde forneço uma metodologia simples e totalmente automatizada para fazer grandes migrações com dezenas de tipos de dados por meio de um simples Perl roteiro.

Recursos

Referências

Gostaria muito de saber o que você achou dos recursos do Couchbase e do serviço Eventing e como eles beneficiarão sua empresa no futuro. Compartilhe seu feedback nos comentários abaixo ou em os fóruns do Couchbase.

Autor

Postado por Jon Strabala, gerente principal de produtos da Couchbase

Jon Strabala é gerente de produto principal, responsável pelo Couchbase Eventing Service. Antes de ingressar na Couchbase, ele passou mais de 20 anos criando produtos de software em vários domínios, começando com EDA no setor aeroespacial e depois fazendo a transição para a criação de software corporativo com foco no que hoje é chamado de "IoT" e "dados em escala". Jon trabalhou em várias pequenas empresas de consultoria de software até abrir e gerenciar sua própria empresa. Ele tem ampla experiência em NoSQL/NewSQL, tanto na contribuição quanto na comercialização de novas tecnologias, como bitmaps compactados e armazenamentos de colunas. Jon é bacharel em engenharia elétrica e mestre em engenharia da computação, ambos pela Universidade do Sul da Califórnia, e tem MBA pela Universidade da Califórnia em Irvine.

Deixar uma resposta