O Azure Cosmos DB e um banco de dados NoSQL distribuido globalmente que permite ler e gravar dados rapidamente de qualquer lugar do mundo. Para o exame AZ-204, os topicos principais sao operacoes do SDK, design de chave de particao, 5 niveis de consistencia, feed de alteracoes e programacao do lado do servidor.
SDK: Acessando Dados por uma Hierarquia
Ao encontrar o SDK do Cosmos DB pela primeira vez, a quantidade de nomes de classes pode ser confusa. Pense no organograma de uma empresa para facilitar o entendimento. Sob a sede central (CosmosClient) ha departamentos (Database), sob os departamentos ha equipes (Container), e cada membro individual da equipe e um item (Item).
| Classe | Funcao | Analogia | |--------|--------|---------| | CosmosClient | Conecta-se a toda a conta do Cosmos DB | Central telefonica principal | | DatabaseProxy | Referencia a um banco de dados especifico | Departamento especifico | | ContainerProxy | Referencia a um container especifico | Equipe especifica | | ItemProxy | Documento individual (dados JSON) | Membro individual da equipe |
Com o SDK, voce usa uma unica string de conexao e navega por essa hierarquia para trabalhar com os dados.
Padrao Basico de Operacoes CRUD
Conectar: CosmosClient(endpoint, credential) Referencia de banco de dados: client.get_database_client("mydb") Referencia de container: db.get_container_client("mycontainer") Criar item: container.create_item(body={"id": "1", "pk": "user1", ...}) Ler item: container.read_item(item="1", partition_key="user1") Atualizar item: container.upsert_item(body={...}) Excluir item: container.delete_item(item="1", partition_key="user1") Consulta: container.query_items(query="SELECT * FROM c WHERE c.type = 'order'", ...)
Cada operacao de leitura/gravacao consome custo em RU (Request Unit). Ler um item de 1KB custa aproximadamente 1 RU; gravacoes consomem mais RUs.
Chave de Particao: O Criterio para Dividir os Dados
A chave de particao e a base que o Cosmos DB usa para distribuir dados entre varios servidores. Pense em uma biblioteca. Se voce organiza os livros em ordem alfabetica, livros comecando com certas letras se acumulam em uma prateleira. Se voce os organiza por genero, eles se distribuem uniformemente. O Cosmos DB funciona da mesma forma.
Voce deve lembrar as condicoes para uma boa chave de particao.
| Condicao | Descricao | Exemplos | |----------|-----------|---------| | Alta cardinalidade | Quanto mais valores unicos, melhor | ID de usuario, ID de pedido | | Distribuicao uniforme | Os dados nao devem se concentrar em valores especificos | Cidade, Categoria | | Corresponde a consultas | Deve corresponder aos campos que voce filtra com frequencia | Campos usados em clausulas WHERE |
Voce tambem precisa conhecer exemplos de mas chaves de particao.
Data: Os dados se concentram em datas especificas (problema de particao quente) Booleano: Apenas verdadeiro/falso significa apenas 2 particoes Categorias fixas: Poucos valores distintos concentram a carga em particoes especificas
As chaves de particao nao podem ser alteradas apos a criacao do item, entao escolha cuidadosamente durante o design inicial.
5 Niveis de Consistencia: Equilibrando Velocidade e Precisao
Em um banco de dados distribuido, os dados sao replicados em servidores em todo o mundo. Se voce grava dados em Seoul, os mesmos dados precisam chegar aos servidores em Toquio ou Nova York. O problema e que essa transferencia leva tempo. Os niveis de consistencia controlam o equilibrio entre "quao atualizados estao os dados garantidos" e "quao rapidamente ele responde".
Pense nas noticias de ultima hora. Quando um evento ocorre, alguns veiculos reportam apos verificacao para maior precisao, enquanto outros reportam rapidamente mas corrigem depois.
| Nivel de Consistencia | Garantia | Desempenho | Caso de Uso | |----------------------|---------|------------|-------------| | Strong | Sempre garante os dados mais recentes. Bloqueia leituras ate que todas as replicas reflitam a gravacao | Mais lento | Transacoes financeiras, inventario | | Bounded Staleness | Garante dados dentro de K versoes ou T segundos | Lento | Classificacoes, sistemas de reserva | | Session | Dentro da mesma sessao, sempre le suas proprias gravacoes (padrao) | Medio | Carrinho de compras, perfil do usuario | | Consistent Prefix | Garante a ordem mas nao a atualidade | Rapido | Feeds sociais, comentarios | | Eventual | Eventualmente convergira, sem garantia imediata | Mais rapido | Contadores de curtidas, contadores de visualizacoes |
Os topicos mais frequentemente testados sao que Session e o padrao e as caracteristicas de cada nivel.
!Os 5 níveis de consistência do Cosmos DB
Feed de Alteracoes: Processamento de Eventos em Tempo Real
O Feed de Alteracoes e um recurso que transmite em tempo real as mudancas que ocorrem em um container do Cosmos DB. Pense no CCTV de uma loja de conveniencia. O momento em que alguem pega um produto ou faz o checkout e registrado em tempo real, e outros sistemas (gestao de estoque, seguranca) podem processar isso imediatamente.
Caracteristicas principais do feed de alteracoes que voce deve lembrar.
Operacoes suportadas: Detecta apenas insercoes (INSERT) e atualizacoes (UPDATE) Operacoes nao suportadas: Exclusoes (DELETE) nao sao detectadas por padrao (use TTL) Metodos de processamento: Gatilho do Azure Functions, biblioteca Change Feed Processor Casos de uso: Notificacoes em tempo real, fornecimento de eventos, invalidacao de cache, pipelines de analise
Integracao com Azure Functions
Usando um gatilho do Cosmos DB, uma funcao e executada automaticamente sempre que um novo item e adicionado ou um item existente e alterado em um container. Por exemplo, voce pode configurar um fluxo de trabalho que decremente automaticamente o estoque no momento em que um pedido chega.
Programacao do Lado do Servidor: Logica Executando Dentro do Banco de Dados
O Cosmos DB suporta tres mecanismos para executar codigo diretamente dentro do servidor do banco de dados. Como uma linha de montagem de fabrica, processar dados onde eles vivem elimina a necessidade de envia-los pela rede.
Procedimento Armazenado
Agrupa multiplas operacoes em uma unica transacao. Usando transferencia bancaria como exemplo, debitar a conta A e creditar a conta B devem ter sucesso juntos ou falhar juntos. Os procedimentos armazenados garantem esse comportamento atomico.
Escritos em JavaScript Garantia de transacao aplica-se apenas dentro da mesma chave de particao Reversao completa em caso de falha
Gatilho (Trigger)
Codigo que e executado automaticamente antes ou depois da criacao, modificacao ou exclusao de itens.
Pre-gatilho: Executa antes que um item seja salvo (validacao, normalizacao de dados) Pos-gatilho: Executa depois que um item e salvo (registro, envio de notificacoes)
UDF (Funcao Definida pelo Usuario)
Uma funcao personalizada que voce pode chamar dentro de consultas SQL. Por exemplo, voce pode escrever uma logica de calculo de imposto como UDF e chama-la diretamente das consultas. Nao suporta transacoes e e somente leitura.
| Tipo | Transacao | Momento de Execucao | Proposito | |------|-----------|---------------------|----------| | Procedimento Armazenado | Suportada | Chamada explicita | Operacao atomica multipla | | Pre-gatilho | Nao suportada | Antes da operacao de gravacao | Validacao, normalizacao | | Pos-gatilho | Nao suportada | Apos a operacao de gravacao | Registro, notificacoes | | UDF | Nao suportada | Chamada dentro da consulta | Logica de calculo personalizada |
Pontos-chave do exame
"CosmosClient -> Database -> Container -> Item" -- Hierarquia do SDK (memorize a ordem)
"Usar data ou booleano como chave de particao" -- Maus exemplos (causa particao quente)
"Alta cardinalidade + distribuicao uniforme" -- Condicoes para boa chave de particao
"Nivel de consistencia padrao" -- Session
"Sempre garante os dados mais recentes, mais lento" -- Strong
"Eventualmente consistente, mais rapido" -- Eventual
"O que o feed de alteracoes detecta" -- Apenas insercoes e atualizacoes (exclusoes nao suportadas por padrao)
"Operacao atomica multipla, garantia de transacao" -- Procedimento armazenado
"Validacao antes da gravacao" -- Pre-gatilho
"Calculo personalizado dentro de consultas" -- UDF (sem suporte a transacoes)