Há uma tonelada de novos recursos que foram introduzidos no recém-disponível Couchbase Server 4.5. Query Workbench, APIs de subdocumentos e pesquisa de texto completo são apenas algumas das grandes adições a um banco de dados NoSQL que já é excelente.
Para este artigo, vamos nos concentrar em alguns dos recursos avançados que envolvem um Couchbase Shell já existente, mas bastante aprimorado - o CBQ.
O que é o cliente de consulta do Couchbase (CBQ)?
Caso esta seja a primeira vez que você se depara com o Couchbase Query Client, também conhecido como CBQ, ele é um excelente utilitário de linha de comando para executar consultas contra Servidor Couchbase. Ele foi introduzido pela primeira vez no Couchbase Server 4.0 com o lançamento da tecnologia N1QL do Couchbase. Se você não conhece o Couchbase ou o NoSQL em geral, o CBQ é semelhante a ferramentas como o SQLPlus da Oracle ou a interface de linha de comando do MySQL. Com o lançamento do Couchbase Server 4.5, o CBQ evoluiu para o que pode ser melhor descrito como um shell.
Para usar o Couchbase Shell, você deve executar um dos seguintes procedimentos, dependendo do seu sistema operacional. Em um Mac, você usaria o Terminal e executaria:
1 2 3 |
./Aplicativos/Couchbase Servidor.aplicativo/Conteúdo/Recursos/couchbase-núcleo/caixa/cbq |
No Microsoft Windows, você deve executar o seguinte:
1 2 3 |
C:/Programa Arquivos/Couchbase/Servidor/caixa/cbq.exe |
É claro que em ambos os cenários você precisaria ter o Couchbase Server 4.0 ou superior instalado em seu computador. No entanto, no Couchbase Server 4.5, as coisas mudaram, e quando digo mudaram, quero dizer que ficaram ainda melhores.
Vamos examinar algumas das coisas que você podia fazer antes da versão 4.5, que introduziu recursos avançados de CBQ. A cada solicitação de CBQ, são retornados determinados dados e informações de métricas sobre a consulta executada. Por exemplo, digamos que executemos o seguinte comando simples:
1 2 3 |
SELECIONAR 1=1; |
O comando acima nos deixará com os seguintes resultados na saída do CBQ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
{ "requestID": "879a196e-8de4-400b-a6b6-278a66ad1e0b", "assinatura": { "$1": "booleano" }, "resultados": [ { "$1": verdadeiro } ], "status": "sucesso", "métricas": { "elapsedTime" (tempo decorrido): "30.360043ms", "executionTime": "26.927386ms", "resultCount": 1, "resultSize": 34 } } |
É claro que ele nos diz que nosso resultado é verdadeiro, mas também nos fornece informações como o tempo que levou para ser executado, entre outras. Você deve ignorar o longo tempo de 30 ms porque, em meu ambiente local, tenho especificações baixas e índices mínimos criados.
O CBQ pode executar consultas DML, além de ser capaz de selecionar dados. A inserção, atualização, upserting, exclusão e recuperação podem ser feitas com os principais recursos do CBQ.
Recursos avançados de shell
É provável que você esteja aqui porque quer saber o que torna o CBQ diferente do Couchbase Server 4.5 e do Couchbase Server 4.1 anterior. Os recursos avançados podem ser divididos em algumas categorias gerais. O que você está prestes a ver é apenas uma amostra do que pode ser feito. A documentação completa sobre o assunto pode ser encontrada na seção Recursos para desenvolvedores do Couchbase.
Gerenciamento de conexões
Com o Couchbase 4.5, você pode se conectar a clusters do Couchbase com o CBQ ou a nós de consulta individuais. Isso é ótimo quando se trata de solucionar problemas de desempenho do seu banco de dados.
Para se conectar a um cluster, você pode usar a maneira padrão e executar ./cbq
da linha de comando, ou você pode passar uma tag opcional como esta:
1 2 3 |
./cbq -e hospedeiro:8091 |
Observe que, no exemplo acima, especifiquei a porta 8091 para indicar um cluster. Em vez disso, você pode usar a porta 8093 para especificar um serviço de consulta específico. Se preferir se conectar a um cluster ou serviço somente depois de iniciar o CBQ, você pode executar o seguinte:
1 2 3 |
CONECTAR hospedeiro; |
Se for por esse caminho, use DESCONECTAR;
para encerrar a conexão.
Gerenciamento de segurança
É muito comum e normalmente recomendado que seus dados do Couchbase sejam bloqueados com o uso de credenciais. Você não gostaria que qualquer pessoa acessasse seus dados.
Antes do Couchbase 4.5, não era possível especificar senhas para o seu banco de dados ou buckets no CBQ. Foi aí que as coisas mudaram. Agora é possível especificar nomes de usuário e senhas por meio do CBQ.
Digamos que você queira se conectar ao cluster do Couchbase usando as credenciais de administrador. Você poderia passar uma tag opcional como esta:
1 2 3 |
./cbq -u=administrador -p=senha; |
Se preferir não expor sua senha no shell, você pode omitir a tag de senha e ele solicitará uma enquanto se conecta.
Digamos que você queira se conectar ao seu banco de dados com mais de um conjunto de credenciais. Você pode passar uma lista de credenciais da seguinte forma:
1 2 3 |
./cbq -c=cerveja-amostra:pwd1,viagens-amostra:pwd2 |
Como no caso dos comandos de conexão, talvez você não queira especificar as credenciais no momento da inicialização do CBQ. Ao usar o comando CONJUNTO
e NÃO CONFIGURADO
com o CBQ em execução, você pode especificar as credenciais. Por exemplo, com o CBQ em execução, execute o seguinte:
1 2 3 |
CONJUNTO -créditos cerveja-amostra:b1, sessão:s1; |
Para limpar as credenciais, basta chamar o comando NÃO CONFIGURADO
em vez disso.
Suporte a scripts
Anteriormente, com o CBQ, você estava limitado à execução de consultas dentro da ferramenta e não em uma forma de script. No Couchbase Server 4.5, agora você pode criar scripts para execução no CBQ. Talvez você tenha scripts de limpeza que queira executar por meio de um cron, ou talvez por algum outro motivo. Você pode fazer algo assim:
1 2 3 4 5 |
$ eco "select * from `beer-sample` limit 10;" | ./cbq $ gato arquivo.txt | ./cbq $ ./cbq < arquivo.txt |
É claro que acima há três maneiras diferentes de fazer as coisas.
É comum querer armazenar os resultados da consulta em um arquivo de saída. Talvez seus analistas coletem os dados ou talvez você tenha outros scripts que verifiquem se os dados apropriados foram gerados. Para especificar um arquivo de saída no momento da inicialização, adicione os seguintes parâmetros:
1 2 3 |
$ eco "select * from `beer-sample` limit 10;" | ./cbq -o nome do arquivo.txt |
Observe o -o nome do arquivo.txt
no trecho acima. Os resultados dessa consulta serão salvos em um arquivo.
Gerenciamento de consultas
Com o Couchbase 4.5, você pode usar o CBQ para monitorar as operações de consultas individuais e nós de serviço de consulta, bem como interagir com o próprio serviço de consulta. Por exemplo, digamos que você tenha uma carga pesada em seu cluster. Uma das coisas lógicas a fazer seria ver que tipo de consultas estão sendo executadas no momento. Para fazer isso com o CBQ, você pode executar o seguinte:
1 2 3 |
SELECT * DE sistema:active_requests; |
A execução do comando acima lhe daria resultados semelhantes aos seguintes:
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 28 29 30 31 32 33 34 |
{ "requestID": "7796392a-df14-4687-a885-5db355ba22b9", "assinatura": { "*": "*" }, "resultados": [ { "active_requests": { "ElapsedTime" (Tempo decorrido): "1.160625ms", "ExecutionTime" (Tempo de execução): "1.131825ms", "PhaseCounts": { "PrimaryScan": 2 }, "PhaseOperators": { "Buscar": 1, "PrimaryScan": 1 }, "RequestId": "7796392a-df14-4687-a885-5db355ba22b9", "RequestTime": "2016-05-03 08:42:07.733283136 -0400 EDT", "Estado": "em execução", "Declaração": "SELECT * FROM system:active_requests" } } ], "status": "sucesso", "métricas": { "elapsedTime" (tempo decorrido): "1.25837ms", "executionTime": "1.229031ms", "resultCount": 1, "resultSize": 610 } } |
Obviamente, em meu computador local, a única consulta que estava sendo executada era a consulta para descobrir as solicitações ativas no cluster. Em um ambiente de produção, esse número será muito maior.
Agora, talvez você perceba que muitas consultas iguais estão sendo executadas em sua pesquisa de solicitações ativas. Pode ser uma boa ideia fazer uma declaração preparada com elas. No entanto, talvez elas já sejam instruções preparadas. Você pode verificar executando o seguinte:
1 2 3 |
SELECT * DE sistema:preparações; |
A consulta acima fornecerá informações sobre todos os comandos preparados conhecidos e seu estado no cache de comandos preparados do mecanismo de consulta.
E se você tiver feito declarações preparadas, mas, de vez em quando, o desempenho do seu servidor ainda estiver em alta? Com os recursos do CBQ para gerenciamento de consultas, você pode examinar as consultas lentas, mas concluídas. Você pode verificar as consultas anteriores executando o seguinte:
1 2 3 |
SELECT * DE sistema:completed_requests; |
Lembre-se de que mencionei lentidão. Você pode determinar a lentidão com base em um limite que você define no cbq-engine. Por padrão, qualquer consulta executada por mais de 1 segundo entrará nessa categoria, mas talvez você só se preocupe com consultas mais longas. Esse valor pode ser alterado.
Mais informações sobre o gerenciamento de consultas podem ser encontradas aqui.
Talvez você esteja mais interessado em executar instruções preparadas do que em monitorar as atividades de consulta que estão acontecendo. No CBQ, você pode usar a função EXECUTAR
para executar sua declaração preparada. Algo parecido com isto:
1 2 3 |
EXECUTAR nome-de-preparado-stmt; |
Muitas de suas instruções preparadas serão consultas parametrizadas. Afinal de contas, você está se prevenindo contra a injeção de SQL. Para passar parâmetros nomeados, você pode fazer o seguinte:
1 2 3 4 |
CONJUNTO -$r 9.5; CONJUNTO -$data "1-1-2016"; |
Esta não é a primeira vez que você viu CONJUNTO
. Nós o usamos para definir credenciais, mas dessa vez prefixando algo com -$
estamos dizendo que é um parâmetro nomeado.
Se preferir usar parâmetros posicionais, você pode chamar CONJUNTO
em uma matriz de dados:
1 2 3 |
CONJUNTO -argumentos [ 9.5, "1-1-2016"]; |
Deve EXECUÇÃO
da sua consulta ficar fora de controle e você precisar interrompê-la. Basta pressionar controle+c e ele irá parar.
Gerenciamento de sessões
O gerenciamento de sessões não é muito diferente do que já descrevi quando se trata de consultar e adicionar credenciais de usuário. Como parte dos recursos avançados do CBQ, é possível gerenciar diferentes sessões de shell ou definir várias preferências de usuário.
Anteriormente, você viu como CONJUNTO
e NÃO CONFIGURADO
em uma sessão, mas você também pode usar os parâmetros PUSH
e POP
. Em vez de definir um conjunto de parâmetros de nível superior, você está criando uma pilha de parâmetros para a sua sessão. Isso pode ser útil para scripts ou qualquer outra coisa.
Digamos que você tenha muitas consultas malucas que planeja usar continuamente com o CBQ. Em vez de ter de se lembrar de cada consulta, você pode definir um alias para elas. Por exemplo:
1 2 3 |
ALIAS minha_consulta SELECT * DE `padrão`; |
Sim, a consulta acima não é muito complexa, mas poderia ser. Se você quisesse executar essa consulta, poderia executar o seguinte no CBQ:
1 2 3 |
\minha_consulta; |
Não há muito o que fazer, mas a possibilidade de fazer alias de consultas é muito importante quando se pensa em bancos de dados concorrentes. O aliasing de consultas é um recurso exclusivo do Couchbase e pode lhe poupar muito tempo ao fazer consultas.
Conclusão
Você acabou de experimentar alguns dos novos recursos do CBQ que apareceram a partir do Couchbase Server 4.5. Você pode mexer nos recursos de gerenciamento de conexão, segurança, criação de scripts, gerenciamento e monitoramento de consultas e gerenciamento de sessões para aumentar sua produtividade com o Couchbase Server.
Para obter uma lista mais completa de comandos e recursos, visite o site documentação oficial no portal do desenvolvedor.