A Microsoft lançou ontem um novo artigo, uma espécie de guia sobre como desenvolver utilizando o conceito de database sharding com o SQL Azure , escrito por Michael Heydt e Michael Tomassy. Como o SQL Azure atualmente tem um limite de 50gb, a técnica de particionamento horizontal permite alcançar a expansão da aplicação. A intenção deste artigo é de introduzir como criar o design de uma aplicação que requer elasticidade e flexibilidade de recursos.
O artigo contempla:
- Alguns conceitos básicos de particionamento horizontal/sharding;
- Uma visão geral de padrões e melhores práticas;
- Alguns desafios;
- Design de alto nível de uma biblioteca de sharding baseada em ADO.NET;
- Uma introdução ao SQL Azure Federations;
Enquanto o particionamento horizontal divide uma ou mais tabelas por linha, normalmente isto se dá dentro da mesma instância. A vantagem alcançada é a redução do tamanho do índice, que em teoria provê uma recuperação mais rápida aos dados. Em contraste, o conceito de sharding aborda o mesmo problema dividindo a tabela entre múltiplas instâncias de banco de dados, normalmente em um hardware separado, necessitando alguma forma de notificação e replicação para prover sincronização entre as tabelas.
No padrão Microsoft, uma chave é usada para mapear dados em shards específicos que é a chave primária de uma das entidades. As entidades relacionadas são agrupadas em um conjunto em cima da chave, e toda a unidade é referenciada como uma unidade atômica e todos os registros de uma unidade atômica são armazenados na mesma shard.
A Microsoft irá lançar o SQL Azure Federations que vai suportar sharding em 2011. Atualmente toda a capacidade shard deve ser implementada em nível de aplicação utilizando ADO.NET. Isto é um contraste para as alternativas "NoSQL" atuais como MongoDB, CouchDB, SimpleDB que já suportam sharding.