Design de aplicativos

Movendo o conteúdo do banco de dados SQL para o Couchbase

Desde a versão GA do N1QL, recebemos muitas perguntas sobre a transferência de conteúdo de um banco de dados SQL para o Couchbase. Há muitas maneiras diferentes de fazer isso. Hoje, escolhi a que provavelmente é a mais simples. Transformarei cada linha de cada tabela em um JsonDocument e o armazenarei no Couchbase. Farei meu teste com o Postgres e seu conjunto de dados de amostra inspirado no MySQL Amostra de Sakila. Usarei Java, mas as diretrizes apresentadas aqui são aplicáveis a outras linguagens.

Conexão a um banco de dados SQL em execução

Como estou usando Java, implementarei o Spring Boot e seu pacote JDBC, que cuida da conexão com o banco de dados para mim. Tudo o que preciso fazer é definir as dependências e propriedades corretas para configurar o JdbcTemplate. Esse objeto facilita a execução de uma consulta SQL.

Dependências

Para garantir que tudo esteja configurado de forma organizada e automática, você precisa das seguintes dependências:

Estou testando com o Postgres, mas você pode adicionar qualquer outro driver compatível com o Spring JDBC. O spring-boot-starter-data-jpa permitirá que eu injete o JdbcTemplate pré-configurado.

Configuração

Para garantir que a estrutura do Spring encontre seu banco de dados, adicione as seguintes propriedades ao seu arquivo de configuração (por exemplo, src/main/resources/application.properties).

É claro que você precisará ajustar isso de acordo com o banco de dados que estiver usando. Aqui estou usando o Postgres em execução em 192.168.99.100 com a porta padrão 5432. O nome do banco de dados que quero usar é dvdrental.

Código

Se tudo estiver configurado corretamente, você poderá injetar o JdbcTemplate e começar a consultar o banco de dados SQL.

Conexão com o Couchbase

Meu objetivo é mover o conteúdo de um banco de dados SQL para o Couchbase, portanto, também precisamos de uma conexão com o Couchbase.

Dependências

Para trabalhar com o Couchbase em seu projeto Java, é necessário adicionar a seguinte dependência:

Isso lhe dará acesso ao Couchbase Java SDK.

Configuração

Uma configuração básica do Couchbase requer basicamente três propriedades: um endereço IP do servidor, um nome de bucket e uma senha de bucket. Fazer isso no Spring Boot seria parecido com o seguinte:

As propriedades nome do host, bucket e senha podem ser adicionadas diretamente ao arquivo de propriedades do aplicativo.

Código

Com o Couchbase, o nível de granularidade equivalente de um banco de dados seria um bucket, que é onde você armazena documentos. Com a configuração anterior, você pode simplesmente injetar um bucket e começar a brincar.

Tabelas

Neste ponto, você tem uma conexão com um banco de dados SQL e com o Couchbase. Agora podemos começar a mover as coisas. A maneira mais fácil de mover dados é considerar cada linha de cada tabela como um documento.

Obtendo o esquema SQL

Vamos começar obtendo o esquema do banco de dados automaticamente usando o JdbcTemplate. O objeto interessante aqui é DatabaseMetaDataque pode nos fornecer a estrutura completa do banco de dados. A API não é a mais fácil de usar, mas pelo menos está documentada.

Vou mapear o resultado da consulta DatabaseMetaData para uma lista de tabelas e colunas. Para isso, criei a seguinte classe Java:

Definitivamente, não é o código mais empolgante de se escrever, mas no final você obtém uma representação JSON das tabelas do seu banco de dados SQL.

Conteúdo

Aqui está a parte divertida. É aqui que começamos a mapear uma linha de tabela para um JsonDocument. A seção anterior nos coloca em um estado em que podemos recuperar o nome de todas as tabelas. A partir de um nome de tabela, podemos criar uma consulta SQL que retorna todas as linhas da tabela.

O Spring tem um mecanismo que permite que você defina um RowMapper. Para cada linha retornada pela consulta, você pode retornar o objeto que desejar. Como estou usando o Couchbase, quero um JsonDocument.

A seguir, um exemplo de implementação. Esse RowMapper precisa de um objeto Table previamente definido; portanto, temos de implementar o método mapRow. Há várias coisas que precisamos fazer aqui.

A primeira tarefa é criar uma chave exclusiva. Como o escopo das linhas é definido por tabelas, alguns IDs podem ser exatamente os mesmos para linhas em tabelas diferentes. Mas os documentos têm escopo por bucket, portanto, precisamos criar uma chave de documento exclusiva que reflita o ID da linha e o nome da tabela. Para manter o controle da origem do documento, também adicionarei um campo _tableName para o nome da tabela.

Em seguida, a etapa interessante vem do mapeamento de tipos. O JSON é compatível com menos tipos do que um banco de dados SQL, portanto, temos que fazer algumas conversões aqui. É isso que o método getJsonTypedValue faz. Ele garante que a maioria dos tipos JDBC possa ser convertida em um tipo JSON nativo (String, número, booleano, matriz, objeto, nulo). No final, temos um JsonDocument que pode ser salvo no Couchbase.

Com esse RowMapper, as coisas ficam muito fáceis. Podemos fazer um loop pelo nome da tabela, executar a consulta e salvar os resultados no Couchbase. Fazer isso de forma síncrona seria assim:

Mas eu prefiro a versão assíncrona:

Aqui não estou usando todo o potencial do Rx; dê uma olhada em esta função que grava um documento no Couchbase e lida com o tempo limite e o gerenciamento de erros.

 

Por conveniência, agrupei todas as etapas implementadas e mostradas anteriormente em um arquivo projeto único. Tudo o que você precisa fazer é verificar se o arquivo de propriedades está configurado corretamente e executar o importador:

Dê uma olhada no LEIAME para obter mais informações.

Conclusão

Hoje, aprendemos a mover o conteúdo SQL para o Couchbase, mas ainda há algum trabalho a ser feito. Na próxima vez, falarei sobre como mover a lógica de negócios do SQL para a camada de aplicativos.

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Autor

Postado por Laurent Doguin

Laurent é um nerd metaleiro que mora em Paris. Em sua maior parte, ele escreve código em Java e texto estruturado em AsciiDoc, e frequentemente fala sobre dados, programação reativa e outras coisas que estão na moda. Ele também foi Developer Advocate do Clever Cloud e do Nuxeo, onde dedicou seu tempo e experiência para ajudar essas comunidades a crescerem e se fortalecerem. Atualmente, ele dirige as Relações com Desenvolvedores na Couchbase.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.