Exibições materializadas para o Azure Cosmos DB for Apache Cassandra (versão prévia)
APLICA-SE AO: Cassandra
Importante
As exibições materializadas no Azure Cosmos DB for Cassandra estão atualmente em versão prévia. Você pode habilitar esse recurso usando o portal do Azure. Essa versão prévia das exibições materializadas é fornecida sem um contrato de nível de serviço. No momento, as exibições materializadas não são recomendadas para cargas de trabalho de produção. Alguns recursos dessa versão prévia podem não ter suporte ou podem ter restrição de funcionalidades. Para obter mais informações, confira os Termos de uso complementares das versões prévias do Microsoft Azure.
Quando definidas, as exibições materializadas ajudarão a fornecer um meio de consultar com eficiência uma tabela base (ou um contêiner no Azure Cosmos DB) com filtros que não são chaves primárias. Quando os usuários gravam na tabela base, a exibição materializada é criada automaticamente em segundo plano. Essa exibição pode ter uma chave primária diferente para pesquisas eficientes. A exibição também conterá somente as colunas projetadas da tabela base. Essa exibição será uma tabela somente leitura.
Você pode consultar um repositório de colunas sem especificar uma chave de partição usando índices secundários. No entanto, essa consulta não será eficaz para colunas com cardinalidade alta ou baixa. A consulta pode examinar todos os dados em busca de um pequeno conjunto de resultados. Essas consultas acabam sendo caras, pois são executadas inadvertidamente como uma consulta de partição cruzada.
Com a exibição materializada, você pode:
- Usar como pesquisa ou tabela de mapeamento para persistir verificações entre partições que, de outra forma, seriam consultas caras.
- Fornecer um predicado condicional baseado em SQL para preencher apenas determinadas colunas e dados que atendam à pré-condição.
- Criar exibições em tempo real que simplifiquem cenários baseados em eventos que normalmente são armazenados como coleções separadas usando gatilhos de feed de alterações.
Benefícios das exibições materializadas
As exibições materializadas têm muitos benefícios que incluem, mas não se limitam a:
- Você pode implementar a desnormalização do lado do servidor usando exibições materializadas. Com a desnormalização do lado do servidor, você pode evitar várias tabelas independentes e desnormalização computacionalmente complexa em aplicativos cliente.
- Exibições materializadas atualizando as exibições automaticamente para mantê-las consistentes com a tabela base. Essa atualização automática abstrai as responsabilidades de seus aplicativos cliente, que normalmente implementariam a lógica personalizada para executar gravações duplas na tabela base e na exibição.
- As exibições materializadas otimizam o desempenho de leitura lendo de apenas uma exibição.
- Você pode especificar a taxa de transferência para a exibição materializada de maneira independente.
- Você pode configurar uma camada de construtor de exibição materializada para mapear para seus requisitos a fim de hidratar uma exibição.
- As exibições materializadas aprimoram o desempenho de gravação, pois as operações de gravação só precisam ser gravadas na tabela base.
- Além disso, a implementação do Azure Cosmos DB de exibições materializadas é baseada em um modelo de pull. Essa implementação não afeta o desempenho de gravação.
Introdução às exibições materializadas
Crie contas de API para Cassandra usando a CLI do Azure para habilitar o recurso de exibições materializadas com um comando nativo ou uma operação de API REST.
Entre no portal do Azure.
Navegue para sua conta da API para Cassandra.
No menu recurso, selecione Configurações.
Na seção Configurações, selecione Exibição Materializada para API do Cassandra (versão prévia).
Na nova caixa de diálogo, selecione Habilitar para habilitar esse recurso para essa conta.
Nos bastidores
A API para Cassandra usa uma camada de computação do construtor de exibição materializada para manter as exibições.
Você obtém a flexibilidade para configurar as instâncias de computação do construtor de exibição com base em seus requisitos de latência e retardo para hidratar as exibições. Em um ponto de vista técnico, essa camada de computação ajuda a gerenciar conexões entre partições de maneira mais eficiente, mesmo quando o tamanho dos dados é grande e o número de partições é alto.
Os contêineres de computação são compartilhados entre todas as exibições materializadas em uma conta do Azure Cosmos DB. Cada contêiner de computação provisionado gera várias tarefas que leem o feed de alterações de partições de tabela base e gravam dados nas exibições materializadas de destino. O contêiner de computação transforma os dados de acordo com a definição de cada exibição materializada na conta.
Criar um construtor de exibição materializada
Crie um construtor de exibição materializada para transformar dados e gravar automaticamente em uma exibição materializada.
Entre no portal do Azure.
Navegue para sua conta da API para Cassandra.
No menu de recursos, selecione Construtor de Exibições Materializadas.
Na página Construtor de Exibições Materializadas, configure o SKU e o número de instâncias para o construtor.
Observação
Essa opção do menu de recursos e a página só aparecerão quando o recurso Exibições Materializadas estiver habilitado para a conta.
Clique em Salvar.
Criar uma exibição materializada
Depois que sua conta e o Construtor de Exibição Materializada estiverem configurados, você poderá criar exibições materializadas usando CQLSH.
Observação
Se você ainda não tiver a ferramenta CQLSH autônoma instalada, confira Instalar a Ferramenta CQLSH. Você também deve atualizar sua cadeia de conexão na ferramenta.
Aqui estão alguns comandos de exemplo para criar uma exibição materializada:
Primeiro, crie um nome
uprofile
do keyspace.CREATE KEYSPACE IF NOT EXISTS uprofile WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'datacenter1' : 1 };
Em seguida, crie uma tabela chamada
user
dentro do keyspace.CREATE TABLE IF NOT EXISTS uprofile.USER (user_id INT PRIMARY KEY, user_name text, user_bcity text);
Agora, crie uma exibição materializada chamada
user_by_bcity
dentro do mesmo keyspace. Especifique, usando uma consulta, como os dados são projetados na exibição da tabela base.CREATE MATERIALIZED VIEW uprofile.user_by_bcity AS SELECT user_id, user_name, user_bcity FROM uprofile.USER WHERE user_id IS NOT NULL AND user_bcity IS NOT NULL PRIMARY KEY (user_bcity, user_id);
Insira linhas na tabela base.
INSERT INTO uprofile.USER (user_id, user_name, user_bcity) VALUES ( 101, 'johnjoe', 'New York' ); INSERT INTO uprofile.USER (user_id, user_name, user_bcity) VALUES ( 102, 'james', 'New York' );
Consulte a exibição materializada.
SELECT * FROM user_by_bcity;
Observe a saída da ferramenta da exibição materializada.
user_bcity | user_id | user_name ------------+---------+----------- New York | 101 | johnjoe New York | 102 | james (2 rows)
Opcionalmente, você também pode usar o provedor de recursos para criar ou atualizar uma exibição materializada.
- Criar ou atualizar uma exibição na API para Cassandra
- Obter uma exibição na API para Cassandra
- Listar exibições na API para Cassandra
- Excluir uma exibição na API para Cassandra
- Atualizar a taxa de transferência de uma exibição na API para Cassandra
Limitações atuais
Há algumas limitações com a versão prévia da implementação de exibições materializadas da API para Cassandra:
- As exibições materializadas não podem ser criadas em uma tabela que existia antes da habilitação do suporte a exibições materializadas na conta. Para usar exibições materializadas, crie uma tabela depois que o recurso for habilitado.
- Para a cláusula
WHERE
da definição da exibição materializada, somente filtrosIS NOT NULL
são permitidos no momento. - Depois que uma exibição materializada é criada em uma tabela base, as operações
ALTER TABLE ADD
não são permitidas no esquema da tabela base.ALTER TABLE APP
só será permitida se nenhuma das exibições materializadas tiver selecionado*
na própria definição. - Há limites para o tamanho da chave de partição (2 Kb) e o tamanho total da chave de clustering (1 Kb). Se esse limite de tamanho for excedido, a mensagem responsável acabará na fila de mensagens suspeitas.
- Se uma tabela base tiver UDTs (tipos definidos pelo usuário) e a definição de exibição materializada tiver
SELECT * FROM
ou tiver o UDT em uma das colunas projetadas, as atualizações de UDT não serão permitidas na conta. - As exibições materializadas podem se tornar inconsistentes com a tabela base para algumas linhas após o failover regional automático. Para evitar essa inconsistência, recompile a exibição materializada após o failover.
- Não há suporte para a criação de instâncias de construtor de exibição materializadas com 32 núcleos. Se necessário, você pode criar várias instâncias de construtor com um número menor de núcleos.
Além das limitações acima, considere as seguintes limitações extras:
- Zonas de disponibilidade
- As exibições materializadas não podem ser habilitadas em uma conta que tenha regiões habilitadas para zona de disponibilidade.
- Não há suporte para adicionar uma nova região com uma zona de disponibilidade depois que
enableMaterializedViews
é definido como true na conta.
- Backup periódico e restauração
- As Exibições Materializadas não são restauradas automaticamente com o processo de restauração. Você precisará recriar as exibições materializadas após a conclusão do processo de restauração. Em seguida, você deve configurar
enableMaterializedViews
em sua conta restaurada antes de criar novamente as exibições materializadas e os construtores.
- As Exibições Materializadas não são restauradas automaticamente com o processo de restauração. Você precisará recriar as exibições materializadas após a conclusão do processo de restauração. Em seguida, você deve configurar
- Apache Cassandra
- Não é permitido definir a política de resolução de conflitos nas exibições materializadas.
- As operações de gravação não são permitidas nas exibições materializadas.
- Não há suporte para consultas entre documentos e uso de funções de agregação nas exibições materializadas.
- O esquema de uma exibição materializada não pode ser modificado após a criação.
- Não será permitido excluir a tabela base se pelo menos uma exibição materializada estiver definida nela. Todas as exibições precisam ser excluídas primeiro e, em seguida, a tabela base pode ser excluída.
- Não é permitido definir exibições materializadas em contêineres com colunas estáticas.