15.07.2013 Views

ISCTE – ESCOLA DE GESTÃO - Universidade Técnica de Lisboa

ISCTE – ESCOLA DE GESTÃO - Universidade Técnica de Lisboa

ISCTE – ESCOLA DE GESTÃO - Universidade Técnica de Lisboa

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Para isso, foram estudados dois métodos básicos para computação <strong>de</strong> um único agregado: um <strong>de</strong>les é<br />

baseado em or<strong>de</strong>namento (PipeSort) e outro é baseado em dispersão (PipeHash) [Agrawal1996]. Estes<br />

métodos po<strong>de</strong>m ser aplicados à computação <strong>de</strong> múltiplos agregados recorrendo às seguintes<br />

optimizações:<br />

Pais mais pequenos (smallest-parents) <strong>–</strong> consiste em computar um agregado a partir <strong>de</strong> outros<br />

<strong>de</strong> menor dimensão já computados.<br />

Resultados em cache (cache-results) <strong>–</strong> consiste em manter em memória os resultados <strong>de</strong> um<br />

agregado a partir do qual seja possível calcular outros, por forma a evitar as operações <strong>de</strong><br />

entrada e saída.<br />

Amortização <strong>de</strong> varrimentos (amortize-scans) <strong>–</strong> trata-se <strong>de</strong> amortizar o número <strong>de</strong> operações <strong>de</strong><br />

leitura do disco ao computar o maior número <strong>de</strong> agregados que for possível manter em memória.<br />

Partilha da or<strong>de</strong>nação (share-sorts) <strong>–</strong> apenas se aplica a algoritmos baseados em or<strong>de</strong>nação e<br />

aposta na partilha dos custos associados à or<strong>de</strong>nação por vários agregados.<br />

Partilha <strong>de</strong> partições (share-partitions) <strong>–</strong> apenas se aplica a algoritmos que utilizem dispersão e<br />

refere-se à partição da tabela <strong>de</strong> dispersão, caso seja <strong>de</strong>masiado gran<strong>de</strong> para os recursos <strong>de</strong><br />

memória disponíveis, e a efectuar a agregação apenas para cada uma das partições.<br />

Tanto PipeSort como PipeHash computam vários agregados segundo uma lógica sequencial, sendo<br />

cada fio <strong>de</strong> computação constituído por agregados que po<strong>de</strong>m ser computados pelo mesmo varrimento<br />

dos dados <strong>de</strong> entrada. De forma a estabelecer quais os agregados que po<strong>de</strong>m ser computados a partir<br />

<strong>de</strong> outros e qual a sequência pela qual os atributos <strong>de</strong>vem ser tratados, foi utilizado o conceito <strong>de</strong> malha<br />

<strong>de</strong> procura apresentado em [Harinarayan1996].<br />

Basicamente, uma malha <strong>de</strong> procura é um grafo em que cada nó representa um agregado do cubo.<br />

Quando um nó i está ligado a um nó j, isso significa que o agregado j po<strong>de</strong> ser gerado a partir do<br />

agregado i e que j tem exactamente um atributo a menos que i [Agrawal1996]. A figura 7 apresenta um<br />

exemplo <strong>de</strong> uma malha <strong>de</strong> procura para quatro atributos (A, B, C e D), em que cada nível k reúne os<br />

agregados que contêm exactamente k atributos.<br />

Figura 7 - Exemplo <strong>de</strong> uma malha <strong>de</strong> procura [Agrawal1996]<br />

24

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!