Bancos de dados, contêineres e itens do Azure Cosmos DB

APLICA-SE AO: NoSQL MongoDB Cassandra Gremlin Table

O Azure Cosmos DB é um PaaS (plataforma como serviço) totalmente gerenciado. Para começar a usar o Azure Cosmos DB, crie uma conta do Azure Cosmos DB em um grupo de recursos do Azure na sua assinatura. Em seguida, crie bancos de dados e contêineres na conta.

Sua conta do Azure Cosmos DB contém um nome DNS (Sistema de Nomes de Domínio) exclusivo. Você pode gerenciar o nome DNS usando várias ferramentas, incluindo:

  • Portal do Azure
  • Modelos do Azure Resource Manager
  • Modelos do Bicep
  • Azure PowerShell
  • CLI do Azure
  • SDKs do Gerenciamento do Azure
  • API REST do Azure

Para replicar os dados e a taxa de transferência em várias regiões do Azure, você pode adicionar e remover regiões do Azure à sua conta a qualquer momento. Você pode configurar a conta para ter uma única região ou várias regiões de gravação. Para obter mais informações, confira Gerenciar uma conta do Azure Cosmos DB usando o portal do Azure. Configure também o nível de consistência padrão em uma conta.

Elementos em uma conta do Azure Cosmos DB

Atualmente, você pode criar, no máximo, 50 contas do Azure Cosmos DB em uma assinatura do Azure. Você pode aumentar esse limite fazendo uma solicitação de suporte.

Gerencie um volume de dados e uma taxa de transferência provisionada praticamente ilimitados usando uma conta individual do Azure Cosmos DB. Para gerenciar seus dados e a taxa de transferência provisionada, crie um ou mais bancos de dados em sua conta e, depois, crie um ou mais contêineres para armazenar seus dados.

A imagem a seguir mostra a hierarquia de elementos em uma conta do Azure Cosmos DB.

Diagrama da hierarquia de uma conta do Azure Cosmos DB, incluindo uma conta, um banco de dados e um contêiner.

A imagem a seguir mostra a hierarquia de entidades em uma conta do Azure Cosmos DB.

Diagrama do relacionamento entre um contêiner e os itens, incluindo entidades irmãs como procedimentos armazenados, funções definidas pelo usuário e gatilhos.

Bancos de dados do Azure Cosmos DB

No Azure Cosmos DB, um banco de dados é semelhante a um namespace. Um banco de dados é simplesmente um grupo de contêineres. A tabela a seguir mostra como um banco de dados é mapeado para várias entidades específicas da API:

Entidade do Azure Cosmos DB API de NoSQL API para Apache Cassandra API para MongoDB API para Apache Gremlin API para Tabela
Banco de Dados do Azure Cosmos DB Banco de dados Keyspace Banco de dados Backup de banco de dados Não aplicável

Observação

Com as contas da API de Tabela, as tabelas do Azure Cosmos DB são criadas no nível da conta para manter a compatibilidade com o Armazenamento de Tabelas do Azure.

Contêineres do Azure Cosmos DB

É em um contêiner do Azure Cosmos DB que os dados são armazenados. Ao contrário da maioria dos bancos de dados relacionais, que são escalados verticalmente com tamanhos maiores de máquinas virtuais, o Azure Cosmos DB é escalado horizontalmente.

Os dados são armazenados em um ou mais servidores chamados partições. Para aumentar as partições, você aumenta a taxa de transferência ou elas crescem automaticamente, à medida que o armazenamento aumenta. Essa relação oferece uma quantidade praticamente ilimitada de taxa de transferência e armazenamento para um contêiner.

Ao criar um contêiner, você precisa fornecer uma chave de partição. A chave de partição é uma propriedade que você seleciona nos seus itens para ajudar o Azure Cosmos DB a distribuir os dados com eficiência entre as partições. O Azure Cosmos DB usa o valor dessa propriedade para rotear os dados para a partição adequada onde serão gravados, atualizados ou excluídos. Use também a chave de partição da cláusula WHERE em consultas para uma recuperação eficiente de dados.

O mecanismo de armazenamento subjacente para dados no Azure Cosmos DB é chamado de partição física. As partições físicas podem ter uma taxa de transferência de até 10 mil Unidades de Solicitação por segundo e podem armazenar até 50 GB de dados. O Azure Cosmos DB elimina esse conceito de particionamento com uma partição lógica, que pode armazenar até 20 GB de dados.

As partições lógicas permitem que o serviço forneça maior elasticidade e melhor gerenciamento de dados nas partições físicas subjacentes, à medida que você adiciona mais partições. Para saber mais sobre particionamento e chaves de partição, confira Particionamento e escala horizontal no Azure Cosmos DB.

Ao criar um contêiner, você configura a taxa de transferência em um dos seguintes modos:

  • Taxa de transferência dedicada: a taxa de transferência em um contêiner é reservada exclusivamente para esse contêiner. Há dois tipos de taxa de transferência dedicada: padrão e dimensionamento automático. Para saber mais, confira Provisionar a taxa de transferência padrão (manual) em um contêiner do Azure Cosmos DB.

  • Taxa de transferência compartilhada: a taxa de transferência é especificada no nível do banco de dados e, em seguida, compartilhada com até 25 contêineres dentro do banco de dados. O compartilhamento de taxa de transferência exclui os contêineres que estão configurados com uma taxa de transferência dedicada própria.

    A taxa de transferência compartilhada pode ser uma boa opção quando todos os contêineres no banco de dados têm solicitações e necessidades de armazenamento semelhantes ou quando você não precisa de um desempenho previsível nos dados. Para saber mais, confira Provisionar a taxa de transferência padrão (manual) em um banco de dados do Azure Cosmos DB.

Observação

Não é possível alternar entre a taxa de transferência dedicada e compartilhada. Os contêineres que você criou em um banco de dados de taxa de transferência compartilhada não podem ser atualizados para ter a taxa de transferência dedicada. Para alterar um contêiner da taxa de transferência compartilhada para a dedicada, crie um contêiner e copie os dados para ele. O recurso de cópia de contêiner do Azure Cosmos DB pode facilitar esse processo.

Os contêineres são independentes de esquema. Os itens dentro de um contêiner podem ter esquemas arbitrários ou entidades diferentes, desde que compartilhem a chave de partição. Por exemplo, um contêiner pode conter um item ou um documento que tenha informações de perfil do cliente, com um ou mais itens ou documentos que representam todos os pedidos de vendas do cliente. Você pode colocar informações semelhantes para todos os clientes no mesmo contêiner.

Por padrão, todos os dados que você adiciona a um contêiner são indexados automaticamente sem a necessidade de indexação explícita. Você pode personalizar a indexação de um contêiner configurando sua política de indexação.

Para evitar impacto no desempenho, defina a TTL (vida útil) em itens selecionados de um contêiner ou em todo o contêiner, a fim de excluir esses itens automaticamente em segundo plano com uma taxa de transferência não utilizada. No entanto, mesmo que os dados expirados não sejam excluídos, eles não aparecem em nenhuma operação de leitura. Para saber mais, confira Configurar a vida útil no Azure Cosmos DB.

O Azure Cosmos DB fornece uma funcionalidade interna para a captura de dados de alterações chamada feed de alterações. Você pode usá-lo para assinar todas as alterações nos dados em seu contêiner.

Você pode registrar os procedimentos armazenados, gatilhos, UDFs (funções definidas pelo usuário) e procedimentos de mesclagem com o contêiner.

Cada documento dentro de um contêiner precisa ter uma propriedade id que seja exclusiva dentro do valor da propriedade de uma chave lógica desse contêiner. Use essa combinação de propriedades para fornecer uma restrição exclusiva dentro de um contêiner, sem precisar definir explicitamente uma.

Especifique também uma restrição de chave exclusiva em seu contêiner do Azure Cosmos DB que usa uma ou mais propriedades. Uma restrição de chave exclusiva garante a exclusividade de um ou mais valores por chave de partição lógica. Se você criar um contêiner usando uma política de chave exclusiva, não poderá criar nenhum item novo ou atualizado com valores que duplicam os valores especificados pela restrição de chave exclusiva.

Um contêiner é especializado em entidades específicas da API, conforme mostrado na seguinte tabela:

Entidade do Azure Cosmos DB API de NoSQL API para Cassandra API para MongoDB API para Gremlin API para Tabela
Contêiner do Azure Cosmos DB Contêiner Tabela Coleção Grafo Tabela

Observação

Lembre-se de não criar dois contêineres com o mesmo nome, mas que tenham um uso diferente de maiúsculas e minúsculas. Algumas partes da plataforma Azure não diferenciam maiúsculas de minúsculas e esse tipo de nomenclatura pode resultar em confusão ou colisão de dados de diagnóstico e ações em contêineres.

Propriedades de um contêiner do Azure Cosmos DB

Um contêiner do Azure Cosmos DB tem um conjunto de propriedades definidas pelo sistema. Dependendo de qual API você usa, algumas propriedades podem não ser expostas diretamente. A seguinte tabela descreve as propriedades definidas pelo sistema:

Propriedade definida pelo sistema Geradas pelo sistema ou configuradas pelo usuário Finalidade API de NoSQL API para Cassandra API para MongoDB API para Gremlin API para Tabela
_rid Descrição padrão de omissão Identificador exclusivo de um contêiner. Sim Não No No Não
_etag Descrição padrão de omissão Marca da entidade usada para o controle de simultaneidade otimista. Sim Não No No Não
_ts Descrição padrão de omissão Último carimbo de data/hora atualizado do contêiner. Sim Não No No Não
_self Descrição padrão de omissão URI endereçável do contêiner. Sim Não No No Não
id Configurável pelo usuário Nome do contêiner. Sim Sim Sim Sim Yes
indexingPolicy Configurável pelo usuário Política para a criação do índice para o contêiner. Sim Não Sim Sim Yes
TimeToLive Configurável pelo usuário Exclusão automática de um item de um contêiner após um período definido. Para obter detalhes, confira Vida útil. Sim Não No No Sim
changeFeedPolicy Configurável pelo usuário Política de leitura de alterações feitas em itens de um contêiner. Para obter detalhes, confira Feed de alterações. Sim Não No No Sim
uniqueKeyPolicy Configurável pelo usuário Política usada para garantir a exclusividade de um ou mais valores em uma partição lógica. Para obter mais informações, confira Restrições de Chave Exclusiva. Sim Não No No Sim
AnalyticalTimeToLive Configurável pelo usuário Exclusão automática de um item de um contêiner após um período definido, no contexto de um repositório analítico. Para obter detalhes, confira Repositório analítico. Yes Não Sim Não No

Itens do Azure Cosmos DB

Dependendo da API que você usa, as entidades de dados individuais podem ser representadas de várias maneiras:

Entidade do Azure Cosmos DB API de NoSQL API para Cassandra API para MongoDB API para Gremlin API para Tabela
Item do Azure Cosmos DB Item Linha Documento Nó ou borda Item

Propriedades de um item

Cada item do Azure Cosmos DB tem as propriedades definidas pelo sistema listadas a seguir. Dependendo de qual API você usa, algumas delas podem não ser expostas diretamente.

Propriedade definida pelo sistema Geradas pelo sistema ou definidas pelo usuário Finalidade API de NoSQL API para Cassandra API para MongoDB do DB API para Gremlin API para Tabela
_rid Descrição padrão de omissão Identificador exclusivo do item Sim Não No No Não
_etag Descrição padrão de omissão Marca da entidade usada para controle de simultaneidade otimista Sim Não No No Não
_ts Descrição padrão de omissão Carimbo de data/hora da última atualização do item Sim Não No No Não
_self Descrição padrão de omissão URI endereçável do item Sim Não No No Não
id Você pode usar o Nome exclusivo definido pelo usuário em uma partição lógica Sim Sim Sim Sim Sim
Propriedades arbitrárias definidas pelo usuário Definido pelo Usuário Propriedades definidas pelo usuário na representação nativa da API (incluindo JSON, BSON e CQL) Sim Sim Sim Sim Sim

Observação

A exclusividade da propriedade id é aplicada em cada partição lógica. Vários documentos podem ter o mesmo valor da propriedade id com valores diferentes de chave de partição.

Operações em itens

Os itens do Azure Cosmos DB dão suporte às seguintes operações. Você pode usar qualquer uma das APIs do Azure Cosmos DB para realizar as operações.

Operação API de NoSQL API para Cassandra API para MongoDB API para Gremlin API para Tabela
Inserir, substituir, excluir, executar upsert e ler Yes Sim Sim Sim Yes