Editar

Perguntas frequentes sobre o Azure Cosmos DB para Apache Cassandra

APLICA-SE A: Cassandra

Quais são as principais diferenças entre o Azure Cosmos DB para Cassandra e o Apache Cassandra?

Aqui estão algumas diferenças importantes entre a API para o serviço Cassandra e o Apache Cassandra:

  • O Apache Cassandra recomenda um limite de 100 MB no tamanho de uma chave de partição. A API para Cassandra para Azure Cosmos DB permite até 20 GB por partição.
  • Apache Cassandra permite que você desative commits duráveis. Você pode pular a gravação no log de confirmação e ir diretamente para a estrutura de dados na memória. Isso pode levar à perda de dados se o nó ficar inativo antes que as estruturas de dados na memória sejam liberadas para SSTables no disco. O Azure Cosmos DB sempre faz confirmações duráveis para ajudar a evitar a perda de dados.
  • O Apache Cassandra pode ver o desempenho diminuído se a carga de trabalho envolver muitas substituições ou exclusões. O motivo são as lápides que a carga de trabalho de leitura precisa pular para buscar os dados mais recentes. A API para Cassandra não verá um desempenho de leitura diminuído quando a carga de trabalho tiver muitas substituições ou exclusões.
  • Durante cenários de cargas de trabalho de alta substituição, a compactação precisa ser executada para mesclar SSTables no disco. (Uma mesclagem é necessária porque as gravações do Apache Cassandra são apenas append. Várias atualizações são armazenadas como entradas SSTable individuais que precisam ser mescladas periodicamente). Esta situação também pode levar a um desempenho de leitura reduzido durante a compactação. Esse impacto no desempenho não acontece na API para Cassandra porque a API não implementa compactação.
  • Definir um fator de replicação de 1 é possível com o Apache Cassandra. No entanto, isso leva a baixa disponibilidade se o único nó com os dados cair. Isso não é um problema com a API para Cassandra para Azure Cosmos DB porque sempre há um fator de replicação de 4 (quórum de 3).
  • Adicionar ou remover nós no Apache Cassandra requer intervenção manual, juntamente com o alto uso da CPU no novo nó, enquanto os nós existentes movem alguns de seus intervalos de token para o novo nó. Essa situação é a mesma quando você está desativando um nó existente. No entanto, a API para Cassandra é dimensionada sem quaisquer problemas observados no serviço ou aplicativo.
  • Não há necessidade de definir num_tokens em cada nó do cluster como no Apache Cassandra. O Azure Cosmos DB gerencia totalmente nós e intervalos de tokens.
  • A API para Cassandra é totalmente gerenciada. Você não precisa de comandos, como reparo e descomissionamento, que são usados no Apache Cassandra.

Qual versão de protocolo a API para Cassandra suporta?

A API para Cassandra para Azure Cosmos DB suporta Cassandra Query Language (CQL) m versão 3.x. Sua compatibilidade com CQL é baseada no repositório público Apache Cassandra GitHub. Se você tiver comentários sobre o suporte a outros protocolos, envie um e-mail para askcosmosdbcassandra@microsoft.com.

Por que escolher a taxa de transferência para uma tabela é um requisito?

O Azure Cosmos DB define a taxa de transferência padrão para seu contêiner com base em onde você cria a tabela: portal do Azure ou CQL.

O Azure Cosmos DB fornece garantias de desempenho e latência, com limites superiores nas operações. Essas garantias são possíveis quando o motor pode impor governança nas operações do inquilino. A definição da taxa de transferência garante que você obtenha a taxa de transferência e a latência garantidas, porque a plataforma reserva essa capacidade e garante o sucesso da operação. Você pode alterar elasticamente a taxa de transferência para se beneficiar da sazonalidade do seu aplicativo e economizar custos.

O conceito de taxa de transferência é explicado no artigo Unidades de solicitação no Azure Cosmos DB . A taxa de transferência de uma tabela é distribuída igualmente entre as partições físicas subjacentes.

Qual é a taxa de transferência de uma tabela criada por meio do CQL?

O Azure Cosmos DB usa Unidades de Solicitação por segundo (RU/s) como uma moeda para fornecer taxa de transferência. As tabelas criadas através do CQL têm 400 RU por padrão. Você pode alterar a RU no portal do Azure.

CQL

CREATE TABLE keyspaceName.tablename (user_id int PRIMARY KEY, lastname text) WITH cosmosdb_provisioned_throughput=1200

.NET

int provisionedThroughput = 400;
var simpleStatement = new SimpleStatement($"CREATE TABLE {keyspaceName}.{tableName} (user_id int PRIMARY KEY, lastname text)");
var outgoingPayload = new Dictionary<string, byte[]>();
outgoingPayload["cosmosdb_provisioned_throughput"] = Encoding.UTF8.GetBytes(provisionedThroughput.ToString());
simpleStatement.SetOutgoingPayload(outgoingPayload);

O que acontece quando a taxa de transferência é esgotada?

O Azure Cosmos DB fornece garantias de desempenho e latência, com limites superiores nas operações. Essas garantias são possíveis quando o motor pode impor governança nas operações do inquilino. A definição da taxa de transferência garante que você obtenha a taxa de transferência e a latência garantidas, porque a plataforma reserva essa capacidade e garante o sucesso da operação.

Quando você ultrapassa essa capacidade, você recebe a seguinte mensagem de erro que indica que sua capacidade foi esgotada:

0x1001 Sobrecarregado: a solicitação não pode ser processada porque "A taxa de solicitação é grande"

É essencial ver quais operações (e seu volume) causam esse problema. Você pode ter uma ideia sobre a capacidade consumida que ultrapassa a capacidade provisionada com métricas no portal do Azure. Em seguida, você precisa garantir que a capacidade seja consumida quase igualmente em todas as partições subjacentes. Se você vir que uma partição está consumindo a maior parte da taxa de transferência, você tem distorção da carga de trabalho.

Estão disponíveis métricas que mostram como a taxa de transferência é usada ao longo de horas, dias e por sete dias, em partições ou de forma agregada. Para obter mais informações, consulte Monitoramento e depuração com métricas no Azure Cosmos DB.

Os logs de diagnóstico são explicados no artigo de log de diagnóstico do Azure Cosmos DB.

A chave primária é mapeada para o conceito de chave de partição do Azure Cosmos DB?

Sim, a chave de partição é usada para colocar a entidade no local certo. No Azure Cosmos DB, ele é usado para encontrar a partição lógica correta armazenada em uma partição física. O conceito de particionamento é bem explicado no artigo Partição e escala no Azure Cosmos DB . A conclusão essencial aqui é que uma partição lógica não deve ultrapassar o limite de 20 GB.

O que acontece quando recebo uma notificação de que uma partição está cheia?

O Azure Cosmos DB é um sistema baseado em contrato de nível de serviço (SLA). Ele fornece escala ilimitada, com garantias de latência, taxa de transferência, disponibilidade e consistência. Esse armazenamento ilimitado é baseado na expansão horizontal de dados, usando o particionamento como conceito-chave. O conceito de particionamento é bem explicado no artigo Partição e escala no Azure Cosmos DB .

Você deve respeitar o limite de 20 GB no número de entidades ou itens por partição lógica. Para garantir que seu aplicativo seja bem dimensionado, recomendamos que você não crie uma partição ativa armazenando todas as informações em uma partição e consultando-a. Este erro só pode ocorrer se os seus dados estiverem distorcidos: ou seja, você tem muitos dados para uma chave de partição (mais de 20 GB). Você pode encontrar a distribuição de dados usando o portal de armazenamento. A maneira de corrigir esse erro é recriar a tabela e escolher um primário granular (chave de partição), que permite uma melhor distribuição de dados.

Posso usar a API para Cassandra como um armazenamento de valor de chave com milhões ou bilhões de chaves de partição?

O Azure Cosmos DB pode armazenar dados ilimitados dimensionando o armazenamento. Esse armazenamento é independente da taxa de transferência. Sim, você sempre pode usar a API para Cassandra apenas para armazenar e recuperar chaves e valores, especificando a chave primária/partição correta. Essas chaves individuais obtêm sua própria partição lógica e ficam no topo de uma partição física sem problemas.

Posso criar mais de uma tabela com a API para Cassandra?

Sim, é possível criar mais de uma tabela com a API para Cassandra. Cada uma dessas tabelas é tratada como unidade de rendimento e armazenamento.

Posso criar mais do que uma mesa sucessivamente?

O Azure Cosmos DB é um sistema controlado por recursos para atividades de dados e do plano de controle. Contêineres, como coleções e tabelas, são entidades de tempo de execução que são provisionadas para uma determinada capacidade de taxa de transferência. A criação desses contêineres em rápida sucessão não é uma atividade esperada e pode ser limitada. Se você tiver testes que soltam ou criam tabelas imediatamente, tente espaça-los.

Qual é o número máximo de tabelas que posso criar?

Não há limite físico para o número de mesas. Se você tiver um grande número de tabelas (onde o tamanho fixo total ultrapassa 10 TB de dados) que precisam ser criadas, não as habituais dezenas ou centenas, envie um e-mail para askcosmosdbcassandra@microsoft.com.

Qual é o número máximo de keyspaces que posso criar?

Não há limite físico para o número de espaços de chave porque eles são contêineres de metadados. Se você tiver um grande número de keyspaces, envie um e-mail para askcosmosdbcassandra@microsoft.com.

Posso trazer muitos dados depois de começar a partir de uma tabela normal?

Sim. Supondo partições uniformemente distribuídas, a capacidade de armazenamento é gerenciada automaticamente e aumenta à medida que você envia mais dados. Assim, você pode importar com confiança quantos dados precisar sem gerenciar e provisionar nós e muito mais. Mas se você está prevendo vários crescimentos imediatos de dados, faz mais sentido provisionar diretamente a taxa de transferência antecipada em vez de começar mais baixo e aumentá-la imediatamente.

Posso usar as configurações do arquivo YAML para configurar o comportamento da API?

A API para Cassandra para Azure Cosmos DB fornece compatibilidade em nível de protocolo para executar operações. Ele esconde a complexidade do gerenciamento, monitoramento e configuração. Como desenvolvedor/usuário, você não precisa se preocupar com disponibilidade, lápides, cache de chaves, cache de linha, filtro bloom e uma infinidade de outras configurações. A API para Cassandra se concentra em fornecer o desempenho de leitura e gravação de que você precisa sem a sobrecarga de configuração e gerenciamento.

A API para Cassandra suportará a adição de nós, status do cluster e comandos de status do nó?

A API para Cassandra simplifica o planejamento de capacidade e a resposta às demandas de elasticidade para taxa de transferência e armazenamento. Com o Azure Cosmos DB, você provisiona a taxa de transferência de que precisa. Em seguida, você pode dimensioná-lo para cima e para baixo qualquer número de vezes ao longo do dia, sem se preocupar em adicionar, excluir ou gerenciar nós. Você não precisa usar ferramentas para gerenciamento de nós e clusters.

O que acontece com várias definições de configuração para a criação de keyspace, como simple/network?

O Azure Cosmos DB fornece distribuição global pronta para uso por motivos de disponibilidade e baixa latência. Você não precisa configurar réplicas ou outras coisas. As gravações são sempre comprometidas de forma duradoura em qualquer região onde você escreve, ao mesmo tempo em que fornecem garantias de desempenho.

O que acontece com várias configurações para metadados de tabela?

O Azure Cosmos DB fornece garantias de desempenho para leituras, gravações e taxa de transferência. Assim, você não precisa se preocupar em tocar em nenhuma das definições de configuração e manipulá-las acidentalmente. Essas configurações incluem filtro bloom, cache, chance de reparo de leitura, gc_grace e memtable_flush_period de compactação.

O time-to-live é suportado para mesas Cassandra?

Sim, TTL é suportado.

Como posso monitorar a infraestrutura junto com a taxa de transferência?

O Azure Cosmos DB é um serviço de plataforma que ajuda você a aumentar a produtividade e não se preocupar com o gerenciamento e o monitoramento da infraestrutura. Por exemplo, você não precisa monitorar o status do nó, o status da réplica, o gc e os parâmetros do sistema operacional anteriormente com várias ferramentas. Você só precisa cuidar da taxa de transferência disponível nas métricas do portal para ver se está sendo limitado e, em seguida, aumentar ou diminuir essa taxa de transferência. Pode:

Quais SDKs de cliente podem trabalhar com a API para Cassandra?

Os drivers de cliente do Apache Cassandra SDK que usam CQLv3 foram usados para programas cliente. Se você tiver outros drivers que usa ou se estiver enfrentando problemas, envie um e-mail para askcosmosdbcassandra@microsoft.com.

As chaves de partição compostas são suportadas?

Sim, você pode usar a sintaxe regular para criar chaves de partição compostas.

Posso usar sstableloader para carregamento de dados?

Não, sstableloader não é suportado.

Posso emparelhar um cluster Apache Cassandra local com a API para Cassandra?

Agora, o Azure Cosmos DB tem uma experiência otimizada para um ambiente de nuvem sem a sobrecarga de operações. Se você precisar de emparelhamento, envie um e-mail para askcosmosdbcassandra@microsoft.com com uma descrição do seu cenário. Estamos trabalhando em uma oferta para ajudar a emparelhar o cluster Cassandra local ou na nuvem com a API para Cassandra para Azure Cosmos DB.

A API para Cassandra fornece backups completos?

O Azure Cosmos DB fornece dois backups completos gratuitos feitos em intervalos de quatro horas em todas as APIs. Portanto, você não precisa configurar uma agenda de backup.

Você mesmo pode gerenciar a retenção e a frequência do backup.

Se você quiser restaurar a partir do backup, envie um e-mail ou askcosmosdbcassandra@microsoft.com levante um caso de suporte. As informações sobre a capacidade de backup são fornecidas no artigo Backup e restauração online automáticos com o Azure Cosmos DB .

Como a API da conta Cassandra lida com o failover se uma região ficar inativa?

A API para Cassandra é emprestada da plataforma distribuída globalmente do Azure Cosmos DB. Para garantir que seu aplicativo possa tolerar o tempo de inatividade do datacenter, habilite pelo menos mais uma região para a conta no portal do Azure. Para obter mais informações, consulte Alta disponibilidade com o Azure Cosmos DB.

Você pode adicionar quantas regiões quiser para a conta e controlar onde ela pode fazer failover fornecendo uma prioridade de failover. Para usar o banco de dados, você precisa fornecer um aplicativo lá também. Quando você fizer isso, seus clientes não terão tempo de inatividade.

A API para Cassandra indexa todos os atributos de uma entidade por padrão?

N.º A API para Cassandra suporta índices secundários, que se comportam de forma semelhante ao Apache Cassandra. A API não indexa todos os atributos por padrão.

Posso usar a nova API para Cassandra SDK localmente com o emulador?

Sim, esta ação é suportada. Você pode encontrar detalhes sobre como habilitar isso no artigo Usar o emulador do Azure Cosmos DB para desenvolvimento local e teste .

Como posso migrar dados de clusters Apache Cassandra para o Azure Cosmos DB?

Você pode ler sobre as opções de migração no tutorial Migrar seus dados para a API da conta Cassandra no Azure Cosmos DB .