Mais Patterns para o Azure


Se o Azure não nos dá um coordenador de transações e a Tabela do Azure só suporta isolamento do tipo snapshot dentro de uma mesma partição, não existe como garantir consistência entre tabelas, certo? Não.

É possível assegurar consistência usando algoritmos similares ao que o banco de dados faz de graça para nós. O Banco realiza isto usando o famoso arquivo de Log, que é usado para o caso de desfazimento (ou retry) de uma operação. No caso do Azure, teremos que simular este processamento.

O artigo Tabelas do Windows Azure mostra um exemplo de tratamento na sessão Consistência entre Tabelas. Não é o melhor dos exemplos, mas é um exemplo factível: para deletar uma associação pai filho, colocamos a ordem de deleção numa fila. O processo que lê a fila deve então marcar a entidade pai para não ser mais lida e, em seguida, trata de matar as entidades filhas. Por fim, deleta de vez a entidade pai e remove o pedido da fila. Se houver uma falha na máquina em que este processo está rodando, a mensagem volta a ficar visível, e quando o processo de deleção voltar ao ar ele continuará a deleção de onde parou. Como vocês podem ver, aqui a fila faz o papel do arquivo de log no Banco de Dados.

(quem quiser saber como funciona internamente um banco de dados, compre e leia o livro Transaction Processing: Concepts and Techniques – o livro é caro e longo mas, em minha opinião, é um dos melhores livros no assunto. IMPORTANTE: é um livro para quem quer saber como FAZER um Banco de Dados)

Vale a pena uma leitura com calma deste artigo e do artigo sobre blobs também. Para quem preferir as versões doc em inglês, você pode encontrá-los aqui e aqui.

Outra dica: a Microsoft Research está com um excelente site sobre melhores práticas com o Azure, mostrando inclusive gráficos com tempos de acesso em estruturas de dados e outras medições. No exemplo abaixo você vê alguns dos diagramas sobre leitura de Tabelas Azure contidos neste site.

image

Um must para quem quer desenvolver aplicações para Azure.

Abraços

Skip to main content