Servidor Couchbase

Uso do cbimport para importar dados do Wikibase para documentos JSON

Estou ocupado trabalhando em alguns projetos do SQL Server para Servidor Couchbase mas, enquanto isso, pensei em deixar para você uma pequena amostra de JSON para o fim de semana de Natal.

Wikibase tem um enorme banco de dados de informações. Todos os tipos de informações. E ele está disponível para download no formato JSON. Bem, ainda não tenho certeza do que vou fazer com ele, mas achei que seria útil importar esses dados para o Couchbase para que eu possa executar algumas consultas N1QL nele.

Para fazer isso, vou usar cbimport.

Obtendo os dados do Wikibase

Downloads do Wikibase estão disponíveis em JSON, XML e RDF.

O arquivo que baixei foi wikidata-20161219-all.json.bz2que tem mais de 6gb de tamanho. Eu o descompactei para wikidata-20161219-all.jsono que equivale a quase 100 GB. São muitos dados compactados em um único arquivo.

No arquivo, os dados são estruturados como uma grande matriz JSON contendo objetos JSON. Meu objetivo era criar um documento do Couchbase para cada objeto JSON nessa matriz.

Usando o cbimport

cbimport é um utilitário útil para importar dados (JSON e CSV) que vêm com o Couchbase Server.

É necessário que você informe essa ferramenta de linha de comando:

  • json ou csv ⇒ O tipo de arquivo que está sendo importado

  • -c ⇒ Onde está seu cluster

  • -b ⇒ O nome do bucket para o qual você deseja importar

  • -u e -p ⇒ Credenciais do cluster

  • -d ⇒ O URL do conjunto de dados a ser importado (como meu arquivo é local, uso um file:// URL)

Também usei essas opções:

  • -generate-key ⇒ Isso informa ao cbimport como construir a chave para cada documento. Se cada documento tiver um id por exemplo, eu poderia especificar um modelo de %id% para usar isso como a chave

  • -Lista de formatos ⇒ Informa ao cbimport em que formato está o arquivo. Algumas opções são Lines (Linhas), List (Lista), Sample (Amostra). Usei "List" porque o JSON está todo em um arquivo, mas não é um objeto JSON por linha.

Uso do cbimport nos dados do Wikibase

Tenho o Couchbase Server instalado na unidade E. Na pasta onde está o arquivo json do wikidata (o meu se chama wikidata-20161219-all.json, mas o seu pode ser diferente), executei:

E:CouchbaseServerbincbimport.exe json -c couchbase://localhost -u Administrator -p password -b wikibase file://wikidata-20161219-all.json --generate-key %id% --format list

Com base no Documentação do modelo de dados do WikibaseEu sabia que haveria um id em cada item com um valor exclusivo. É por isso que usei %id%. Uma chave mais complexa pode ser gerada com o relativamente robusto modelos de geradores de chaves que a cbimport oferece.

Enquanto o cbimport era executado, monitorei cuidadosamente o uso da memória do cbimport, pois temia que ele tivesse problemas com o enorme conjunto de dados. Mas não houve problema, ele não excedeu 21 MB de uso de RAM enquanto estava em execução.

Comecei com 512 MB de RAM e mudei para 924 MB de RAM para meu bucket no Couchbase durante a importação. Tenho apenas um nó. Portanto, eu esperava que isso significasse que muitos ejeções do cache aconteceria. Foi isso que aconteceu.

Couchbase Server bucket ejections

O arquivo total tem 99 GB, portanto, não há como ele caber todo na RAM em meu desktop. Na produção, 99+gb não seria irrealista caber na RAM com um punhado de nós. À medida que a wikibase continua a crescer, ela pode ser acomodada por Dimensionamento fácil do CouchbaseO que é um problema: basta acumular outro servidor e continuar.

Isso leva muito tempo para ser executado em minha área de trabalho. Na verdade, enquanto escrevo esta postagem do blog, ele ainda está em execução. Já são 5,2 milhões de documentos em execução (não sei quantos registros existem no total, mas o uso do disco está atualmente em 9,5 GB, portanto, acho que ainda tenho um longo caminho a percorrer).

Quando estiver pronto, espero poder executar algumas consultas N1QL interessantes com base nesses dados (há alguns exemplos que o Wikibase fornece que usam um mecanismo de consulta "Gremlin em vez de SQL).

Resumo

Se você estiver interessado em trabalhar com os dados do Wikibase ou com qualquer grande repositório de dados que já esteja no formato JSON, é muito fácil trazê-los para o Couchbase com o cbimport.

Agora que tenho um grande conjunto de dados do Wikibase, minha próxima meta será descobrir algumas coisas interessantes que eu poderia usar o N1QL para consultar a partir dos dados.

Se você tiver alguma dúvida, deixe um comentário ou fale comigo no Twitter.

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

Autor

Postado por Matthew Groves

Matthew D. Groves é um cara que adora programar. Não importa se é C#, jQuery ou PHP: ele enviará solicitações de pull para qualquer coisa. Ele tem programado profissionalmente desde que escreveu um aplicativo de ponto de venda QuickBASIC para a pizzaria de seus pais nos anos 90. Atualmente, ele trabalha como gerente sênior de marketing de produtos da Couchbase. Seu tempo livre é passado com a família, assistindo aos Reds e participando da comunidade de desenvolvedores. Ele é autor de AOP in .NET, Pro Microservices in .NET, autor da Pluralsight e Microsoft MVP.

2 Comentários

  1. Oi, Matthew,

    Ótimo artigo, só queria fazer um comentário sobre como o cbimport é executado em sistemas operacionais diferentes, pois há pequenas diferenças. Também parece que os caracteres de barra desapareceram do comando, que deve se parecer com o seguinte (esperamos que eles não sejam eliminados no comentário também):

    E:\Couchbase\Server\bin\cbimport.exe json -c couchbase://localhost -u Administrator -p password -b wikibase file://wikidata-20161219-all.json -generate-key %id% -format list

    Então, como executar o cbimport no Mac OS, Windows e Linux? Vamos supor que estejamos carregando documentos no bucket "default" de um arquivo CSV formatado "test.csv" enquanto estivermos conectados como "test.user". O arquivo CSV tem a coluna EXPERIMENT_ID; usaremos seus valores como chaves de documento. O Couchbase está sendo executado no localhost (127.0.0.1).

    Mac OS (na janela do terminal):
    >> cd /Applications/Couchbase\ Server.app/Contents/Resources/couchbase-core/bin
    >> ./cbimport csv -c couchbase://127.0.0.1:8091 -u Administrator -p password -b default -d file:///Users/test.user/Desktop/test.csv -g csv::%EXPERIMENT_ID%

    OBSERVE os três caracteres de barra no prefixo de protocolo "file:///", a menos que o arquivo esteja localizado no diretório atual (nesse caso, é "file://test.csv").

    Windows (no prompt de comando):

    >> cd "C:\Program Files\Couchbase\Server\bin"
    >> cbimport.exe csv -c couchbase://127.0.0.1:8091 -u Administrator -p password -b default -d file://C:/Users/test.user/Desktop/test.csv -g csv::%EXPERIMENT_ID%

    OBSERVE os dois caracteres de barra no prefixo do protocolo "file://".

    Ubuntu Linux (na janela do terminal):

    >> cd /opt/couchbase/bin
    >> ./cbimport csv -c couchbase://127.0.0.1:8091 -u Administrator -p password -b default -d file:///home/test.user/test.csv -g csv::%EXPERIMENT_ID%

    OBSERVE os três caracteres de barra no prefixo de protocolo "file:///", a menos que o arquivo esteja localizado no diretório atual (nesse caso, é "file://test.csv").

  2. [...] Usando o cbimport para importar dados do Wikibase para documentos JSON [...]

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.