Servidor Couchbase

Aprimoramentos de desempenho e recursos do N1QL no Couchbase 5.0

Com a proximidade do lançamento estável do Couchbase 5.0, é uma boa ideia revisitar alguns dos aprimoramentos, tanto em termos de desempenho quanto de recursos, que estão chegando com a tecnologia N1QL.

Então, quais foram alguns dos aprimoramentos feitos na questão do desempenho?

Aprimoramentos de desempenho do N1QL

Vejamos a projeção do índice, por exemplo. Ao criar um índice, você pode criar um com qualquer número de propriedades. Por exemplo, considere o seguinte índice:

A instrução acima criará um índice de cobertura no padrão Balde para o tipo, primeiro nomesobrenome propriedades de um determinado documento.

Agora, digamos que criamos a seguinte consulta N1QL para recuperar alguns documentos com o parâmetro idx que havíamos criado:

A consulta acima usaria o idx e retornar apenas o índice primeiro nome para cada documento correspondente. O conceito de consulta dessa forma não é novo, no entanto, o que acontece nos bastidores mudou. Você notará que, embora nosso índice tenha muitas chaves, estamos interessados apenas em um subconjunto ou, neste caso, em duas chaves.

Então, o que está acontecendo e por que isso é importante?

Nas versões anteriores do Couchbase, todas as chaves do índice eram levadas em consideração, independentemente de apenas um subconjunto ser usado. Como resultado, eram necessários mais rede, CPU e memória para acomodar o que estava acontecendo. Agora, esse não é o caso.

Então, como você sabe que a projeção de índice está acontecendo?

Faça um EXPLICAR na consulta que você está executando:

Nos resultados, você deverá ver algo relacionado a index_projection que se parece com o seguinte:

chaves_de_entrada será alterada com base em sua consulta. Por exemplo, e se adicionarmos um ONDE condição assim?

No cenário acima, obteríamos um EXPLICAR resultado que se parece com o seguinte:

Agora, a consulta acima não foi uma projeção de índice porque usamos todas as chaves em nosso índice de cobertura.

A criação de índices adequados em conjunto com a projeção de índices pode realmente ajudar no desempenho geral e no dimensionamento do cluster do Couchbase Server.

A projeção do índice não foi o único aprimoramento de desempenho feito na compilação de março de 2017, certo? É isso mesmo, há mais!

Vamos pegar o COUNT(DISTINCT) por exemplo. Agora vamos usar essa operação na consulta a seguir:

Nos resultados, você notará que ele está usando IndexCountDistinctScan2 e o que ele está fazendo é armazenar todos os tipo no índice e processando os valores distintos. Embora isso aconteça no indexador no Couchbase 5.0, anteriormente acontecia no serviço N1QL em edições anteriores. Ao transferir essa operação para o indexador, podemos obter ganhos significativos de desempenho.

Da mesma forma, pegue o DESLOCAMENTOLIMITEORDER BY operadores que podem ser usados em consultas N1QL. Veja a consulta a seguir, por exemplo:

Você notará que o LIMITE, ORDER BYDESLOCAMENTO aparecerão no indexador. Antes da versão 5.0, o LIMITE apareceu no indexador, mas agora os outros também aparecem. Essa é uma grande vitória, pois nas versões anteriores do Couchbase, se você compensasse os resultados, o N1QL obteria um número X de resultados e descartaria tudo antes da compensação.

Isso nos leva ao tópico do N1QL e aos aprimoramentos dos recursos de indexação.

Indexação de matriz simplificada

Com o Couchbase Server 4.5, veio a indexação de matriz. Veja o seguinte documento de amostra, por exemplo:

Nova sintaxe de índice de matriz

Antes do Couchbase 5.0, para indexar os elementos da matriz encontrados em mídia social você tinha que escrever um índice parecido com o seguinte:

No exemplo acima, o PARA era necessário para a indexação do array. No Couchbase Server 5.0, há uma sintaxe muito mais simplificada. O mesmo índice pode ser criado da seguinte forma:

Para garantir que seu índice funcione, você pode executar a seguinte consulta N1QL:

Ao examinar os resultados da EXPLICAR você verá que ele está usando o ismo que foi criado anteriormente.

O fato de a sintaxe simplificada existir não significa que você não possa usar a sintaxe anterior na indexação de matriz. O exemplo a seguir seria um exemplo perfeito de por que a sintaxe anterior ainda seria válida:

Observe que a QUANDO foi usado ao criar o operador ism_website índice acima.

Mais informações sobre indexação de matriz podem ser encontradas aquijuntamente com outra documentação útil sobre a criação de índices no Couchbase.

Requisito de correspondência de variável relaxada para índices de matriz

Nas versões 4.x, a indexação de matriz exigia o uso de nomes de variáveis exatamente iguais no SELECIONAR que foram usadas na consulta CRIAR ÍNDICE declaração. Veja mais detalhes aqui.

Por exemplo, referindo-se às consultas anteriores vistas acima, observe que a variável mídia que é usado para iterar pela matriz mídia social é muito importante. A indexação de matrizes na versão 4.x exige o nome exato da variável mídia a ser usado no SELECIONAR consulta.

A versão 5.0 do Couchbase relaxa esse requisito, e a consulta a seguir funcionaria perfeitamente bem:

Observe que o índice ismo usa o nome da variável mídiamas a consulta acima usa m. Ainda assim, a consulta acima pode usar o índice ismo com sucesso.

Um requisito de chave de índice de matriz inteira descontraído para índices de matriz

Lembre-se também de que, nas versões 4.x, a indexação de matriz coberta exige todo o atributo da matriz como uma chave de índice obrigatória na definição do índice da matriz. Por exemplo, veja novamente a consulta a seguir:

O índice da matriz coberta correspondente à consulta acima seria:

Observe que a segunda chave de índice mídia social é obrigatório, por exemplo, para cobrir a consulta a seguir:

No Couchbase 5.0, essa mesma consulta será coberta pelo índice ismo no início deste artigo.

É importante observar que esse recurso traz muito poder aos índices de matriz. Porque, agora, cada entrada no índice de matriz consome menos espaço de armazenamento e memória. Ele permite os seguintes benefícios:

  • Uso de índices de matriz cobertos para matrizes maiores
  • Proporciona mais eficiência e desempenho às consultas que usam índices de matriz cobertos

Indexação de meta-informações de documentos

Vamos dar uma guinada e discutir as novas metainformações que podem ser indexadas. Anteriormente, os índices podiam ser criados na variável meta().id mas agora tanto a propriedade meta().cas e meta().expiração são compatíveis.

Então, como criamos um índice que usa as metapropriedades como chaves? Não é muito diferente do que você já sabe. Veja os seguintes índices de cobertura, por exemplo:

Agora, se eu quisesse usar o idx_cas e idx_exp em uma consulta N1QL, eu poderia fazer algo como o seguinte:

Então, por que seria possível indexar essas propriedades? Bem, e se você quisesse fazer uma consulta de todos os documentos que expiraram hoje ou de todos os documentos que foram modificados hoje?

Para obter mais informações sobre o CAS e as propriedades de expiração, acesse aqui. Para obter mais informações sobre a indexação ou o uso do N1QL com o Couchbase, consulte a seção Portal do desenvolvedor do Couchbase.

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

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.

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.