Perguntas frequentes sobre o Azure Cosmos DB for Table

APLICA-SE AO: Table

Comparar o Azure Cosmos DB for Table e o Armazenamento de Tabelas do Azure

Em que a API para Tabela não é idêntica com comportamento do Armazenamento de Tabela do Azure?

Há algumas diferenças de comportamento que devem ser observadas por usuários que usavam o Armazenamento de Tabela do Azure que desejam criar tabelas com o Azure Cosmos DB for Table:

  • O Azure Cosmos DB for Table usa um modelo de capacidade reservada para assegurar desempenho garantido, mas isso significa que se paga pela capacidade assim que a tabela é criada, mesmo se a capacidade não estiver sendo usada. Com o armazenamento da Tabela do Azure, paga-se apenas pela capacidade que é usada. Isso ajuda a explicar por que a API para Tabela pode oferecer um SLA com leitura de 10 ms e gravação de 15 ms no 99º percentil enquanto o Armazenamento de Tabelas do Azure oferece um SLA de dez segundos. Mas, como consequência, com tabelas da API para Tabela, até mesmo tabelas vazias sem quaisquer solicitações custam dinheiro para que se garanta que a capacidade esteja disponível para tratar de quaisquer solicitações feitas a elas no SLA oferecido pelo Azure Cosmos DB.

  • Os resultados de consulta retornados pela API para Tabela não são classificados em ordem de chave de linha/chave de partição como é feito no Armazenamento de Tabelas do Azure.

  • As chaves de linha só podem ter até 255 bytes.

  • Os lotes só podem ter até 2 MBs.

  • Não há suporte para CORS no momento.

  • Os nomes de tabela no Armazenamento de Tabelas do Azure não diferenciam maiúsculas de minúsculas, mas estão no Azure Cosmos DB for Table.

  • Alguns dos formatos internos do Azure Cosmos DB para a codificação de informações, como campos binários, atualmente não são tão eficientes quanto se desejaria. Portanto, isso pode causar limitações inesperadas no tamanho dos dados. Por exemplo, no momento você não poderia usar todo o 1 MB de uma entidade de tabela para armazenar dados binários, pois a codificação aumenta o tamanho dos dados.

  • O Azure Cosmos DB reserva os nomes de propriedade da entidade ID, rid, etag e ResourceId, e eles não têm suporte no momento.

  • TableQuery TakeCount não está limitado a 1.000.

  • Em termos da API REST, o Armazenamento de Tabelas do Azure (mas não o Azure Cosmos DB for Table) dá suporte às seguintes opções de pontos de extremidade/consulta:

    Métodos REST Opção de consulta/ponto de extremidade de REST URLs de documento Explicação Com suporte no Armazenamento de Tabelas Com suporte na API para Tabela
    GET, PUT /?Restype=service@comp=properties Definir propriedades de serviço de tabela e Obter propriedades do serviço de tabela Esse ponto de extremidade é usado para definir as regras do CORS, a configuração de armazenamento da análise e as configurações de registro em log. Não há suporte para o CORS atualmente, e análises e registros em log são tratados de maneira diferente no Azure Cosmos DB em relação às Tabelas de Armazenamento do Azure Sim Não
    OPTIONS /<table-resource-name> Solicitação em pré-voo de tabela CORS Isso faz parte do CORS para o qual o Azure Cosmos DB não dá suporte atualmente. Sim Não
    GET /?Restype=service@comp=stats Obter estatísticas do serviço de tabela Fornece informações sobre quão rapidamente os dados estão replicando entre primários e secundários. Isso não é necessário no Azure Cosmos DB, uma vez que a replicação é parte de gravações. Sim Não
    GET, PUT /mytable?comp=acl Obter ACL da tabela e Definir ACL da tabela Isso obtém e define as políticas de acesso armazenadas usadas para gerenciar assinaturas de acesso compartilhado (SAS). Sim Não
  • O Azure Cosmos DB for Table só dá suporte ao formato JSON, ao ATOM não.

  • Particularmente para o SDK do .NET em, há algumas classes e métodos para os quais Azure Cosmos DB não dá suporte atualmente.

    • Classe CloudTableClient
      • \ServiceProperties
      • \ServiceStats
    • Classe CloudTable
      • SetPermissions
      • GetPermissions

Outras perguntas frequentes

É necessário ter um novo SDK para usar a API para Tabela?

Não, SDKs de armazenamento existentes ainda devem funcionar. No entanto, recomenda-se que um sempre sejam obtidos os SDKs mais recentes para ter o melhor suporte e, em muitos casos, desempenho superior. Consulte a lista de idiomas disponíveis na Introdução ao Azure Cosmos DB for Table.

Qual é a cadeia de conexão que preciso usar para me conectar à API para Tabela?

A cadeia de conexão é:

DefaultEndpointsProtocol=https;AccountName=<AccountNamefromCosmosDB;AccountKey=<FromKeysPaneofCosmosDB>;TableEndpoint=https://<AccountName>.table.cosmosdb.azure.com

Você pode obter a cadeia de conexão na página Cadeia de Conexão no Portal do Azure.

Como substituo as definições de configuração das opções de solicitação no SDK do .NET para a API para Tabela?

Algumas configurações são tratadas no método CreateCloudTableClient e outras por meio do app.config na seção appSettings no aplicativo cliente. Para obter informações sobre definições de configuração, consulte Recursos do Azure Cosmos DB.

Há alterações para clientes que estão usando SDKs de armazenamento existentes da Tabela do Azure?

Nenhum. Não há nenhuma alteração para clientes novos ou existentes que estejam usando os SDKs de armazenamento de Tabela do Azure existentes.

Como fazer para exibir dados de tabela que são armazenados no Azure Cosmos DB para uso com a API para Tabela?

Use o portal do Azure para procurar os dados. Você também pode usar o código da API para Tabela ou as ferramentas mencionadas na próxima resposta.

Quais ferramentas funcionam com a API para Tabela?

Você pode usar o Gerenciador de Armazenamento do Azure.

Ferramentas que têm a flexibilidade para aceitar uma cadeia de conexão no formato especificado anteriormente podem dar suporte à nova API para Tabela. Uma lista das ferramentas de tabela é fornecida na página Ferramentas de cliente do Armazenamento do Azure.

A simultaneidade nas operações é controlada?

Sim, a simultaneidade otimista é fornecida com o uso do mecanismo de Etag.

Há suporte para o modelo de consulta OData em entidades?

Sim, a API para Tabela dá suporte às consultas OData e LINQ.

Posso conectar ao Armazenamento de Tabelas do Azure e ao Azure Cosmos DB for Table lado a lado no mesmo aplicativo?

Sim, você pode se conectar criando duas instâncias separadas do CloudTableClient, cada uma apontando para seu próprio URI pela cadeia de conexão.

Como fazer para migrar um aplicativo do armazenamento de Tabelas do Azure existente para essa oferta?

Há suporte para a AzCopy.

Como o aumento de armazenamento é feito nesse serviço se, por exemplo, eu começar com 'n' GB de dados e eles aumentarem para 1 TB ao longo do tempo?

O Azure Cosmos DB foi projetado para fornecer armazenamento ilimitado com o uso da escala horizontal. O serviço pode monitorar e efetivamente aumentar seu armazenamento.

Como fazer para monitorar a oferta da API para Tabela?

Você pode usar o painel Métricas da API para Tabela para monitorar as solicitações e o uso do armazenamento.

Como fazer para calcular a produtividade de que preciso?

Você pode usar o avaliador de capacidade para calcular o TableThroughput necessário para as operações. Para obter mais informações, consulte Estimate Request Units and Data Storage (Estimar Unidades de Solicitação e Armazenamento de Dados). Em geral, você pode mostrar a entidade como JSON e fornecer os números para as operações.

Posso usar o SDK da API para Tabela localmente com o emulador?

Não no momento.

Um aplicativo que já tenho pode funcionar com a API para Tabela?

Sim, há suporte para a mesma API.

Preciso migrar meus aplicativos de Armazenamento de Tabelas do Azure existentes para o SDK caso não deseje usar os recursos da API para Tabela?

Não, você pode criar e usar os ativos de armazenamento da Tabela do Azure sem nenhum tipo de interrupção. No entanto, se você não usar a API para Tabela, não poderá se beneficiar do índice automático, da opção de consistência adicional ou da distribuição global.

Como fazer para adicionar a replicação dos dados na API para Tabela em mais de uma região do Azure?

Você pode usar as configurações de replicação global do portal do Azure Cosmos DB para adicionar regiões que servem para o aplicativo. Para desenvolver um aplicativo distribuído globalmente, você deve também adicionar seu aplicativo com as informações de PreferredLocation definidas como a região local, a fim de fornecer uma baixa latência de leitura.

Como faço para alterar a região de gravação primária da conta na API para Tabela?

Você pode usar o painel do portal de replicação global do Azure Cosmos DB para adicionar uma região e, em seguida, fazer failover para a região desejada. Para obter instruções, consulte Desenvolvendo com contas em várias regiões do Azure Cosmos DB.

Como fazer para configurar minhas regiões de leitura preferenciais com baixa latência ao distribuir meus dados?

Para ajudar a leitura do local, use a chave PreferredLocation no arquivo app.config. Para aplicativos existentes, a API para Tabela gera um erro se LocationMode for definida. Remova esse código, porque a API para Tabela obtém essas informações do arquivo app.config.

Como devo pensar sobre os níveis de consistência na API para Tabela?

O Azure Cosmos DB fornece compensações bem fundamentadas entre consistência, disponibilidade e latência. O Azure Cosmos DB oferece cinco níveis de consistência para os desenvolvedores da API para Tabela para que você possa escolher o modelo de consistência certo no nível da tabela e fazer solicitações individuais ao consultar os dados. Quando um cliente se conecta, ele pode especificar um nível de consistência. Você pode alterar o nível por meio do argumento da consistencyLevel do CreateCloudTableClient.

A API para Tabela fornece leituras de baixa latência com a "Leitura das suas gravações" com a consistência de desatualização limitada como padrão. Para obter mais informações, consulte Níveis de consistência.

Por padrão, o armazenamento de Tabelas do Azure fornece uma coerência Forte em uma região e uma Eventual nas localizações secundárias.

O Azure Cosmos DB for Table oferece mais níveis de consistência que o Armazenamento de Tabelas do Azure?

Sim, para obter informações sobre como se beneficiar da natureza distribuída do Azure Cosmos DB, consulte Níveis de consistência. Como são fornecidas garantias para os níveis de consistência, você pode usá-los com confiança.

Quando a distribuição global é habilitada, quanto tempo é necessário para replicar os dados?

O Azure Cosmos DB confirma os dados de maneira duradoura na região local e efetua o push dos dados para outras regiões imediatamente em questão de milissegundos. Essa replicação depende apenas do RTT (tempo de ida e volta) do data center. Para saber mais sobre a capacidade de distribuição global do Azure Cosmos DB, consulte Azure Cosmos DB: um serviço de banco de dados distribuído globalmente no Azure.

O nível de consistência de solicitação de leitura pode ser alterado?

Com o Azure Cosmos DB, você pode definir o nível de consistência no nível do contêiner (na tabela). Usando o SDK do .NET, você pode alterar o nível fornecendo o valor para a chave TableConsistencyLevel no arquivo app.config. Os valores possíveis são: Forte, desatualização limitada, sessão, prefixo consistente e eventual. Para obter mais informações, consulte Níveis ajustáveis de consistência de dados no Azure Cosmos DB. A ideia da chave é que você não pode definir o nível de consistência da solicitação em mais do que a configuração da tabela. Por exemplo, você não pode definir o nível de consistência para a tabela como Eventual e o nível de consistência de solicitação como Forte.

Como a API para Tabela lida com o failover caso uma região fique inativa?

A API para Tabela utiliza a plataforma distribuída globalmente do Azure Cosmos DB. Para garantir que seu aplicativo pode tolerar o tempo de inatividade do data center, habilite pelo menos mais uma região para a conta no Portal do Azure Cosmos DB Desenvolvendo com contas em várias regiões do Azure Cosmos DB. Defina a prioridade da região usando o portal Desenvolvendo com contas em várias regiões do Azure Cosmos DB.

Você pode adicionar quantas regiões quiser para a conta e controlar para onde ela pode fazer o failover fornecendo uma prioridade de failover. Para usar o banco de dados, você precisa fornecer um aplicativo lá também. Quando você fizer isso, os clientes não terão o tempo de inatividade. O SDK mais recente do cliente .NET tem hospedagem automática, mas outros SDKs não têm. Ou seja, ele pode detectar a região que está inoperante e automaticamente fazer o failover para a nova região.

A API para Tabela está habilitada para backups?

Sim, a API para Tabela utiliza a plataforma do Azure Cosmos DB para backups. Os backups são feitos automaticamente. Para obter mais informações, consulte Backup e restauração online com o Azure Cosmos DB.

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

Sim, por padrão, todos os atributos de uma entidade são indexados. Para obter mais informações, veja Azure Cosmos DB: políticas de indexação.

Isso significa que não é necessário criar mais de um índice para atender às consultas?

Sim, o Azure Cosmos DB for Table fornece a indexação automática de todos os atributos sem nenhuma definição de esquema. Essa automação libera os desenvolvedores para se concentrarem no aplicativo, em vez de na criação e no gerenciamento de índices. Para obter mais informações, veja Azure Cosmos DB: políticas de indexação.

Posso alterar a política de indexação?

Sim, você pode alterar a política de indexação fornecendo a definição de índice. Você precisa codificar e escapar adequadamente as configurações.

A política de indexação só pode ser definida no portal no Data Explorer. Navegue até a tabela específica que deseja alterar e depois até Escala e Configurações–>Política de Indexação, faça as alterações desejadas e depois selecione Salvar.

O Azure Cosmos DB como plataforma parece ter muitas funcionalidades, como classificação, agregações, hierarquia e outras. Vocês adicionarão esses recursos à API para Tabela?

A API para Tabela fornece a mesma funcionalidade de consulta que o Armazenamento de Tabelas do Azure. O Azure Cosmos DB também oferece suporte à classificação, agregações, consulta geoespacial, hierarquia e uma ampla variedade de funções internas. Para obter mais informações, consulte Consultas SQL.

Quando devo alterar a TableThroughput da API para Tabela?

Você deve alterar TableThroughput quando uma das seguintes condições se aplicar:

  • Você está executando uma ETL (extração, transformação e carregamento) de dados ou deseja carregar muitos dados em um curto período de tempo.
  • Você precisa de mais taxa de transferência do contêiner ou de um conjunto de contêineres no back-end. Por exemplo, você verá que a produtividade usada é maior do que a provisionada e você está sendo limitado. Para obter mais informações, consulte Definir a taxa de transferência para contêineres do Azure Cosmos DB.

Posso escalar ou reduzir verticalmente a produtividade da minha tabela da API para Tabela?

Sim, você pode usar o painel de escala do portal do Azure Cosmos DB para dimensionar a produtividade. Para obter mais informações, veja Configurar produtividade.

Há uma configuração padrão de TableThroughput para as tabelas recém-provisionadas?

Sim, se você não substituir o TableThroughput por meio do app.config e não usar um contêiner pré-criado no Azure Cosmos DB, o serviço criará uma Tabela com uma taxa de transferência de 400.

Há alguma alteração de preço para clientes atuais do serviço de armazenamento de Tabela do Azure?

Nenhum. Não há nenhuma alteração no preço para clientes de armazenamento de Tabela do Azure existentes.

Como o preço é calculado para a API para Tabela?

O preço depende da TableThroughput alocada.

Como lidar com a limitação de taxa nas tabelas da oferta da API para Tabela?

Se a taxa de solicitação for mais do que a capacidade da taxa de transferência provisionada para o contêiner ou um conjunto de contêineres subjacente, você receberá um erro, e o SDK tentará realizar a chamada novamente aplicando a política de repetição.

Por que eu preciso escolher uma taxa de transferência além da PartitionKey e da RowKey para aproveitar a oferta da API para Tabela do Azure Cosmos DB?

O Azure Cosmos DB define uma produtividade padrão para o contêiner caso você não forneça uma no arquivo app.config ou por meio do portal.

O Azure Cosmos DB fornece garantias de desempenho e latência com limites superiores na operação. Essa garantia é possível quando o mecanismo pode impor a governança nas operações do locatário. Configurar TableThroughput garante que você obtenha a produtividade e a latência garantidas, pois a plataforma reserva essa capacidade e garante o sucesso operacional.

Usando a especificação de produtividade, você pode alterá-la de forma elástica para se beneficiar da sazonalidade de seu aplicativo, atender às necessidades de produtividade e reduzir custos.

O armazenamento da Tabela do Azure tem custado pouco para mim, pois pago apenas para armazenar os dados e raramente realizo consultas. A oferta do Azure Cosmos DB for Table parece estar me cobrando mesmo sem eu ter realizado nenhuma transação nem armazenado nada. Você pode explicar?

O Azure Cosmos DB foi projetado para ser um sistema baseado em SLA distribuído globalmente com garantias de disponibilidade, latência e produtividade. Quando você reserva a produtividade no Azure Cosmos DB, ela fica garantida, diferentemente da produtividade de outros sistemas. O Azure Cosmos DB fornece mais recursos que os clientes solicitaram, como índices secundários e distribuição global.

Eu nunca recebo uma notificação de “cota cheia” (indicando que uma partição está cheia) quando realizo a ingestão de dados no armazenamento de Tabelas do Azure. Com a API para Tabela, eu recebo essa mensagem. Essa oferta está me limitando e me forçando a alterar meu aplicativo existente?

O Azure Cosmos DB é um sistema baseado em SLA que fornece escala ilimitada com garantias de latência, produtividade, disponibilidade e consistência. Para assegurar o desempenho premium garantido, certifique-se de que seu índice e tamanho de dados sejam gerenciáveis e escalonáveis. O limite de 20 GB no número de entidades ou itens por chave de partição serve para garantir que fornecemos um excelente desempenho de pesquisa e consulta. Para garantir que seu aplicativo dimensiona bem, mesmo para o Armazenamento do Microsoft Azure, recomendamos que você não crie uma partição ativa armazenando todas as informações em uma partição e consultando-a.

PartitionKey e RowKey ainda são necessárias na API para Tabela?

Sim. Uma vez que a área de superfície da API para Tabela é semelhante à do SDK de Armazenamento de Tabelas do Azure, a chave de partição oferece uma maneira eficiente de distribuir os dados. A chave de linha é exclusiva nessa partição. A chave de linha deve estar presente e não pode ser nula como no SDK Standard. O comprimento da RowKey é de 255 bytes e da PartitionKey é de 1 KB.

Quais são as mensagens de erro da API para Tabela?

O Armazenamento de Tabelas do Azure e o Azure Cosmos DB for Table usam os mesmos SDKs, então a maioria dos erros são os mesmos.

Por que recebo um limite quando tento criar várias tabelas uma após a outra na API para Tabela?

O Azure Cosmos DB é um sistema baseado em SLA que fornece garantia de latência, produtividade, disponibilidade e consistência. Como ele é um sistema provisionado, ele reserva recursos para garantir esses requisitos. A rápida taxa de criação de tabelas é detectada e limitada. É recomendável que você examine a taxa de criação de tabelas e a reduza para menos de cinco por minuto. Lembre-se de que a API para Tabela é um sistema provisionado. No momento em que você a provisionar, começará a pagar por ela.

Como fazer para fornecer comentários sobre o SDK ou bugs?

Você pode compartilhar seus comentários em qualquer uma das seguintes maneiras: