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.
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 |
função Sobre a atualização(doc, meta) { se (!doc.tipo) retorno; var tipo = doc.tipo; se (DROP_TYPE) excluir doc.tipo; se (tipo === "cerveja) { se (DO_COPY) cerveja_col[meta.id] = doc; se (DO_DELETE) { se(!cerveja_col[meta.id]) { // verificação de segurança registro("skip delete copy not found type=" + doc.tipo + ", meta.id=" + meta.id); } mais { excluir src_col[meta.id]; } } } se (tipo === "cervejaria) { se (DO_COPY) cervejaria_col[meta.id] = doc; se (DO_DELETE) { se(!cervejaria_col[meta.id]) { // verificação de segurança registro("skip delete copy not found type=" + doc.tipo + ", meta.id=" + meta.id); } mais { excluir src_col[meta.id]; } } } } |
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.reorg” pelo 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
1 2 3 4 5 6 |
git clone https://github.com/jon-strabala/cb-buckets-to-collections cd cb-baldes-para-coleções PATH=${PATH}:/optar/couchbase/caixa cd cb-baldes-para-coleções/ chmod +x CustomConvertBucketToCollections.pl big_data_test_gen.pl carga_de_teste_de_grandes_dados.sh |
Etapa 2: Criar 250 milhões de documentos de teste
Executando o interativo big_data_test_load.sh comando:
1 |
./carga_de_teste_de_grandes_dados.sh |
Parâmetros de configuração de entrada:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# Esse script bash, 'big_data_test_load.sh', carregará milhões de testes Documentos # em um ._default._default em 1 milhão de partes como # criado pelo script perl 'big_data_test_gen.pl'. Os dados serão # tem 80 valores diferentes de tipos de documentos distribuídos uniformemente. Entrar o número de teste documentos para criar em o milhões 250 Entrar o balde (ou alvo) para carregar teste documentos em entrada Entrar o nome de usuário:senha para seu agrupamento administrador:jtester Entrar o nome do host ou ip endereço de seu agrupamento localhost Entrar o número de fios para cbimport 8 Vontade carregar 2 milhões teste documentos em Espaço-chave entrada.Padrão.Padrão (o padrão para balde entrada) tipo ^C para abortar, em execução em 5 sec. Em execução .... gênero/cbimport bloco: 1 de 2, iniciar em Mês 01 Nov 2021 11:06:01 AM PDT JSON `arquivo://./data.json` importado para `couchbase://localhost` com sucesso Documentos importado: 1000000 Documentos falhou: 0 ** removido 23 linhas ** gênero/cbimport bloco: 250 de 250, iniciar em Mês 01 Nov 2021 11:24:05 AM PDT JSON `arquivo://./data.json` importado para `couchbase://localhost` com sucesso Documentos importado: 1000000 Documentos falhou: 0 |
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:
1 |
./CustomConvertBucketToCollections.pl |
Parâmetros de configuração de entrada:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Entrar o balde (ou fonte) para converter para coleções [viagens-amostra]: entrada Entrar o nome de usuário:senha para seu agrupamento [administrador:jtester]: Entrar o nome do host ou ip endereço de seu agrupamento [localhost]: Entrar o destino balde.escopo [meu cesto.miscópio]: saída.reorganizar Entrar o Eventos armazenamento Espaço-chave balde.escopo.coleção [rr100.eventos.metadados]: Entrar o número de trabalhadores (LTE # mais núcleos é mais rápido) [8]: Sonda o balde (ou fonte) para determinar o definir de tipos [Y]: amostras entre o balde (ou fonte) para encontrar tipos [20000]: 100000 máximo estimado # de tipos no compartimento (ou fonte) [30]: 100 Digitalização entrada para 'tipo' propriedade este pode tomar a poucos segundos enrolar -s -u Administrador:senha http://localhost:8093/query/service -d \ 'statement=INFER `input`._default._default WITH {"sample_size": 100000, "num_sample_values": 100, "similarity_metric": 0.1}' \ | jq '.results[][].properties.type.samples | .[]' | classificar -u TIPOS ENCONTRADO: t01 t02 t03 t04 t05 t06 t07 t08 t09 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 t30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t50 t51 t52 t53 t54 t55 t56 t57 t58 t59 t60 t61 t62 t63 t64 t65 t66 t67 t68 t69 t70 t71 t72 t73 t74 t75 t76 t77 t78 t79 t80 Geração de Eventos Função: CustomConvertBucketToCollections.json Geração de Espaço-chave comandos: MakeCustomKeyspaces.sh |
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
1 2 |
gato MakeCustomKeyspaces.sh | sed -e 's/\(^.*balde=saída.*tamanho de rams=\)100 \(\.*\)/\116000 \2/' > tmp mv tmp MakeCustomKeyspaces.sh |
Etapa 4: Execute o script MakeCustomKeyspaces.sh
1 |
sh ./MakeCustomKeyspaces.sh |
abaixo:
1 2 3 4 5 6 7 8 9 10 |
SUCESSO: Balde criado SUCESSO: Escopo criado SUCESSO: Coleção criado SUCESSO: Balde criado SUCESSO: Escopo criado SUCESSO: Coleção criado SUCESSO: Coleção criado ** removido 77 linhas ** SUCESSO: Coleção criado SUCESSO: Eventos importado |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
[ { "src_ks": "input._default._default", "dst_ks": "output.myscope.t01", "create_dst_ks": verdadeiro, "dst_copy": verdadeiro, "src_del": verdadeiro, "dst_remove_type": verdadeiro }, { "src_ks": "input._default._default", "dst_ks": "output.myscope.t02", "create_dst_ks": verdadeiro, "dst_copy": verdadeiro, "src_del": verdadeiro, "dst_remove_type": verdadeiro }, { "src_ks": "input._default._default", "dst_ks": "output.myscope.t03", "create_dst_ks": verdadeiro, "dst_copy": verdadeiro, "src_del": verdadeiro, "dst_remove_type": verdadeiro } ] |
Recursos
- Download: Faça o download do Couchbase Server 7.0
- Scriptlet de eventos: Função: ConvertBucketToCollections
- GitHub: Ferramenta Perl: cb-buckets-to-collections.pl
Referências
- Documentação de eventos do Couchbase
- O que há de novo: Couchbase Server 7.0
- Como migrar para escopos e coleções no Couchbase 7.0
- Outros blogs do Couchbase sobre eventos
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.