Ultimamente, fala-se um pouco sobre o uso de visualizações materializadas (MV) no Cassandra. Como usuário comum, é difícil saber se é ou não uma boa ideia usar MVs.
Qual é a recomendação para MVs e há orientações disponíveis sobre o assunto?
Ultimamente, fala-se um pouco sobre o uso de visualizações materializadas (MV) no Cassandra. Como usuário comum, é difícil saber se é ou não uma boa ideia usar MVs.
Qual é a recomendação para MVs e há orientações disponíveis sobre o assunto?
Fundo
O ponto central da modelagem de dados no Cassandra é a desnormalização dos dados em tabelas separadas para que cada consulta do aplicativo seja mapeada para uma tabela para leituras otimizadas. Em 2015, o Cassandra 3.0 introduziu exibições materializadas ( CASSANDRA-6477 ) como uma forma automatizada de desnormalização para que você não precisasse projetar e manter tabelas manualmente.
Exemplo
Vejamos uma tabela
comments_by_video
que armazena todos os comentários postados pelos usuários para cada vídeo. A tabela fica assim:No site, os usuários também podem listar todos os comentários que postaram em vários vídeos. A forma usual de modelagem para esta consulta é criar uma nova tabela chamada
comments_by_user
:Nós agruparíamos as atualizações em ambas as tabelas para mantê-las sincronizadas.
Como alternativa, poderíamos criar uma visualização materializada com base na tabela
comments_by_video
para que novos comentários também sejam postados nacomments_by_user
tabela automaticamente. Aqui está como fazemos isso em CQL:Fácil, certo? Não é tão lido.
Embargo
Há um problema - as atualizações ocorrem de forma assíncrona. Em alguns casos, a exibição perde as atualizações e fica fora de sincronia com a tabela base.
Nos últimos anos, entendemos que (a) o design de visualizações materializadas, (b) a implementação ou (c) ambos podem ser falhos. Existem opiniões conflitantes sobre o assunto, mas uma coisa é certa: não há solução rápida se você se deparar com esse problema. A única solução alternativa é descartar a exibição, o que significa uma interrupção em partes do seu aplicativo até que você o recrie.
Por esse motivo, o projeto Apache Cassandra reforçou a classificação "experimental" do recurso de visualização materializada no Cassandra 4.0 ( CASSANDRA-13959 ), onde agora está desativado por padrão e um operador precisará definir explicitamente um sinalizador para habilitá-lo.
Recomendação
Se você já estiver usando visualizações materializadas com sucesso, sinta-se à vontade para continuar a usá-las.
Mas se você está prestes a pular, não. Atenha-se ao design de tabelas separadas.
Referências