segunda-feira, 30 de novembro de 2009

Pesquisa em listas Sharepoint 2007

Ao longo do tempo que fui explorando o desenvolvimento de aplicações em Sharepoint 2007, conheci diversas formas de efectuar pesquisas sobre listas. Neste post faço a comparação entre quatro métodos de pesquisar informação em listas, com o objectivo de podermos tomar decisões informadas no desenvolvimento de soluções em Sharepoint 2007.

Para a elaboração deste post desenvolvi uma pequena aplicação que permite efectuar pedidos a páginas Web e que mede o tempo decorrido entre a execução do pedido e a recepção da resposta. Esta aplicação executa pedidos em paralelo durante um determinado período de tempo.

Para cada método de pesquisa foram feitos dois testes que descrevo de seguida, ambos num conjunto de 350 pedidos distribuídos por 3 minutos:

  • Uma lista de páginas preenchida com 100 itens;
  • Uma lista de páginas preenchida com 400 itens.

Note-se que neste post apenas me foco na pesquisa numa única lista. Numa segunda parte deste post irei comparar as pesquisas com os mesmos métodos em n listas de páginas pertencentes a diferentes sites de publicação.

De seguida apresento os quatro métodos de pesquisa utilizados nos testes, não demonstrarei a implementação destes visto que este assunto se encontra amplamente difundido na blogosfera.

  • Pesquisa com Foreach: pesquisa utilizando um ciclo Foreach percorrendo o object model do Sharepoint 2007.
  • Pesquisa com SPQuery: pesquisa utilizando o objecto SPQuery que permite executar a pesquisa numa lista.
  • Pesquisa com SPSiteDataQuery: pesquisa utilizando o objecto SPSiteDataQuery que permite pesquisar sobre várias listas em simultâneo.
  • Pesquisa com CrossListQueryInfo: pesquisa utilizando o objecto CrossListQueryInfo que permite executar pesquisas em várias listas em simultâneo e tirando partido de um mecanismo de cache de dados denominado de CrossListQueryCache. Este objecto permite ainda fazer aundience target dos resultados das pesquisas.

    Deixo ainda um post que explica o conceito de audience target: SharePoint Audience Targeting vs. Item Level Security

Foreach


Clique para aumentar

O gráfico apresenta os resultados dos testes referentes ao método de Foreach. Da análise destaca-se um considerável aumento do tempo de pesquisa com o aumento de itens na lista. Destaca-se ainda que em ambos os testes existe bastante oscilação de valores entre as diferentes pesquisas o que nos indica que é um método bastante irregular. Parece ainda que com o aumentar do número de itens esta irregularidade é mais acentuada.

SPQuery

Clique para aumentar

Este gráfico apresenta os resultados referentes ao método de pesquisa com o objecto SPQuery. As grandes diferenças que se apresentam em relação ao método anterior são: maior independência quanto ao número de itens da lista e um decréscimo do tempo médio das pesquisas.

SPSiteDataQuery

Clique para aumentar

O gráfico anterior mostra os resultados dos testes efectuados com o objecto SPSiteDataQuery. Na generalidade o resultado é semelhante ao método anterior, apesar de se notar que os tempos de pesquisa são mais constantes.

CrossListQueryInfo

Clique para aumentar

Por último apresento o resultado dos testes com o objecto CrossListQueryInfo. Este teste revela resultados bastante semelhantes aos resultados dos dois testes anteriores.

Comparação

Clique para aumentar

Em cima podemos observar de uma forma mais clara a média dos resultados dos diferentes métodos de pesquisa sob as mesmas condições. Em ambos se nota que o método de Foreach tende a ser o mais demorado e por isso deve ser evitado. Nos restantes casos a diferença de resultados é pouca, o que nos deixa com alguma margem de manobra na escolha do método de pesquisa a utilizar.

Na minha opinião devem-se utilizar os métodos nas circunstâncias para as quais foram desenvolvidos. Assim para uma pesquisa em apenas uma lista e sem contemplar audience targeting utilizaria o método da pesquisa com o objecto SPQuery.

Por último gostaria ainda de observar que também seria interessante de testar a memória e o tempo de processador que utiliza cada um dos métodos. Assunto que, com muita pena minha, não foi contemplado nos testes efectuados.

2 comentários:

Ana Gomes Henriques disse...

Muito bom! Valeu a pena a espera! ;)

João Vicente disse...

Muito bom artigo Rodolfo!! Parabéns ...