Os aprimoramentos do N1QL chegaram ao Couchbase. O N1QL é um dos principais recursos do Couchbase Server. A versão do Servidor Couchbase 5.0 reforça ainda mais o N1QL com uma série de aprimoramentos.
Muitos desses aprimoramentos foram abordados em postagens anteriores do blog (como Postagem de Nic Raboy sobre aprimoramentos de desempenho). Esta postagem não abordará todos os aprimoramentos do N1QL. Dê uma olhada em O que há de novo no Couchbase? para obter informações completas.
Observações importantes: Para acompanhar o processo, você pode instalar Servidor Couchbase 5.0 em seu computador local. Você também pode explorar alguns desses aprimoramentos do N1QL sem sequer instalar o Couchbase Server, verificando o Tutorial on-line de 10 minutos. Além disso, este blog está sendo escrito com uma versão candidata a lançamento do Couchbase Server, que pode ser ligeiramente diferente do lançamento real.
Aprimoramentos do N1QL para RBAC
Um dos maiores recursos novos do Couchbase Server 5.0 é o Controle de Acesso Baseado em Função (RBAC) integrado. Para saber a história completa, você pode conferir Postagens anteriores do blog sobre RBAC.
Mas, do ponto de vista dos aprimoramentos do N1QL, há duas palavras-chave que você deve conhecer: CONCESSÃO e REVOGAÇÃO.
A documentação aborda bem o assunto, mas aqui está um exemplo rápido. Criarei um usuário "myuser" e darei a esse usuário apenas uma função: Leitor de dados no bucket "travel-sample".

Eu poderia editar esse usuário na interface do usuário para dar a ele o Data Writer.
CONCESSÃO e REVOGAÇÃO
Mas aqui está como fazer isso com um CONCESSÃO Comando N1QL:
|
1 2 3 |
GRANT data_writer ON `travel-sample` TO myuser; |
Depois disso, você pode navegar até a seção "Security" (Segurança) do Console do Couchbase para ver que "myuser" tem a nova permissão.

Você pode encontrar todos os nomes de funções (como "data_writer") na seção Documentação 5.0.
REVOGAÇÃO funciona da mesma forma, mas ao contrário.
sistema Espaços de chaves para RBAC
Há alguns novos espaços-chave do sistema que fazem parte dos aprimoramentos do N1QL 5.0. SELECT * FROM system:user_info retornará informações sobre cada usuário e suas funções.

Você pode usar SELECT * FROM system:applicable_roles keyspace para obter uma lista de todas as informações de função.
Observe que somente os administradores e os usuários com a função "Query System Catalog" têm acesso a esses espaços-chave.
enrolar
Como Isha escreveu em um blog anteriormenteAgora, você pode usar uma função CURL do N1QL para consultar dados JSON externos. Definitivamente, há implicações de segurança ao usar o CURL, portanto, certifique-se de ler a seção completa Documentação do N1QL CURL antes de decidir usar esse aprimoramento do N1QL.
Antes de poder usar o CURL, preciso adicionar um URL a uma lista de permissões. No Windows, isso é feito criando um arquivo na pasta /var/lib/couchbase/n1qlcerts (também tive que criar a pasta n1qlcerts) chamado curl_whitelist.json. O caminho padrão completo para sua referência é: C:\Arquivos de programas\Couchbase\Server\var\lib\couchbase\n1qlcerts\curl_whitelist.json.
Criei um arquivo com uma única entrada de URL (swapi.co é a API do Star Wars):
|
1 2 3 4 |
{ "all_access": false, "allowed_urls": ["https://swapi.co"] } |
Em seguida, você pode usar o CURL com uma consulta N1QL para recuperar dados JSON. Você poderia recuperar um único planeta, por exemplo, com https://swapi.co/api/planets/3/ou você pode recuperar todos os planetas (que foi o que eu fiz):
|
1 2 |
SELECT p.name, p.climate, p.residents FROM CURL("https://swapi.co/api/planets/").results as p; |
Esse ponto de extremidade retorna 10 planetas de cada vez. Estou restringindo-o apenas ao resultados e ao nome, clima e residentes.

Observe que o CURL para uma consulta também apresenta outros problemas: você está cedendo desempenho e confiabilidade para a fonte de dados externa. Observe também que você pode usar o CURL na própria API REST do Couchbase Server, o que abre muitas possibilidades interessantes.
Índices
Como sempre, uma boa indexação é essencial para obter o melhor desempenho de suas consultas N1QL. Há muitas opções de indexação no Couchbase Server, que não abordarei nesta postagem do blog. Definitivamente Dê uma olhada nesta postagem do blog de Prasad Varakur e também dar uma olhada em alguns dos otimizações que foram adicionados ao Couchbase na versão 5.0.
Para esta postagem, vou abordar apenas o novo índices adaptativos e índices equivalentes.
Índices adaptativos
Nas versões anteriores do Couchbase, se você quisesse indexar combinações de campos, teria de criar um índice para cada combinação. Por exemplo, se eu planejar escrever consultas que verifiquem os campos "type" e "name" juntos ou os campos "type" e "age" juntos, isso exigiria dois índices compostos: um para tipo,nome e um para tipo, estado.
Considere esta consulta:
|
1 2 3 4 |
SELECT l.* FROM `travel-sample` l WHERE l.type='landmark' AND l.state='California'; |
No padrão amostra de viagem balde, o tipo é indexado, mas não o estado. Essa consulta funciona, mas observe como o plano de consulta é plano:

Observe também que as etapas "fetch" e "filter" precisam processar quase 4.500 documentos.
Os índices adaptativos facilitam a criação de índices que suportam melhor as consultas adhoc. Eles podem ser usados para indexar campos específicos ou todos os campos de um documento.
Uma nova palavra-chave introduzida por esta rodada de aprimoramentos do N1QL é SELF. Ele pode criar um índice adaptativo em todos os campos de todos os documentos de "referência" no bucket de amostra de viagem da seguinte forma:
|
1 2 3 |
CREATE INDEX `ai_n1ql_enhancements` ON `travel-sample`(DISTINCT PAIRS(SELF)) WHERE type = 'landmark'; |
Você também pode especificar campos individuais que deseja indexar em vez de SELF.
Depois de criar esse índice, execute o comando SELECIONAR perguntar novamente.

Observe a varredura de índice extra que está ocorrendo para acomodar o estado no qual está fazendo a consulta. Observe também que "filter" e "fetch" estão trabalhando com menos documentos: apenas 1900. Com o tamanho relativamente pequeno do bucket "travel-sample", isso representa uma pequena economia geral. Com um real contendo milhões de documentos, o tempo economizado pode ser significativo.
Além disso, à medida que suas consultas se tornam mais complexas, índices adaptativos economizará seu trabalho e ainda lhe proporcionará um aumento de desempenho.
Réplicas de índices
Se estiver fazendo uso intenso do N1QL em seu aplicativo, talvez queira criar vários índices que são distribuídos pelo cluster. Esses aprimoramentos do N1QL podem melhorar o desempenho, o balanceamento de carga e a disponibilidade.
Até o Couchbase Server 5, a maneira de fazer isso era criar vários índices idênticos com nomes diferentes. Como Venkat abordou neste postagem anterior do blog sobre réplicas de índiceMas há algumas desvantagens nisso.
Portanto, no Couchbase Server 5, foram introduzidas réplicas de índice. Ao criar um índice, basta usar um num_replica para especificar quantos índices de réplica você deseja criar.
Aqui está um índice sobre o estado que eu estava usando anteriormente no bucket "travel-sample". Nesse caso, vou replicá-lo duas vezes.
|
1 2 3 4 |
CREATE INDEX `ix_state` ON `travel-sample`(state) WHERE state IS NOT MISSING WITH {"num_replica":2}; |
Observe que, para que isso funcione, você precisará de pelo menos três nós executando o serviço de índice (1 para o índice, 2 para as réplicas).
Depois de executar a consulta acima (em um cluster de 3 nós), clique em "Indexes" (Índices). Você verá que "ix_state" aparece três vezes em três nós. Dois deles estão marcados como "réplica".

Você também pode especificar os nós exatos em que deseja colocar as réplicas, especificando os endereços IP em CRIAR ÍNDICE.
O Couchbase cuidará do resto para você. As réplicas de índice serão usadas para consultas de entrada.
Se você não é novo no Couchbase, dê uma olhada em guia sobre a transição de "índices equivalentes" para réplicas de índices.
Para obter mais detalhes, dê uma olhada em Postagem do blog de Venkat sobre réplicas de índice e o Documentação do Couchbase Server 5.0 sobre replicação de índice.
Monitoramento
A tarefa mais difícil ao escrever consultas N1QL é garantir que elas sejam eficientes e tenham bom desempenho. Para isso, o Couchbase Server 5.0 introduziu vários recursos para ajudá-lo a monitorar e traçar o perfil de suas consultas.
Em março, escrevi sobre o novo visualização do plano de consulta. Também escrevi sobre o novos espaços-chave do sistema para monitorar consultas.
Você pode obter a história completa no site Monitoramento de consultas N1QL página de documentação.
Para esta postagem, quero apenas fazer uma rápida atualização. Se você clicar no botão "Plan" (Plano) no Query Workbench, verá uma representação gráfica do plano de consulta. Você pode obter um guia visual de quais partes da consulta levam mais tempo. Por exemplo, o plano de consulta para a consulta acima SELECIONAR consulta:

Há mais alguns aprimoramentos do N1QL que também devem ser lembrados. Dois novos espaços de chave do sistema: system:completed_requests e system:active_requests. Esses espaços-chave contêm informações sobre as consultas que foram executadas ou que estão sendo executadas no momento: quanto tempo levam, erros, em quais nós são executados e assim por diante. Um exemplo rápido:
|
1 2 |
SELECT r.node FROM system:completed_requests r; |
Como tenho réplicas de índice, essa consulta poderia ter sido executada em nós diferentes. Os resultados mostram que sim:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[ { "node": "10.142.173.101:8091" }, { "node": "10.142.173.101:8091" }, { "node": "10.142.173.103:8091" }, { "node": "10.142.173.103:8091" }, // ... etc ... ] |
Não deixe de conferir os outros atualizações de ferramentas no Couchbase Server 5.0. Não é apenas o N1QL que está recebendo aprimoramentos.
Resumo
O N1QL é um dos principais pontos fortes do Couchbase Server, e o Couchbase tem o compromisso de criar aprimoramentos valiosos para o N1QL.
Se você ainda não usou o N1QL, por que não experimentar o Tutorial on-line de 10 minutos hoje?
Tem perguntas ou comentários? Encontre-me em Twitter @mgroves ou envie-me um e-mail matthew.groves@couchbase.com.