Pplware

Revista PROGRAMAR – 31ª Edição Outubro 2011

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:

E ainda em colaboração com a comunidade SharePointPT:

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.


Edição 31 da Programar

Exit mobile version