Viva!!! Acabamos de lançar Servidor Couchbase 4.5 que traz uma bagagem cheia de recursos e aprimoramentos maravilhosos. Minha postagem anterior Aproveitando ao máximo suas matrizes... com a indexação de matrizes apresentou a funcionalidade de indexação de matriz. Esta postagem do blog inclui a cobertura de índices de matriz, suporte para mais operadores, como UNNEST, ALL, ANY AND EVERY etc,

Cobertura de índices de matriz

 Índices de cobertura é um recurso de desempenho do N1QL que melhora significativamente o desempenho da consulta, evitando viagens ao serviço de dados para buscar documentos. Não há sintaxe especial para criar/usar índices de cobertura. Essa é uma otimização automática acionada no N1QL, quando uma consulta pode encontrar todos os dados necessários no próprio índice. Portanto, os índices cobertos são apenas GSI normais que são criados com todas as chaves de índice que abrangem os dados necessários para uma consulta.

Normalmente, os índices de matriz são criados com os elementos/atributos necessários dentro da matriz, como chaves de índice. E os índices de cobertura não precisam de nenhuma atenção especial. No entanto, para criar índices de matriz de cobertura, o A própria matriz DEVE também ser adicionado à lista de outras chaves de índice fornecidas à instrução CREATE INDEX. Todos os detalhes da matriz são necessários para que o N1QL avalie corretamente os predicados na consulta.  Por exemplo, o comando a seguir cria um índice de matriz de cobertura no 'schedule[].flight' nos valores do couchbase 'amostra de viagem conjunto de dados:

Observe que o campo de matriz 'programação também precisa ser especificado como uma chave de índice adicional. Por outro lado, um índice de matriz sem cobertura não precisa disso e é criado da seguinte forma:

O comando SELECT a seguir mostra como usar o índice de matriz de cobertura. Ele encontra "os horários das rotas de voo da United Airlines que têm menos de 10 voos programados em uma semana".

Observe que o SELECT segue as regras de seleção de índices descritas na próxima subseção.

  • Os predicados na cláusula where (array_length(schedule) < 10) e (type = "route") correspondem aos da definição do índice.
  • As chaves de índice i. Voo e cronograma são referenciados, usando a variável exata  'i' usado na definição do índice
  • O plano de consulta de explicação mostra os atributos e filtros/predicados cobertos pelo índice de matriz 'isched_covered'

Desempenho

Os índices Covered Array obtêm o melhor desempenho para consultas que podem aproveitar o índice. Por exemplo,  A consulta acima levou 8ms em meu laptop, ao usar o índice de matriz coberto 'isched_covered'. No entanto, a mesma consulta usando o índice 'def_type' levou 3 segundos. Isso é uma loucura 375x melhor desempenho para essa consulta.

Regras de seleção de índices

Independentemente dos operadores usados, a DML deve seguir os requisitos de seleção de índice para usar o índice da matriz.

  1. O Cláusula WHERE deve ser usado nas instruções SELECT ou em outras instruções DML, com chaves de índice correspondentes especificadas na definição CREATE INDEX.
  2. Para índices parciais, os predicados usados na definição de CREATE INDEX devem ser especificados no Cláusula WHERE do DML.
  3. Nomes de variáveis no Cláusula WHERE devem corresponder exatamente aos nomes de variáveis correspondentes usados na definição de CREATE INDEX.

Quando vários índices correspondentes estão disponíveis, o N1QL pode escolher qualquer um dos índices correspondentes para executar a consulta. Se você preferir que sua consulta utilize um índice específico, poderá "sugeri-lo" usando a cláusula USE INDEX na DML.

Suporte para mais operadores N1QL

O Couchbase 4.5 adiciona suporte para os operadores INÚTIL e QUALQUER E TODOS para trabalhar com índices de matriz. Esses operadores podem ser usados nas consultas com índices de matriz cobertos e não cobertos. Observe que:

  • QUALQUER já é compatível com o operador ina versão Developer Preview. Veja o exemplo acima.
  • TODOS não é compatível com o Couchbase 4.5. No entanto, observe que o operador ANY AND EVERY é compatível. Para esclarecer, o operador EVERY é avaliado como verdadeiro para matrizes com zero elementos, enquanto ANY AND EVERY é avaliado como verdadeiro quando a matriz tem pelo menos um elemento correspondente.

Usando UNNEST com índices de matriz

A indexação por matriz oferece suporte à função INÚTIL que pode ser usado para achatar o atributo de matriz no qual o índice é criado e usá-lo como parte da consulta. A instrução UNNEST deve usar exatamente o mesmo nome de variável (ou seja, '' neste exemplo), conforme usado na instrução CREATE INDEX. Por exemplo, a consulta a seguir encontra os detalhes das rotas de voo da United Airlines que têm menos de 10 voos programados em uma semana.

Desempenho

Coberto Os índices de matriz obtêm o melhor desempenho para consultas que podem aproveitar o índice. Por exemplo,  a consulta acima levou 8ms em meu laptop, quando estiver usando o índice da matriz 'isched_covered. No entanto, a mesma consulta usando o índice 'def_type' levou 28sec. Isso é uma loucura Desempenho 3500 vezes melhor para essa consulta.

Usando ANY AND EVERY com índices de matriz

Suportes de indexação de matriz QUALQUER E TODOS operador. Isso pode ser usado para encontrar uma correspondência booleana em um conjunto não nulo de elementos de matriz no qual o índice de matriz é criado. Por exemplo, a consulta a seguir encontra  "O cronograma de rotas que têm pelo menos 1, mas menos de 10, todos os voos da United Airlines em uma semana".

Usando ALL com índice de matriz

No Couchbase 4.5os índices de matriz podem ser criados usando CREATE INDEX somente com a palavra-chave DISTINCT ARRAY. A versão 4.5 do Couchbase adiciona suporte à palavra-chave ALL para criar o índice do array com todos os valores dos elementos do array. Por exemplo,

Você pode saber mais sobre indexação de array e ver mais exemplos, como índices de array composto e aninhado, na seção Couchbase 4.5 documentaçãoe confira o demonstração.

Experimente e me informe se tiver alguma dúvida/comentário ou se ele é incrível ;-)

Saúde!!!

Autor

Postado por Prasad Varakur, gerente principal de produtos da Couchbase

Prasad Varakur é gerente de produto principal da Couchbase. Prasad é líder de produtos e engenharia em bancos de dados (SQL, noSQL, Bigdata) e sistemas distribuídos.

Deixar uma resposta