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
idpor 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.

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.
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").
[...] Usando o cbimport para importar dados do Wikibase para documentos JSON [...]