Neste mês de Outubro, ainda com o calor à porta, a equipa da Revista PROGRAMAR não se importa de suar para lhe trazer uma nova edição.
Assim nesta edição trazemos até si, como artigo de capa, um artigo sobre NHibernate com técnicas para software melhor e mais rápido, com a colaboração da comunidade NetPonto.
No artigo da edição anterior abordamos os temas de configuração de NHibernate, diferentes formas de mapear as entidades e diferentes formas de obter os dados da base de dados no contexto do seguinte domínio:
public class Edicao { public virtual DateTime DataEdicao {get; set; } public virtual Artigo TemaDeCapa { get; set; } public virtual IList<Artigo> Artigos {get;set;} } public class Artigo { public virtual int Id { get; set; } public virtual string Titulo { get; set; } public virtual ISet<Autor> Autores {get;set; } } public class Autor { public virtual int Id { get; set; } public virtual string Nome { get; set; } public virtual string Email { get; set; } public virtual ISet<Artigo> Artigos {get;set; } }
Neste artigo vamos ver como podemos aproveitar algumas das funcionalidades mais avançadas do NHibernate para tornar as nossas aplicações mais eficientes, reduzindo o número de pedidos à base de dados assim como a quantidade de dados que são transmitidos. Em certos momentos iremos usar a ferramenta NHProf para observar a comunicação entre a nossa aplicação e a base de dados.
Performance
Uma das falácias de computação distribuída é de que latência é zero. Na realidade, qualquer chamada a um sistema remoto é ordens de magnitude mais lenta do que a mesma chamada a um sistema local e dentro do mesmo processo. Outra falácia é de que a largura de banda é infinita. Como tal é boa prática reduzir o número de chamadas remotas ao servidor de dados e o tamanho dos dados a receber e enviar se queremos ter aplicações com boa performance mesmo quando em carga.
Como reduzir o número de chamadas
Um dos casos típicos onde fazemos mais chamadas à base de dados do que o necessário é quando mostramos uma listagem de itens que necessita de dados de mais do que uma tabela:
foreach (var artigo in session.QueryOver<Artigo>().List()) { var autores = artigo.Autores.Select(a => a.Nome); Console.Out.WriteLine( “Artigo {0} com autores {1}”, artigo.Titulo, string.Join(“, “, autores.ToArray())); }
Neste caso, estamos a mostrar o título de um artigo em conjunto com os autores. Se olharmos para o SQL gerado vemos que por cada artigo vamos à base de dados buscar os autores.
Este comportamento é resultante das capacidades de lazy-loading da biblioteca em conjunto com as configurações por omissão que carregam os objectos de cada relação apenas quando esta é acedida.
Tal comportamento implica que vão ser efectuados no mínimo tantos queries quanto artigos mostrarmos. Qualquer latência no acesso ao servidor de sql aumenta significativamente o tempo de resposta da nossa aplicação, quando na realidade seria possível minimizar as chamadas à base de dados e obter todos os dados de uma só vez.
Nesta 31ª edição, além do artigo completo sobre NHibernate – Técnicas para software melhor e mais rápido, pode ainda encontrar os seguintes artigos:
- Geração de Números Aleatórios – Parte 1–> O primeiro de 4 artigos do mesmo autor da excelente série «Programação em Lua», desta vez sobre geração de números aleatórios.
- Programar para Windows Azure –> Conheça alguns detalhes bem como alguns cuidados que deveremos ter em conta quando desenvolvemos para esta plataforma.
- Programação Orientada a Objectos em Java 6 –> Saiba algumas das melhores práticas e métodos de programação neste paradigma em Java 6.
- DataBinding em Silverlight 4 –> Conheça o conceito de Databinding na plataforma Silverlight.
- VISUAL (NOT) BASIC – Primeiros Passos com GDI+ –> Saiba mais sobre a API responsável por tudo o que nos «chega aos olhos» no mundo Windows.
- CORE DUMP – Martelo <=> Inépcia –> Neste artigo de opinião, conheça segundo o autor, a origem das falhas nas bases de muitos profissionais de TI.
E ainda em colaboração com a comunidade SharePointPT:
- Padrão alternativo de Sharepoint –> Neste artigo da comunidade SharePointPT, saiba como desconstruir as abordagens mais tradicionais, através de uma solução pouco comum através de uma arquitectura que optimiza os módulos de maior interesse para o cenário apresentado.
Nesta edição a Programar continuará também a premiar os autores dos três melhores artigos, dado o sucesso na edição anterior. E os leitores devem dar a sua opinião aqui.