Em nossa série de treinamentos contínuos, várias perguntas surgem a cada vez, e eu as relaciono com suas respectivas respostas abaixo!
Couchbase 104 - Visualizações e indexação
P: Há suporte para curingas como * e % em consultas de visualização?
R: Não exatamente, mas em muitos casos o uso de uma consulta de intervalo com texto parcial na chave inicial pode substituir muitas necessidades de curinga, mas não todas. Por exemplo, para obter todas as chaves que começam com "user::", você pode usar startkey="user" e endkey="useruefff". Não é possível fazer coisas como startkey="u%er", que corresponderia a chaves indexadas de "user" e "uzer".
P: Como modelar um gráfico com exibições?
R: A resposta a essa pergunta é um pouco complicada, pois se trata de uma questão muito aberta em termos de definição do que é realmente o seu "gráfico" e como você o consultará. Se estiver fazendo isso no "estilo Twitter", não se trata realmente de um gráfico, mas de uma lista de seguidores e pessoas que você segue. Embora tecnicamente seja um gráfico de profundidade limitada, ele se parece mais com duas listas. Se você estiver consultando o gráfico com base nos atributos de relacionamento entre os nós, isso pode se tornar muito complexo rapidamente. Se também estiver consultando muitos níveis de profundidade (ou graus de separação), isso também pode ser bastante complicado. Os bancos de dados de gráficos são projetados especificamente em suas estruturas de dados para percorrer e consultar estruturas de gráficos. No entanto, eles não são tão bons quanto os armazenamentos de dados de uso geral, portanto, é uma boa ideia fazer uma combinação poliglota do Couchbase com eles (usei o Couchbase e o Neo4J juntos de forma muito boa).
P: Há opções para alterar a ordem padrão de agrupamento?
R: Não de imediato, mas tenho certeza de que há uma maneira de modificar e construir isso a partir do código-fonte. Você pode postar no grupo do Google do Couchbase se isso for importante para você. O agrupamento Unicode é muito mais favorável do que a ordem de bytes.
P: Usando dateToArray(timestamp) como a chave indexada para o emit, como você agruparia apenas por mês?
R: As árvores B+ ainda estão ordenando chaves compostas como cadeias de caracteres, portanto, não haveria como agrupar apenas por mês (vários anos) sem alterar a chave indexada na instrução emit. Você poderia retirar o ano fazendo emit(dateToArray(timestamp).splice(1), output_val) ou criar uma View diferente apenas para isso, se precisar de ambos. Mas se você estiver usando a saída padrão de dateToArray(), que tem o aaaa primeiro, não poderá agrupar apenas por MM e ignorar o aaaa.
P: O que acontece se houver várias emissões em uma única função map() com chaves diferentes sendo emitidas?
R: Eles serão adicionados a um único índice e classificados como cadeias de caracteres dentro dele. Você pode usar isso para fazer junções "simuladas", como mostrei no vídeo e que vem com as visualizações do banco de dados de amostra de cerveja. Cada visualização é um único índice, portanto, cada função Map é o processamento para criar esse índice e cada instrução de emissão dentro da função map gera chaves indexadas como nós e valor de saída associado e meta.id anexado. Também armazenamos o valor de redução desse nó e de todos os nós abaixo dele (filhos) na árvore B+ para acelerar as consultas de redução e não precisar percorrer todos os nós nas reduções.
P: É possível fazer uma pesquisa de texto completo com o Views?
R: Não, isso não é possível com as visualizações como índices, mas você pode usar a integração do Elastic Search para isso. Há também um Developer Preview do N1QL Couchbase Query Language para consultas ad-hoc do Couchbase. É um software que é independente do Couchbase e é executado em paralelo no momento. Há também um tutorial on-line: http://www.couchbase.com/communities/n1ql
[...] Blog da semana #2: Perguntas e respostas sobre o Couchbase 104 [...]