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

Novamente (como fiz na Parte 1), gostaria de indicar 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

No artigo anterior (Parte 1), discuti a mecânica de um método de alto desempenho para migrar de uma versão mais antiga do Couchbase para Scopes e Collections no Couchbase 7.0 com base em Eventos.

Apenas o Data Service (ou KV) e o Eventing Service são necessários 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.

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

Recapitulação da função final do Eventing: ConvertBucketToCollections

Na Parte 1, tínhamos as seguintes configurações para a Eventing Function. Observe que para cada tipo exclusivo, "cerveja" e "cervejaria", tivemos de adicionar um alias de vinculação de Bucket à coleção de destino no modo "leitura+gravação". Além disso, tivemos que criar as coleções de destino, neste caso "bulk.data.beer" e "bulk.data.brewery

Na Parte 1, tínhamos o seguinte código JavaScript em nossa Eventing Function. Observe que para cada tipo exclusivo, "cerveja" e "cervejaria", tivemos que replicar um bloco de código JavaScript e atualizar a referência do alias de vinculação correspondente ou da coleção de destino no Couchbase Data Service.

A técnica da Parte 1 funciona, mas e se eu tiver muitos tipos?

O uso do Eventing pode, de fato, fazer migrações, conforme mostrado na Parte 1, mas parece um pouco trabalhoso configurar as coisas.

Se você tiver 80 tipos diferentes, seria um esforço incrível e propenso a erros usar essa técnica (tanto para criar a Eventing Function quanto para criar os espaços de chave necessários). Se eu tivesse 80 tipos em um bucket para migrar e dividir, não gostaria de fazer todo o trabalho descrito acima manualmente para cada tipo.

Automatizar via CustomConvertBucketToCollections.pl

Para resolver esse problema, escrevi um pequeno Perl roteiro, CustomConvertBucketToCollections.plque gera dois arquivos:

  • CustomConvertBucketToCollections.json, é uma Eventing Function completa que faz todo o trabalho acima descrito nesta postagem.
  • MakeCustomKeyspaces.sh, é um arquivo shell para criar todos os espaços-chave necessários e importar a função Eventing gerada.

Você pode encontrar esse script no GitHub em https://github.com/jon-strabala/cb-buckets-to-collections.

Observe que o script CustomConvertBucketToCollections.pl exige que ambos Perl (extração prática e linguagem de relatório) e também jq (um processador JSON de linha de comando leve e flexível) estão instalados em seu sistema.

Exemplo: Migrar 250 milhões de registros com 80 tipos diferentes

Temos 250 milhões de documentos no keyspace "input._default._default" com 80 tipos diferentes e deseja reorganizar os dados por tipo em coleções sob o escopo "output.reorgpelo tipo de propriedade. Temos um cluster do AWS com três instâncias r5.2xlarge, todas executando o Data Service e o Evening Service.

O balde de entrada "entrada", neste exemplo, está configurado com uma cota de memória de 16.000 MB.

Abaixo, uso o CustomConvertBucketToCollections.pl Perl do GitHub em https://github.com/jon-strabala/cb-buckets-to-collections. Como você pode ver, pode ser trivial fazer migrações usando um script automatizado.

Etapa 1: Configuração única

Etapa 2: Criar 250 milhões de documentos de teste

Executando o interativo big_data_test_load.sh comando:

Parâmetros de configuração de entrada:

Agora deve haver 250 milhões de documentos de teste no espaço-chave input._default._default.

Etapa 3: Gerar função de eventos e script de espaço-chave

Executando o interativo CustomConvertBucketToCollections.pl comando:

Parâmetros de configuração de entrada:

Na seção interativa Perl acima, quatro das opções padrão acima foram alteradas.

Etapa 3: Atualize o MakeCustomKeyspaces.sh (conforme necessário)

Você pode simplesmente "vi MakeCustomKeyspaces.sh" e alterar os valores necessários. Optei por usar o Unix sed para aumentar o tamanho da RAM do balde "saída" de 100 a 1600

Etapa 4: Execute o script MakeCustomKeyspaces.sh

abaixo:

Etapa 5: Atualize sua interface do usuário do Couchbase na página de eventos

Para localizar a nova Eventing Function (ou Função atualizada) na interface do usuário do Couchbase, acesse a Eventing Page e atualize o navegador da Web.

Etapa 6: implantar o CustomConvertBucketToCollections

Na interface do usuário do Couchbase, vá para a página de eventos e implemente a função de eventos "CustomConvertBucketToCollections“.

Em cerca de 45 minutos, a reorganização deverá estar completamente concluída.

Todos os documentos são de fato reorganizados por tipo como coleções. Nesse modesto cluster, eles foram processados a 93 mil documentos por segundo.

Considerações finais

Se você achou esta série de artigos útil e está interessado em continuar aprendendo sobre eventos, clique aqui o serviço de eventos do Couchbase.

Espero que você encontre o CustomConvertBucketToCollections.pl Perl do GitHub em https://github.com/jon-strabala/cb-buckets-to-collections uma ferramenta valiosa em seu arsenal quando você precisa migrar um bucket com muitos tipos para um paradigma de coleções.

Sinta-se à vontade para aprimorar o script CustomConvertBucketToCollections.pl para usar um arquivo de configuração intermediário para o Eventing Perl onde todos os parâmetros podem ser ajustados. Em seguida, use o arquivo de configuração intermediário para criar a Eventing Function e o script de shell de configuração.

Exemplo de arquivo de configuração intermediário:

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