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.

A técnica tradicional <strong>de</strong> armazenar o array em função <strong>de</strong> uma coluna ou <strong>de</strong> uma linha po<strong>de</strong> não ser<br />

eficiente em muitas situações. Consi<strong>de</strong>re-se uma representação <strong>de</strong> um array bidimensional com as<br />

dimensões Loja e Data, em que os dados relativos a Loja estão nas linhas e os valores relativos a Data<br />

nas colunas. Ace<strong>de</strong>r ao array em or<strong>de</strong>m a Lojas é eficiente, na medida em que cada página em disco<br />

contém várias Lojas. Porém, ace<strong>de</strong>r ao array em or<strong>de</strong>m a Data é ineficiente, especialmente se a<br />

dimensão Loja for gran<strong>de</strong>; nesse caso, cada página em disco só vai conter os dados relativos a uma<br />

Data, sendo necessário carregar outra página para ace<strong>de</strong>r a dados para a Data seguinte. Esta<br />

organização cria uma assimetria entre as dimensões, favorecendo uma em <strong>de</strong>trimento <strong>de</strong> outras<br />

[Zhao1997]. O recurso à estratégia <strong>de</strong> chunking faz com que o tratamento seja equitativo para todas as<br />

dimensões. Enten<strong>de</strong>-se por chunking uma forma <strong>de</strong> dividir arrays n-dimensionais em vários arrays n-<br />

dimensionais mais pequenos (chunks), que são armazenados no disco como objectos distintos<br />

[Zhao1997].<br />

Porém, especialmente no que se refere a dados reais, é frequente que muitas das células do chunk<br />

estejam vazias, o que significa que não existem dados para essa combinação <strong>de</strong> coor<strong>de</strong>nadas. Um<br />

chunk é consi<strong>de</strong>rado <strong>de</strong>nso quando mais <strong>de</strong> 40% das células contêm um valor válido [Zhao1997].<br />

Quando esta situação não se verifica, diz-se que o chunk é esparso e é necessário aplicar-lhe uma<br />

técnica <strong>de</strong> compressão <strong>de</strong> tal forma que cada célula fica associada a um valor inteiro que indica o seu<br />

afastamento (offset) em relação ao início do chunk, evitando assim o armazenamento <strong>de</strong> células vazias.<br />

Desta forma, cada entrada válida passa a ser representada por um par (afastamento, valor).O recurso ao<br />

chunking assegura a eficiência a nível <strong>de</strong> carregamento e armazenamento dos valores das células do<br />

cubo, enquanto a eficiência a nível <strong>de</strong> computação dos agregados é assegurada pelo uso da or<strong>de</strong>m<br />

correcta no seu cálculo. Para isso, o algoritmo apresenta os conceitos <strong>de</strong> or<strong>de</strong>namento óptimo das<br />

dimensões (optimal dimension or<strong>de</strong>r) e árvore <strong>de</strong> cobertura mínima <strong>de</strong> memória (minimum memory<br />

spanning tree).<br />

Apesar <strong>de</strong> ser um algoritmo característico <strong>de</strong> aplicações do tipo MOLAP, po<strong>de</strong> ser usado por sistemas do<br />

tipo ROLAP, bastando para isso percorrer a tabela que contém os dados, carregá-la para um array,<br />

computar o resultado sobre esse array e transferir os resultados obtidos para as tabelas a<strong>de</strong>quadas.<br />

Esta adaptação justifica-se pelo elevado <strong>de</strong>sempenho que este algoritmo apresenta e pela boa gestão<br />

<strong>de</strong> memória que efectua, sendo ainda mais eficiente que os algoritmos <strong>de</strong>senhados para sistemas<br />

ROLAP.<br />

2.4.3.1 Computação <strong>de</strong> agregados<br />

Para compreen<strong>de</strong>r a mecânica do algoritmo, comecemos por computar um agregado a partir <strong>de</strong> um array<br />

simples sem recorrer a chunking, assumindo que se dispõe <strong>de</strong> um array tridimensional com dimensões<br />

A, B e C. Computar o agregado AB equivale a projectar C sobre o plano AB, o que logicamente<br />

correspon<strong>de</strong> a percorrer um plano através da dimensão C e realizar a agregação até que todo o array<br />

30

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

Saved successfully!

Ooh no, something went wrong!