Como você provavelmente já sabe, é possível consultar documentos NoSQL do Couchbase usando um dialeto SQL chamado N1QL. Isso é possível por meio de índices que você cria nos documentos em seus Buckets do Couchbase. No entanto, e se eu lhe dissesse que nem toda consulta N1QL exige a existência de um índice? Depois de conversar com meu colega, Justin MichaelsEm sua palestra, ele me mostrou um truque incrível para executar operações em massa no N1QL sem índices. Isso foi novidade para mim, pois sempre achei que era necessário ter pelo menos um índice, mas, enfim, todos os dias aprendemos algo novo.

Veremos como executar algumas consultas N1QL em um arquivo Couchbase Bucket que não tem índices e que não inclui nenhum índice primário.

Antes de entrarmos em alguns cenários de exemplo, você deve estar se perguntando como é possível executar consultas sem um índice. Na verdade, isso é possível com o uso da função USAR CHAVES para se concentrar em documentos específicos por sua chave existente nas metainformações.

Veja o documento a seguir, por exemplo:

Acima, temos um documento simples que representa uma pessoa específica. Digamos que o documento acima tenha garoto como o valor de id. Para tornar as coisas interessantes, vamos criar outro documento.

Suponha que haja o seguinte garoto como o valor de identificação:

Portanto, se quisermos consultar qualquer um desses dois documentos com o USAR CHAVES no N1QL, poderíamos compor uma consulta parecida com a seguinte:

Se você observar o EXPLICAR da consulta acima, você perceberá que nenhum índice foi usado na consulta. O tipo de consulta acima seria útil se você soubesse as chaves que deseja obter e quisesse um desempenho incrivelmente rápido, semelhante ao que foi feito em um artigo anterior que escrevi intitulado, Obtenção de vários documentos por chave em uma única operação com o Node.js.

Vamos tornar as coisas um pouco mais complicadas. E se quiséssemos fazer uma consulta com um relacionamento em uma ou mais propriedades do documento?

Vamos criar outro documento com couchbase como o ID do documento:

O documento acima representa uma empresa. Como você deve ter adivinhado, vamos consultar as informações da empresa de cada pessoa. Para que isso seja possível, vamos alterar a variável garoto para que o documento se pareça com o seguinte:

Observe que adicionamos uma propriedade com a chave do nosso outro documento. Não adicionaremos nenhuma informação da empresa ao documento garoto documento.

Considere a seguinte consulta que tem uma relação de vários documentos, mas nenhum índice criado:

Observe que a consulta acima tem uma subconsulta que também usa o USAR CHAVES operador. Não é ruim, certo? Tente usar outros operadores como INÚTIL para achatar os dados da matriz encontrados no mídia social propriedade.

Conclusão

Você acabou de ver como escrever consultas N1QL no Couchbase que não usam índice. Ao usar o USAR CHAVES operador, podemos fazer operações em massa com base na chave, como demonstrei nos artigos, Obtenção de vários documentos por chave em uma única operação com o Node.jsUso da Golang para obter vários documentos do Couchbase por chave em uma única operação. Agradeço imensamente a Justin Michaels, do Couchbase, por me ajudar com isso.

Para saber mais sobre o N1QL e o Couchbase, confira o Portal do desenvolvedor do Couchbase para obter mais informações.

Autor

Postado por Nic Raboy, defensor dos desenvolvedores, Couchbase

Nic Raboy é um defensor das modernas tecnologias de desenvolvimento móvel e da Web. Ele tem experiência em Java, JavaScript, Golang e uma variedade de estruturas, como Angular, NativeScript e Apache Cordova. Nic escreve sobre suas experiências de desenvolvimento relacionadas a tornar o desenvolvimento móvel e da Web mais fácil de entender.

3 Comentários

  1. Olá, preciso executar uma consulta em vários documentos para compartimentos de dados sem índice.
    Entendi que posso usar o operador USE KEYS com uma lista de valores de id
    Por exemplo, USE KEYS ['a', 'b']
    No meu caso de uso, tenho uma lista de vários IDs de documentos.
    É possível escrever uma consulta como USE KEYS ['*all document id'] em vez de especificar todos os valores de id na matriz USE KEYS ['a', 'b', ....., 'n']?
    Caso contrário, você poderia sugerir outra maneira de escrever esse tipo de consulta.
    Agradecimentos

    1. Se você não quiser usar um índice, terá que especificar todas as chaves. O índice mantém o controle dos documentos, permitindo que você faça essas consultas em todos os IDs de documentos. A ausência de um índice significa que não há nada que mantenha o controle dos documentos, o que o deixa com operações apenas de valor-chave.

      Talvez manter um documento mestre que seja apenas uma matriz de IDs de documentos? Então, quando você precisar fazer uma consulta, procure o documento e use as chaves da matriz na instrução USE KEYS?

  2. ok, pode ser uma solução.
    Obrigado por sua resposta

Deixar uma resposta