Introdução
Este blog foi criado para usuários que conhecem os conceitos básicos do Couchbase Server e das visualizações. Os usuários iniciantes devem comece aqui para obter uma compreensão básica do Couchbase Server e, em seguida continue aqui para conhecer as visualizações.
As visualizações foram adicionadas ao Couchbase Server há quase nove anos para dar suporte ao acesso à chave secundária nos dados json armazenados. Elas nos serviram bem, mas agora temos alternativas melhores, a saber Indexação secundária global e Consulta N1QL, Pesquisa de texto completo e Análises. Neste blog, tentaremos obter uma compreensão básica das visualizações, dos casos de uso comuns que elas suportam e de suas limitações. Mais tarde, em um segundo blog, daremos uma olhada nas melhores alternativas mencionadas anteriormente.
O que é uma visualização do Couchbase?
Primeiro, vamos aprender o que é uma visualização do Couchbase e como ela funciona. Uma visualização é basicamente uma versão materializada de partes selecionadas de um conjunto de dados. Sua definição é armazenada em um documento de design que inclui uma função "Map" que opera nos dados de chave-valor, que é então alimentada por uma fase subsequente (opcional) de "Reduce" que resume ainda mais os dados. Ambas as saídas são materializadas em disco no diretório "views" em cada nó de dados do cluster.
Como funciona uma visualização?
As exibições do Couchbase são eventualmente consistentes com seus dados de origem. Cada visualização é atualizada em intervalos frequentes, por padrão a cada 5 segundos ou 5000 mutações, o que ocorrer primeiro. Elas são semelhantes às exibições materializadas da Oracle, que são locais para partições de dados e são atualizadas usando um conjunto de regras em alguns intervalos predefinidos.
As réplicas de exibição e a compactação são muito fáceis de configurar. As réplicas podem ser ativadas facilmente por bucket. A compactação pode ser configurada com a mesma facilidade junto com a política de compactação dos buckets.
As visualizações usam funções de mapa e redução para pré-calcular e armazenar seus resultados, minimizando, assim, a necessidade de cálculos just in time. As funções de visualização são escritas em JavaScript. Portanto, você pode expressar uma lógica bastante complexa em uma definição de visualização sem ter que sofrer longas latências no momento da consulta. Uma função de mapa é a parte mais importante de qualquer visualização, pois cria um mapeamento lógico entre o conjunto de dados de origem e seu subconjunto mantido pela visualização. Cada função de mapa recebe um argumento "doc" e um argumento "meta" que dá à função acesso a cada item armazenado e seus metadados.
A forma básica de uma função de mapa é a seguinte:
1 2 3 4 5 6 |
função(doc, meta) { se (doc.atributo){ emitir(doc.atributo); } } |
Essa função retorna linhas contendo chaves e valores do atributo doc.
O Couchbase fornece algumas funções de redução incorporadas, a saber, _count (fornece uma contagem simples das linhas geradas pela função de mapa), _sum (fornece uma soma dos valores gerados pela função de mapa, desde que sejam numéricos; suporta soma em nível de grupo) e _stats (fornece contagem, mínimo, máximo, soma e soma quadrada dos valores gerados pela função de mapa, desde que sejam numéricos).
Há suporte para a gravação de funções de redução personalizadas, bem como para a substituição das funções de redução incorporadas.
Consulta de uma visualização
As consultas de visualização podem ser baseadas em uma única chave, conjunto de chaves ou intervalos de chaves com início e fim especificados. Uma consulta de visualização pode ser direcionada a qualquer nó de dados, que a espalha para o restante dos nós de dados no cluster e reúne os resultados deles, agrupa os resultados e responde à consulta. Essa abordagem é chamada de "dispersão e coleta".
As visualizações oferecem três níveis de consistência no momento da consulta por meio do uso de um parâmetro chamado 'stale'. O valor de stale 'update_after' é o padrão. Ele retorna os resultados da consulta de exibição e, em seguida, aciona uma atualização de índice. Ele oferece respostas rápidas, mas os resultados da consulta podem ser obsoletos. O valor de desatualização "ok" significa que os resultados da consulta são retornados sem acionar uma atualização de índice. Obviamente, ele oferece respostas rápidas, mas os resultados podem ficar obsoletos. O valor de desatualização "false" significa que o índice de visualização é atualizado antes da execução da consulta e, portanto, a resposta pode ser atrasada.
Casos de uso comuns para visualizações
As visualizações suportam facilmente casos de uso comuns, como:
- geração de listas de dados sobre tipos de objetos específicos
- geração de tabelas e listas de informações com base em seus dados armazenados
- Extração ou filtragem de informações do banco de dados
- retornar agregações ou reduções pré-calculadas em coleções de dados armazenados
- grupo multinível por agregações
- consulta de dados geoespaciais
- paginação
Agora, vamos criar e consultar uma exibição para ver como um mapa e as funções de redução construídas trabalham juntos para nos fornecer agregações estatísticas da altitude geográfica de todos os aeroportos no conjunto de dados de amostra de viagem. Esta captura de tela da interface de usuário do Console do administrador do Couchbase mostra como uma exibição pode ser criada.
Impressionante!
Sem dúvida, as visualizações são fáceis de criar e de usar. No entanto, elas têm suas desvantagens e limitações. Vamos dar uma olhada em como o exemplo acima pode ser facilmente atendido usando recursos modernos e melhores do Couchbase: Global Secondary Indexing e N1QL.
Primeiro, carregue o bucket travel-sample e crie um índice secundário com a seguinte definição.
1 |
CRIAR ÍNDICE geo_altitude_idx ON `viagens-amostra`(geo.alt); |
Em seguida, execute a seguinte consulta N1QL.
1 |
SELECIONAR SUM(geo.alt) como soma, CONTAGEM (geo.alt) como contagem, MIN(geo.alt) como min, MAX(geo.alt) como mistura, SUM(PODER(geo.alt,2)) como somasqr DE `viagens-amostra`; |
Essa consulta retorna o seguinte conjunto de resultados.
1 2 3 4 5 6 7 |
{ "count" (contagem): 1968, "min": -54, "mix": 9078, "sum": 1712485, "sumsqr": 5303561573 } |
Isso é muito fácil!
Limitações das visualizações
Embora as visualizações ofereçam grande facilidade e flexibilidade na expressão da lógica de indexação e consulta, elas têm seus pontos fracos e desvantagens, como
- Eles não são fáceis de escalar porque estão vinculados a partições de dados. Portanto, não podem se beneficiar do dimensionamento multidimensional do Couchbase.
- Não é possível obter o isolamento da carga de trabalho com as visualizações pelo motivo mencionado acima.
- Eles não podem fornecer uma taxa de transferência superior a alguns milhares de QPS devido à dependência da persistência do disco e da sobrecarga de coleta de dispersão.
- O armazenamento de índices de visualização no disco junto com as partições de dados aumenta a quantidade total de dados no disco de cada nó de dados. Isso resulta em tempos de rebalanceamento mais longos. Da mesma forma, o armazenamento, a atualização e a compactação dos índices de visualização aumentam a utilização de E/S do disco.
- Nenhuma cota de memória é reservada para o armazenamento em cache dos índices de visualização. Portanto, eles não podem oferecer o melhor desempenho.
- As visualizações não oferecem uma forte verificação de erros; portanto, é fácil cometer erros em suas definições. Por exemplo, pode-se facilmente tentar analisar um atributo json que pode existir apenas em um subconjunto de documentos. A função de mapa para essa visualização registra erros de análise para documentos em que esse atributo não existe.
- As atualizações de visualização geralmente levam muito tempo porque são vinculadas ao disco. A modificação de uma definição de visualização existente ou a execução de uma compilação completa em uma visualização de desenvolvimento faz com que toda a visualização seja recriada. O problema se amplia quando um único documento de design tem várias visualizações.
- Os buckets efêmeros oferecem baixa latência e leituras e gravações consistentes de alta taxa de transferência, mas não é possível criar exibições neles porque esses buckets não têm persistência em disco.
- As visualizações são eventualmente consistentes em comparação com os documentos armazenados subjacentes.
Conclusão
As visualizações do Couchbase tiveram um bom desempenho, mas agora temos alternativas melhores que oferecem capacidade de gerenciamento, escalabilidade, desempenho e taxa de transferência muito melhores. Dado o poder expressivo das consultas N1QL, a facilidade de escalonamento oferecida pelo escalonamento multidimensional, o desempenho muito mais alto e a abrangência proporcionada pela Indexação Secundária Global e pela Pesquisa de Texto Completo, é muito provável que as visualizações sejam descontinuadas em breve. Os usuários são incentivados a conhecer as novas alternativas e a começar a planejar a migração. Falaremos mais sobre essas alternativas no próximo blog.