Com a introdução do pesquisa vetorialos usuários agora podem armazenar matrizes de vetores grandes-(muitas vezes compostos por números aparentemente arbitrários) em seus documentos. Como esses dados não são necessários para a maioria das consultas padrão, os usuários agora podem aproveitar atributos estendidos (XATTRs), que fazem parte dos metadados do documento, para armazenar vetores e outros conteúdos volumosos. Ao fazer isso, o desempenho é aprimorado, mantendo os dados pesados fora do caminho da consulta principal. Esta postagem explicará o que são XATTRs, destacará seus benefícios e demonstrará como eles podem ser usados na pesquisa.

Onde estão XATTRs?

Os XATTRs são os metadados de um documento que um usuário pode modificar ou alterar sem alterar o conteúdo do documento. Isso permite que o documento seja separado em duas partes. Os serviços que exigem os documentos os buscarão no Key Value Store (KV), que obtém o conteúdo dos XATTRs somente quando necessário.

Vejamos um exemplo em que o usuário está tentando indexar dados de hotel em que a estrutura do documento é semelhante à seguinte:

Essa estrutura de documento inclui todos os campos necessários para um hotel, juntamente com uma descrição vetorizada usada para encontrar hotéis com descrições semelhantes. O vetor de descrição (linha 25), que é um vetor de 110 dimensões, ocupa cerca de 1.400 bytes, enquanto o restante do documento tem cerca de 1.400 bytes de tamanho.

Em casos de uso comuns, quando um usuário executa uma consulta não vetorial usando o SQL++ sem um índice de cobertura, o documento inteiro é obtido. Isso significa que, embora o vetor, que tem quase a metade do tamanho do documento, não seja necessário, ele ainda é recuperado com o restante do documento, o que acaba desperdiçando recursos.

Imaginemos uma situação em que o usuário não use XATTRs e tenha todos os dados dentro do conteúdo do documento e nenhum deles dentro de XATTRs. Qualquer serviço, como consulta e pesquisa, que tente buscar documentos terá que processar todo o conteúdo do documento para obter o que deseja.

Uma maneira melhor de estruturar esse documento seria armazenar o vetor como parte dos XATTRs. Isso significaria que os serviços que procuram os dados não vetoriais só passarão pelo conteúdo do documento não XATTRs, reduzindo pela metade o volume de dados transferidos.

Os usuários podem até mesmo levar isso ao extremo adicionando outros campos pouco usados, como informações geográficas, detalhes de contato etc., também aos XATTRs. Isso reduz ainda mais a quantidade de dados desnecessários transferidos.

Como indexar o Couchbase XATTRs

A partir do Couchbase Server 7.6.2, o serviço de busca oferece aos usuários a capacidade de ingerir dados presentes em XATTRs somente quando exigido pelo mapeamento do índice durante o processo de criação do índice. Se os dados XATTRs não forem relevantes e um mapeamento XATTRs não estiver presente na definição do índice, os usuários poderão esperar uma taxa mais rápida de ingestão e indexação de dados porque uma carga útil mais leve será obtida do serviço de dados.

Vamos supor que um usuário tenha criado um índice que indexa o conteúdo dos XATTRs. A definição do índice seria semelhante a esta, com XATTRs indexados nas linhas 10-27:

Após a criação do índice usando uma definição de índice como a acima, a pesquisa buscará todo o conteúdo do documento e o conteúdo dos XATTRs no serviço de dados.

Nesse caso, depois de buscar o conteúdo, o serviço de busca combinará os dois em um único documento. Os dados presentes nos XATTRs serão mapeados para o conteúdo do documento em um mapeamento de campo especial denominado _$xattrs durante o processo de indexação.

Para consultar os campos presentes no conteúdo dos XATTRs, deve-se observar que esse conteúdo será colocado em um campo especial denominado _$xattrs e a consulta deve refletir isso. Há também uma restrição inerente ao tamanho do nome do campo XATTRs, que é de 12 caracteres.

Veja como fica a aparência ao criar uma consulta para um documento de amostra com XATTRs:

Os XATTRs não se limitam ao armazenamento de vetores. Sempre que houver campos usados com pouca frequência, campos específicos apenas para o serviço de pesquisa ou campos volumosos, é recomendável adicioná-los aos XATTRs. Dessa forma, os serviços que não precisam desses campos precisam buscar menos dados do KV. 

Próximas etapas

Autor

Postado por Likith B, Engenheiro de software

Deixar uma resposta