# Cosmos DB

O Azure Cosmos DB é um serviço de base de dados multimodelo globalmente distribuído oferecido pela Microsoft. Ele foi projetado para fornecer alta disponibilidade, escalabilidade e acesso de baixa latência aos dados para aplicativos modernos. Ao contrário dos bancos de dados relacionais tradicionais, o Cosmos DB é um banco de dados NoSQL, o que significa que pode lidar com tipos de dados não estruturados, semiestruturados, estruturados e vetoriais.

## Modelos de dados

Internamente, o Cosmos DB armazena “itens” em “contêineres”, com esses dois conceitos sendo apresentados de forma diferente dependendo da API usada (esses seriam “documentos” em “coleções” ao usar a API compatível com MongoDB, por exemplo). Os contêineres são agrupados em “bancos de dados”, que são análogos a namespaces acima dos contêineres. Os contêineres são independentes de esquema, o que significa que nenhum esquema é imposto ao adicionar itens.
Por padrão, cada campo em cada item é automaticamente indexado, geralmente fornecendo bom desempenho sem ajustar os padrões de consulta específicos. Esses padrões podem ser modificados definindo uma política de indexação que pode especificar, para cada campo, o tipo e a precisão do índice desejados. O Cosmos DB oferece dois tipos de índices:
intervalo, suportando consultas de intervalo e ORDER BY, espacial, suportando consultas espaciais a partir de pontos, polígonos e linhas codificadas em fragmentos GeoJSON padrão.
Os contêineres também podem impor restrições de chave exclusiva para garantir a integridade dos dados.
Cada contêiner do Cosmos DB expõe uma lista de alterações, ao qual os clientes podem se inscrever para serem notificados sobre novos itens sendo adicionados ou atualizados no contêiner. A partir de 7 de junho de 2021, as exclusões de itens não são atualmente expostas pela lista de alterações. As alterações são persistidas pelo Cosmos DB, o que torna possível solicitar alterações a partir de qualquer ponto no tempo desde a criação do contêiner.
Um “Tempo de Vida” (ou TTL) pode ser especificado no nível do contêiner para permitir que o Cosmos DB exclua automaticamente os itens após uma certa quantidade de tempo expressa em segundos. Essa contagem regressiva começa após a última atualização do item. Se necessário, o TTL também pode ser sobrecarregado no nível do item.

## APIs multimodelos Modelos de dados

* uma API SQL proprietária
* Cinco APIs de compatibilidade diferentes, expondo terminais que são parcialmente compatíveis com os protocolos wire de MongoDB, Gremlin, Cassandra, Armazenamento de tabelas do Azure e etcd.
* Essas APIs de compatibilidade possibilitam que qualquer aplicativo compatível se conecte e use o Cosmos DB por meio de drivers ou SDKs padrão, além de se beneficiar dos principais recursos do Cosmos DB, como particionamento e distribuição global.
| API | Mapeamento interno | Mapeamento interno | Estado da compatibilidade e observações |
| API | Contentores | Artigos | Estado da compatibilidade e observações |
| MongoDB | Coleções | Documentos | Compatível com wire protocol versão 6 e server Versão 3.6 do MongoDB. |
| Gremlin | Gráficos | Nós e arestas | Compatível com a versão 3.2 da especificação Gremlin. |
| Cassandra | Quadro | Linha | Compatível com a versão 4 do Protocolo de ligação Cassandra Query Language (CQL). |
| Armazenamento De Tabelas Do Azure | Quadro | Artigo | |
| etcd | Chave | Valor | Compatível com a versão 3 do etcd. |

## Distribuição Global

Os bancos de dados Cosmos DB podem ser configurados para estarem disponíveis em qualquer uma das regiões do Microsoft Azure (54 regiões em dezembro de 2018), permitindo que os desenvolvedores de aplicativos coloquem seus dados mais perto de onde seus usuários estão. Os dados de cada contêiner são replicados de forma transparente em todas as regiões configuradas. A adição ou remoção de regiões é realizada sem qualquer tempo de inatividade ou impacto no desempenho. Ao aproveitar a API multi-homing do Cosmos DB, os aplicativos não precisam ser atualizados ou reimplantados quando as regiões são adicionadas ou removidas, pois o Cosmos DB encaminhará automaticamente suas solicitações para as regiões disponíveis e mais próximas de sua localização, diminuindo assim o nível de latência.

## Recepção

A Gartner Research posiciona a Microsoft como líder nos Sistemas de Gerenciamento de Banco de Dados Operacionais do Quadrante Mágico em 2016 e destaca os recursos exclusivos do Cosmos DB em sua redação.

## Casos de Utilização reais

A Microsoft utiliza o Cosmos DB em muitas das suas próprias aplicações, que se estendem, mas não se limitam ao Microsoft Office, Skype, Active Directory, Xbox, e MSN.
Ao criar uma aplicação / sistema mais resiliente a nível global, o Cosmos DB combina-se com outros serviços do Azure, como o Azure App Services e o Azure Traffic Manager.