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
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