Universidade Federal de São Carlos Centro de Ciências Exatas e de Tecnologia Departamento de Computação Artigo: Implementando o cubo de dados eficientemente Venky Harinarayan Anand Rajaraman Jeffrey D. U1lman Walter Coelho Pereira de Magalhães Junior PPGCC/DC Agosto / 2009 Organização desta apresentação Introdução Framework lattice Modelo de custo de consultas utilizado neste artigo Otimizando o cubo de dados lattice Hipercubo lattice Conclusões e trabalhos futuros 2/36 Introdução Breve revisão de conceitos básicos 1) Modelos multidimensionais e conceitos associados Observam as relações inerentes aos dados para gerar matrizes multidimensionais: Bidimensionais (planilhas) Tridimensionais (cubo de dados) Acima de três dimensões (hipercubo) Cada célula no cubo de dados contém dados de cada dimensão e consiste em uma medida (agregação) de interesse. Os valores de muitas destas células são dependentes dos valores de outras células. Os dados podem ser consultados diretamente em qualquer combinação de dimensões, evitando consultas complexas no banco de dados O desempenho de consultas em matrizes multidimensionais pode ser muito superior comparativamente ao modelo relacional Em um cubo de dados a mudança de uma hierarquia dimensional para outra é realizada por meio de uma técnica de rotação (pivotamento)... Mostrar exemplo 3/36 Introdução Modelos multidimensionais proporcionam visões hierárquicas conhecidas como apresentações: “roll-up”: agregação, sumarização, maior granularidade, move-se para cima na hierarquia, agrupa em unidades maiores ao longo de uma hierarquia... Exemplo: sumarização de dados mensais por trimestre ou por ano “drill-down”: desagregação, granularidade mais fina, move-se para baixo na hierarquia.. Exemplo: desagrupar vendas nacionais em regionais ou por unidade produtiva Um modelo de armazenamento multidimensional envolve dois tipos de tabelas: de dimensão, consistindo de uma tupla de atributos da dimensão de fatos, uma tupla para cada fato identificado por ponteiros para as tabelas de dimensão Esquemas multidimensionais comuns são: Estrela, única tabela de fatos e única tabela para cada dimensão Snowflake, possui tabelas de dimensão normalizadas “Constelação de fatos, conjunto de tabelas de fatos compartilhando tabelas de dimensão...” 4/36 Introdução Modelagem multidimensional: os sistemas de banco de dados tradicionais utilizam a normalização no formato de dados visando garantir consistência aos dados e uma minimização do espaço de armazenamento necessário. Entretanto, algumas transações e consultas em bases de dados normalizadas podem tornar-se lentas devido às operações de junção entre tabelas. Um Data Warehouse utiliza dados em formato de-normalizados. Isto aumenta o desempenho das consultas e, adicionalmente, o processo de consulta torna-se mais intuitivo para os usuários comuns. 2) Sistemas de apoio à decisão (DSS) e Banco de dados para apoio à decisão – Data Warehouse: Aplicações de suporte à decisão envolvem consultas complexas em banco de dados muito grandes e fazem forte uso de agregação de dados - Uma vez que o tempo de resposta deve ser pequeno, a otimização de consultas é crítica... Uma técnica comum e poderosa para otimização de consultas é “materializar algumas ou todas estas células (visões)” ao invés de computá-las, cada vez, a partir de dados brutos As visões materializadas consistem na principal opção para aprimorar o desempenho em um DW, entretanto: otimizadores e técnicas de avaliação de consultas podem ser aprimoradas para lidar melhor com agregações podemos usar diferentes estratégias de indexação, tais como índices de bitmap e índices de junção outras opções Uma visão materializada é uma consulta cujo resultado já foi computado e está armazenado na base de dados... As consultas que puderem utilizar as visões já armazenadas, podem ser executadas de forma muito mais rápida. Conforme a complexidade e o volumes de dados, podem ser reduzidas de horas ou dias para segundos ou minutos. 5/36 Introdução Outra questão importante é que ao materializarmos uma consulta (mesmo que relativamente infrequente) podemos ser capazes de responder a outras rapidamente... 3) Este artigo: Investiga a questão de qual célula (visão) materializar, quando for muito caro materializar todas as visões. Um framework lattice (entrelaçado) é usado para expressar as dependências entre as visões e juntamente com algorítimos, permitem escolher um bom conjunto de consultas a serem materializadas e indicar a ordem em que devem ser materializadas. TPC-D: Banco de dados de apoio à decisão - Data warehouse Existem três dimensões nas quais estamos interessados: peça, fornecedor e consumidor. A medida de interesse é o total de vendas. Em cada célula (p,s,c) neste cubo de dados 3-D armazenamos as vendas de peças “p” que foram compradas do fornecedor “s” e vendidas ao consumidor “c”. “Embora uma dimensão possa ter muitos atributos, usa-se os termos dimensões e atributos de forma alternada nesta seção” 6/36 Introdução Suponha que os usuários estão interessados nas vendas consolidadas... Qual é o total de vendas de uma peça “p” para um consumidor “c” Sugere-se acrescentar um valor adicional “ALL” para o domínio de cada dimensão: Qual o total de vendas da peça “p” para o consumidor “c” para “todos” os fornecedores A consulta será respondida observando o valor da célula (p, ALL, c), que será computada como a soma dos valores das células de (p, s1, c),...,(p, sn, c), onde “n” representa o número de fornecedores Quanto mais células nós materializamos, melhor será o desempenho das consultas. Contudo, para grandes cubos, nós podemos ser capazes de materializar somente uma pequena fração de células devido ao espaço e outras restrições. Por isto é muito importante escolhermos as células corretas para materializar... Qualquer célula que tenha o valor “ALL” como um dos componentes em seu endereço é uma “célula dependente”, cujo valor é computável a partir de outras células no cubo de dados. Se uma célula não possui “ALL” como componente, seu valor não pode ser computado por outras células e nós precisaremos consultar os dados brutos para computar seu valor. O número de células contendo “ALL” como um de seus componentes é normalmente uma grande parte do total de células no cubo de dados... No TPC-D 70% das células do cubo de dados são dependentes... 7/36 Introdução Alternativas de implementação do cubo de dados: Materialização completa do cubo de dados Melhor tempo de reposta Alternativa não factível para grandes cubos de dados - espaço de armazenamento Espaço consumido causa impacto na indexação Nenhuma materialização Problemas com tempo de resposta: “precisamos ir até os dados brutos e computar cada célula...” Nenhum espaço extra é solicitado, além do exigido para os dados brutos Materializar somente parte do cubo de dados Aproveitar o conceito de células dependentes no cubo de dados, sabendo que os valores de muitas células são computáveis a partir de outras “Esta dependência é similar a uma planilha onde o valor das células pode ser calculado em função de outras...” A questão de onde armazenar o cubo de dados materializado, facilita o processamento de dados multidimensionais - OLAP Sistema relacional: escalável, suporta DW muito grandes, técnicas para melhorar desempenho Banco de dados multidimensional proprietário (MDDB)+API’s para OLAP: melhor desempenho “Implementação comum: dados brutos em sistema relacional e o cubo em MDDB...” 8/36 Introdução Este artigo assume que: O cubo de dados está implementado em tabelas resumo em um sistema relacional Os conjuntos de células do cubo de dados estão associados a diferentes tabelas e agrupados segundo a posição do operador “ALL” em seus endereços Assim, todas as células que batem com o endereço ( _, ALL, _) estão colocadas no mesmo conjunto... Cada um deste conjuntos de células correspondem a diferentes consultas SQL... A saída da consulta “SELECT Part, Customer, SUM(SP) AS Sales FROM R GROUP BY Part, Customer” é o conjunto de células no formato (_, ALL, _) Observações: Em geral, atributos com valores “ALL” no conjunto de células não aparecem na cláusula GROUP BY Os atributos de agrupamento diferenciam as consultas SQL que formam os conjuntos de dados Decidir qual conjunto de células materializar é equivalente a decidir qual consulta (visão) materializar O custo de resposta a uma consulta é proporcional ao número de linhas examinadas As visões não possuem índices... 9/36 Introdução Exemplo: O banco de dados TPC-D possui três dimensões (atributos): peça, fornecedor, consumidor A medida de interesse são as vendas Oferece oito possibilidades de agrupamento dos atributos ... formam oito consultas (visões) organizados em forma entrelaçada (lattice) “Repare que basta mencionar os atributos na cláusula GROUP BY...” Visões candidatas a materialização: 1. 2. 3. 4. 5. 6. 7. 8. part, supplier, customer (6 Milhões de linhas) part, customer (6M) part, supplier (0.8M) supplier, customer (6M) part (0.2 M) supplier (0. 01 M) customer (0.1 M) none (1) – nenhum atributo na cláusula GROUP-BY 10/36 Introdução Trabalhando com as visões: exemplo de possíveis consultas solicitadas pelos usuários... Total das vendas agrupadas por peça Temos uma visão materializada agrupada somente por (peça) - visão 5: Processamento: basta varrer a visão inteira e mostrar a resposta Custo de resposta da consulta: custo de processar 0,2 milhões de linhas (tamanho da view) Temos uma visão materializada agrupada por (peça,consumidor) – visão 2: Processamento: para cada peça precisamos somar suas vendas por todos os consumidores Custo de resposta da consulta: processar 6 milhões de linhas Vendas de uma única peça A análise acima se aplica, exceto pelo fato de que no processamento da visão 5 poderíamos varrer a visão inteira ou metade na média Questões interessantes: Quantas visões devemos materializar para obtermos uma performance razoável ? Quais visões devemos materializar para minimizar o custo médio de consulta ? (Existe espaço) O framework lattice e os algorítimos, vistos mais a frente, ajudam a responder estas questões e fornecem resultados próximos ao ótimo... 11/36 Introdução Buscando a eficiência no processo de materialização: Na materialização de todo o cubo de dados do TPC-D as visões materializadas ocupariam mais de 19 milhões de linhas... Procurando ser mais eficiente, podemos escolher adequadamente quais partes do cubo de dados materializar, aproveitando a “dependência das células (consultas, visões) e colher benefícios dramáticos: Necessitamos materializar a visão agrupada (peça,fornecedor,consumidor) – visão 1 – “evitando consultar os dados brutos, uma vez que ela não pode ser construída a partir de outra” Não existe nenhuma vantagem em materializar a visão (peça,consumidor) – visão 2 “toda consulta direcionada à esta visão pode ser respondida por meio da visão 1, a qual também apresenta um custo de resposta na ordem de 6 milhões de linhas” Pela mesma razão, não existe vantagem em materializar a visão (fornecedor,consumidor) – visão 4 Conclusão: “... podemos obter quase o mesmo custo médio de consulta materializando um cubo de dados com apenas 7 milhões de linhas, representando um ganho de mais de 60% em termos de espaço consumido e no custo para criar o cubo de dados” 12/36 Framework Lattice Consiste em uma notação utilizada para descrever quando uma consulta ao cubo de dados pode ser respondida usando o resultado de outra... A notação de uma visão ou consulta apresenta seus atributos de agrupamento entre parênteses, por exemplo: (peça, fornecedor, consumidor) Q1 Q2 :: A consulta Q1 pode ser respondida usando os resultados da consulta Q2 Q1 é dependente de Q2 Exemplo: (peça,consumidor) (peça,fornecedor,consumidor) (peça,fornecedor) (peça,fornecedor,consumidor) Q1 Q2 :: A consulta Q1 não é comparável com a consulta Q2 Exemplo: (peça) (consumidor) Notação Lattice: (L, ) : L = conjunto de elementos (visões ou consultas) do lattice : = relação de dependência Para os elementos (visões) “a” e “b” do lattice dizemos que “b” é progenitora (mãe) de “a” se e somente se a b 13/36 Framework Lattice Hierarquias Na maioria das aplicações do mundo real as dimensões de um cubo de dados possuem vários atributos e estão organizadas em hierarquias destes atributos “...organizar a dimensão tempo na hierarquia dia, mês, ano” Possibilitam as operações abaixo: TOTAL DE VENDAS “roll-up” : Vendas por dia, vendas por mês, vendas por ano Dia Mês Ano “drill-down” : Vendas por ano, vendas por mês, vendas por dia Lembrando: Introduzem o conceito de “dependência de consultas” que devemos considerar quando formos materializar as consultas... Drill-down é o processo de visualização de dados progressivamente até um nível mais detalhado, roll-up é o oposto 14/36 Framework Lattice Com hierarquias a dependência lattice (L, ) é mais complexa que o hipercubo lattice... Usando a hierarquia com atributos da dimensão tempo Ano, Mês, Dia podemos agrupar as consultas em três possibilidades, conforme a granularidade, em (Ano), (Mês), (Dia) e assim temos que (Ano) (Mês) (Dia) “...se temos o total de vendas agrupado por mês, podemos usar os resultados para computar o total de vendas por ano” Em uma hierarquia Ano, Mês, Semana, Dia observe que (semana) (mês) (semana) (ano). Portanto, se agruparmos por semana não poderemos, a partir deste agrupamento, determinar o agrupamento por mês ou ano, e vice-versa, uma vez que nem mês nem ano podem ser divididos de uma maneira uniforme em semanas Composição lattice para múltiplas dimensões hierárquicas Estamos confrontados com dois tipos de “dependência de consultas”: Dependência de consulta devido a interação entre diferentes dimensões Dependência de consulta em uma mesma dimensão devido a hierarquia de atributos 15/36 Framework Lattice Para cada dimensão podemos criar visões agrupando por um membro da hierarquia ou nenhum... então cada visão pode ser representada por uma n-tupla (a1, a2, ..., an) onde cada elemento é um ponto nesta hierarquia da n-ézima dimensão Este lattice é denominado “produto direto do lattice dimensional”: (a1, a2,...,an) (b1,b2,..,bn), se e somente se, ai bi, para todo i. Exemplo: • As dimensões “peça” e “consumidor” estão organizadas em hierarquias... • No lattice dimensional os atributos de cada dimensão podem ser agrupados, formando as consultas: • na dimensão “consumidor”: individualmente (i), por nação(n) ou nenhum (none) • na dimensão “peça”: tamanho (s), tipo (t) ou nenhum (none) , observando que (s) (t) “Quando o valor da dimensão é “none” não especificamos a dimensão na consulta: (s,none) => (s)” 16/36 Framework Lattice Framework lattice combinando duas dimensões hierárquicas Vantagens do framework lattice: 1) Trata-se de um framework limpo para raciocinarmos com hierarquias dimensionais, uma vez que o produto direto lattice nem sempre é um hipercubo quando as hierarquias não são simples 2) Podemos modelar melhor as consultas comuns solicitadas pelos usuários 3) A abordagem lattice nos ajuda a determinar em que ordem materializar as visões… Ao usarmos as visões que já tenham sido materializadas para materializar outras visões, podemos reduzir o acesso aos dados brutos e reduzir o tempo total de materialização Uma simples ordenação descendente no operador nos informa a ordem requerida para materialização 17/36 O modelo de custo Modelo de custo linear adotado “O tempo para responder a uma consulta é considerado igual ao espaço ocupado pela visão a partir da qual a consulta é respondida...” Em um lattice (L, ) de visões para responder a uma consulta Q escolhemos visão materializada QA progenitora de Q. Para responder Q necessitamos processar a tabela correspondente a QA... Este artigo adota o modelo de custo mais simples: O custo para responder Q é o “número de linhas” presentes na tabela QA usada para construir Q, ou seja, o custo de Q está em função do tamanho da tabela QA Existem outros fatores não considerados que influenciam no custo da consulta, por exemplo: cluster de visões materializadas sobre algum atributo índices Modelos de custo mais complicados são certamente possíveis, mas o modelo de custo adotado é mais simples e realista, habilitando-nos a projetar e analisar algoritmos poderosos... A análise dos algoritmos detalhados mais a frente, reflete a performance sobre outros modelos de custo, tanto quanto, sobre o modelo de custo adotado... 18/36 O modelo de custo Exame de um experimento do modelo de custo linear adotado Em uma validação experimental deste modelo de custo solicitamos o total de vendas para um único fornecedor usando visões de diferentes granulações... Encontramos um relacionamento quase linear entre o tamanho e o tempo de execução da consulta, expresso pela fórmula : T= M * S + C T = tempo de execução da consulta M = razão (taxa) entre o tempo da consulta e o tamanho da visão (T/S), após contabilizar o custo fixo S = tamanho da visão C = custo fixo (overhead para executar a consulta em uma visão de tamanho desprezível) Fonte Tamanho Tempo Taxa A partir da célula 1 2.07 - A partir da visão s 10.000 2.38 .000031 A partir da visão ps 0.8 M 20.77 .000023 A partir da visão psc 6M 226.26 .000037 Note que a taxa é quase sempre a mesma para diferentes visões.... 19/36 O modelo de custo Determinando os tamanhos das visões Os algorítmos usados neste artigo requerem o conhecimento do número de linhas presente em cada visão Existem muitas maneiras de estimar os tamanhos das visões sem materializar todas as visões... • Uma abordagem comumente usada é executar o algorítmo sobre um pequeno mas estatisticamente representativo subconjunto de dados brutos. Neste caso, nós podemos obter o tamanho das visões, na verdade, materializando as visões. Usamos este subconjunto de dados brutos para determinar quais visões nós queremos materializar. Podemos usar métodos de amostragem e análise para calcular o tamanho das diferentes visões se nós somente materializarmos o maior elemento no lattice (a visão agrupada pelo maior atributo em cada dimensão). Em uma visão, se sabemos que os atributos de agrupamento são estatisticamente independentes, podemos estimar o tamanho da visão, analiticamente, em relação ao tamanho da maior visão no lattice. De outra forma, nós podemos amostrar a maior visão ou dado bruto para estimar o tamanho de outras visões. O tamanho de uma visão é o número de valores distintos dos atributos que ela agrupa... Existem muitas técnicas de amostragem conhecidas que podemos usar para determinar o número de valores distintos dos atributos em uma relação 20/36 Otimizando o cubo de dados lattice Nosso mais importante objetivo é desenvolver técnicas para otimização de tempo e espaço quando implementamos um lattice de visões Iniciaremos com um simples problema de otimização: Minimizar o tempo médio necessário para avaliar o conjunto de consultas que são idênticas às visões Estamos restritos a materialização de um número fixo de visões não importando o espaço que ocupem Algorítmo ganancioso “...selecionamos uma sequência de visões sendo cada uma a melhor escolha dado o que aconteceu antes. Esta abordagem é sempre relativamente próxima à ótima, e em alguns casos produz a melhor seleção possível de visões a materializar...” Supondo: existe um cubo de dados lattice com um custo de espaço (número de linhas) associado a cada visão C(v) = custo da visão v o conjunto de visões que materializaremos deve sempre incluir a visão superior (topo), porque não existe qualquer outra visão que possa ser utilizada para responder a uma consulta correspondente a esta visão... existe um limite k para o número de visões, adicionalmente a visão superior que podemos selecionar após selecionar o conjunto S de visões, o benefício da visão v relativa a S , denotado por B(v,S), é definido por: 1) Para cada w v definir a quantidade Bw por: a) u é a visão de menor custo em S e w u b) se C(v) < C(u), então Bw = C(v) – C(u), senão Bw = 0 21/36 Otimizando o cubo de dados lattice 2) Ou seja, nós computamos o benefício da visão “v” considerando como ela pode aprimorar o custo de execução das visões “w” que podem ser respondidas a partir dela, incluindo também a si mesma Para cada visão “w” que “v” cobre, nós comparamos o custo de execução de “w” usando “v” X o custo de execução de “w” usando qualquer visão em S oferecida como a maneira mais barata de executar “w” Se “v” contribui para que o custo de “v” seja menor que da sua concorrente, então a diferença representa parte do benefício de selecionar “v” como uma visão materializada O benefício total B(v, S) é a soma dos benefícios de executar todas as visões “w” a partir de “v”, desde que o benefício seja positivo Definimos o algorítmo ganancioso para selecionar um conjunto de k visões para materializar S = {top view}; for i=l to k do begin select that view v not in S such that B(v, S) is maximized; S = S union {v}; end; resulting S is the greedy selection; 22/36 Otimizando o cubo de dados lattice Exemplo: O lattice ao lado possui oito visões (a ... h) com seus custos de espaço A visão superior (a), com custo 100, precisa ser escolhida Gostaríamos de escolher mais três visões para materializar Para executar o algorítmo ganancioso neste lattice precisamos fazer três escolhas sucessivas de visões para materializar... A coluna “Choice 1” informa os benefícios de escolha além de “a” No cálculo do benefício assumimos que cada visão é avaliada usando “a” e portanto terá um custo de 100 Se primeiramente pegarmos a visão “b” para materializar reduziremos seu custo por 50 e para cada visão abaixo dela (d,e,g,h) ... O benefício será de 50 x 5 = 250 Se pegarmos “e” primeiro, então ela e as visões (g,h) abaixo dela terão seus custos reduzidos em 70, ou seja, de 100 para 30. Assim o benefício será de 70 x 3 = 210 Então, elegemos a visão “b” neste primeiro round, como uma das visões a serem materializadas Precisamos recalcular os benefícios de cada visão “v” dado que a visão será criada ou a partir de “b” a um custo de 50 se “b” estiver acima de “v” , ou a partir de “a” a um custo de 100 se “b” não estiver acima de “v” 23/36 Otimizando o cubo de dados lattice Os benefícios agora são mostrados na coluna “Choice 2” O benefício da visão “c” é agora 50: 25 para si mesmo e f. Escolher “c” não melhora o custo de e, g ou h em 25 para estas visões Escolher f gera um benefício de 60 para si mesma, de 100 para 40. Para “h” ela gera um benefício de 10, de 50 para 40, uma vez que a escolha de “b” já melhorou o custo associado com “h” em 50 A vencedora é “f” com um benefício de 70 Nossa terceira escolha está resumida na coluna “Choise 3” A vencedora do terceiro round é “d” com um benefício de 60 para si mesma e para “g” A seleção gananciosa são as visões “b”, “f” e “d” que juntamente com “a” reduzem o custo total para executar todas as visões de 800 (caso somente “a” fosse materializada) para 420. Atualmente, este é o custo ótimo 24/36 Otimizando o cubo de dados lattice Exemplo: O lattice ilustrado abaixo é tão ruim quanto um lattice pode ser para o caso k = 2 “Um exemplo onde a ganância faz mal…” O algorítmo ganancioso inicia com somente a visão top “a”. Primeiramente pega “c” cujo benefício é 4141. “c” e as 40 visões abaixo dela são melhoradas de 200 para 99, quando usamos “c” no lugar de “a” para respondê-las Para nossa segunda escolha, podemos pegar ou “b” ou “d”. Ambos possuem o benefício de 2100. Em “b” observamos que ela melhora a si mesmo e os 20 nós na extremidade esquerda por 100 cada Assim, com k = 2 o algorítmo produz uma solução com um benefício de 6241 25/36 Otimizando o cubo de dados lattice Contudo, a escolha ótima é pegar “b” e “d”, uma vez que juntas estas duas visões melhoram em 100 a si mesmas e as outras 80 visões nas quatro cadeias Desta forma, a solução ótima apresenta um benefício superior de 8200 A razão greedy / ótima é 6241 / 8200 = ¾ “Em verdade, tornando o custo de “c” próximo a 100 e fazendo as quatro cadeias terem um número grande de visões, podemos encontrar exemplos para k = 2 com razão próxima a 3/4, mas não pior” Um experimento com o algorítmo ganancioso Executamos o algorítmo no lattice combinando 2 dimensões hierárquicas (mostrado anteriormente) usando o banco de dados TPC-D A ordem resultante das visões a partir da primeira (top – obrigatória) para a última, é vista ao lado As unidades Benefícios, Tempo e Espaço estão em número de linhas O tempo médio da consulta é o tempo total dividido pelo número de linhas das 12 visões O exemplo a seguir mostra porque é importante materializar algumas visões e porque materializar todas as visões não é boa escolha… 26/36 Otimizando o cubo de dados lattice Para as primeiras visões que selecionamos com mínima adição de espaço, o tempo de consulta é reduzido substancialmente. Contudo, após a quinta visão, não melhoramos o tempo total de consulta substancialmente, mesmo usando grandes quantidades de espaço É claro quando parar de pegar visões...Para as cinco primeiras obtemos quase o tempo total mínimo possível enquanto o espaço total usado é pouco maior que o espaço obrigatório usado apenas para a visão “top” Tempo total Espaço consumido Número de visões 27/36 Otimizando o cubo de dados lattice Um desempenho garantido para o algorítmo ganancioso O algorítmo ganancioso nunca executa “muito mal” qualquer que seja o lattice... possui ao menos 63% do benefício de um algorítmo ótimo Notação m = número de visões em um lattice suponha não existir nenhuma visão selecionada além da “top” (a qual é obrigatória), então o tempo T para responder cada consulta é exatamente o número de linhas da visão “top” V = {v1,v2,..,vk} conjunto de visões ordenadas escolhidas pelo algorítmo além da visão “top” Tv = tempo médio para responder a uma consulta T - Tv = benefício do conjunto de visões V: redução no tempo médio para responder a uma consulta “...minimizar o tempo médio para responder a uma consulta equivale a maximizar o benefício de um conjunto de visões...” v1,v2,...,vk = “k” visões selecionadas em ordem pelo algorítmo ganancioso ai = benefício alcançado pela seleção de vi pertencente ao conjunto V + top e onde i = 1,2,...,k W = {w1,w2,..,wk} conjunto ótimo de visões: fornecem o benefício total máximo bi = benefício alcançado pela seleção de wi pertencente ao conjunto W (ordenado) + top e onde i = 1,2,..,k e 28/36 Otimizando o cubo de dados lattice Bgreedy = T - Tv = A / m benefício do conjunto V escolhido pelo algorítmo Bopt = T - Tw = B / m benefício do conjunto W ótimo escolhido para k = 2 obtivemos A / B ≥ 3 / 4 .... O algorítmo ganancioso é ao menos 3/4 do ótimo mostramos um lattice que aproximou em 3/4 a razão entre o benefício dos algorítimos greedy e ótimo Em outro artigo mostramos que podemos construir um lattice tal que k como k -> , aproxima de 1/e, assim 1 – 1/e = (e – 1) / e = 0.63 ou seja, para qualquer lattice o algorítmo ganancioso não dará benefício inferior a 63% do algorítmo ótimo. O exemplo “onde a ganância faz mal” mostra que esta razão não pode ser melhorada Os resultados estão sumarizados no seguinte teorema: “Para qualquer lattice onde Bgreedy seja o benefício de k visões escolhidas pelo algorítmo ganancioso Bopt seja o benefício de um conjunto ótimo de k visões então e existem lattices onde é próximo a “ 29/36 Otimizando o cubo de dados lattice Situações onde o algorítmo ganancioso é ótimo e não necessitamos buscar outras soluções... se a1 é muito maior que os outros a’s então o algorítmo ganancioso é próximo a ótimo se todos os a’s são iguais então o algorítmo ganancioso é ótimo Extensões ao modelo básico Existem ao menos duas situações onde o modelo falha ao refletir a realidade... As visões em um lattice não são sucetíveis de terem a mesma probabilidade de serem solicitadas em uma consulta... Em vista disto, devemos ser capazes associar uma probabilidade à cada visão representando a frequência na qual é solicitada Ao computarmos os benefícios, pesamos cada visão por sua probabilidade... O algorítmo terá os mesmos limites de desempenho: ao menos 63%... Em vez de solicitar um número fixo de visões a materializar, nós poderíamos alocar uma quantidade fixa espaço para as visões (além da visão “top” que sempre deve ser materializada) Se não temos restrições ao número de visões selecionadas , mas sim ao espaço ocupado por elas, necessitamos considerar o benefício de cada visão por unidade de espaço utilizado na sua materialização... O algorítmo ganancioso terá uma complicação adicional, mas existe um teorema que afirma: “se ignoramos casos limite o desempenho garantido do algorítmo ganancioso é o mesmo dos casos simples...” Teorema: “Seja Bgreedy o benefício e S o espaço ocupado por um conjunto de visões escolhidas pelo algorítmo ganancioso e Bopt o benefício de um conjunto ótimo de visões que ocupa não mais que S unidades de espaço, então “ 30/36 O hipercubo lattice A classe mais importante de lattices são os hipercubos, nos quais as visões são vértices de um cubo n-dimensional, para qualquer “n” Existem “n” atributos onde um agrupamento pode acontecer... Vimos um exemplo de hipercubo com n=3 para o banco de dados TPC-D A visão “top” agrupa todos estes “n” atributos Podemos visualizar as visões organizadas por “ranks” onde o i-ézimo rank a partir do fundo são todas as visões agrupadas em “i” atributos. Existem visões no rank “i” Caso: tamanho de domínio igual Podemos aplicar o algorítmo ganancioso no hipercubo procurando: um número fixo de visões para materializar ou uma quantidade fixa de espaço para alocar para as visões Examinaremos em maiores detalhes as opções para seleção de visões para materialização... Assumimos ser improvável, na prática, que todos os atributos tenham o mesmo tamanho de domínio (r) Consequentemente, podemos estimar facilmente o tamanho de qualquer visão... Veremos à frente que a visão atual selecionada para materialização irá variar, mas as técnicas básicas não mudarão para acomodar esta situação Quando cada tamanho de domínio é “r” e os dados no cubo de dados estão distribuídos aleatoriamente, então existe uma maneira simples de estimar o tamanho das visões Suponha que somente “m” células da visão topo de um lattice aparecem nos dados brutos Se agruparmos em “i” atributos então o número de células no cubo resultante será “ri” 31/36 O hipercubo lattice Se ri ≥ m então cada célula conterá no máximo um ponto de dados e “m” destas células não estarão vazias então, “m” será o tamanho de qualquer visão para a qual ri ≥ m Se ri < m então quase todas as “ri” células terão ao menos um ponto de dados Uma vez que podemos condensar todos os pontos de dados de uma célula em um valor agregado , o custo de espaço de uma visão com ri < m será de aproximadamente “ri” O gráfico mostra como o tamanho de uma visão cresce em função do número de atributos agrupados... O tamanho das visões cresce exponencialmente até atingir o tamanho dos dados brutos no rank o qual é o precipício no gráfico, e então pára de crescer Este padrão quase bate com o do banco de dados TPC-D: a visão “top” e as visões com 2 atributos agrupados possuem o mesmo “tamanho máximo”, exceto que a visão “ps” tem linhas a menos (0,8M) 32/36 O hipercubo lattice A solução tempo e espaço ótima Uma questão natural a ser investigada: qual é o tempo médio para uma consulta quando o espaço é mínimo ? O espaço é minimizado quando materializamos somente a visão “top”... então, cada consulta leva um tempo “m” para ser executada e o custo de tempo total para todas as 2n consultas é m 2n Em um outro extremo nós podemos minimizar o tempo materializando cada consulta Entretanto, não ganharíamos muito materializando qualquer visão acima do “precipício” no gráfico... então, devemos evitar materializar aquelas visões... A solução tempo ótimo depende do rank maximizado ,onde o precipício ocorre, e o rank “j” onde seja O quadro abaixo resume o tempo e espaço para os três pontos estudados Estratégias de tempo ótimas para o hipercubo 33/36 O hipercubo lattice Extensão para variações no tamanho do domínio Suponha agora que os domínios de cada atributo não tenham valores de “r” igualmente prováveis... O modelo deve então assumir que para cada dimensão valores são igualmente prováveis mas o número de valores varia, com ri valores na i-ézima dimensão para i = 1, 2,...,n Agora o precipício não ocorre em um particular rank mas encontra-se distribuído entre os ranks Entretanto, o comportamento fundamental sugerido no gráfico anterior, permanece inalterado 34/36 Conclusões e trabalhos futuros Conclusões Neste artigo investigamos o problema de decidir qual conjunto de células (visões) devemos materializar em um cubo de dados, visando minimizar o tempo de resposta às consultas A materialização de visões é uma estratégia essencial para otimização de consultas em sistemas de apoio à decisão, e a correta seleção de visões a materializar é ponto crítico para o sucesso desta estratégia Usando o banco de dados TPC-D, mostramos porque é importante materializar alguma parte do cubo de dados, mas não todo o cubo A segunda contribuição é um framework lattice que modela análises multidimensionais muito bem O algorítmo ganancioso trabalha neste lattice e seleciona corretamente as visões a materializar, sujeitas a várias restrições... “outros autores mostraram que nenhum algorítmo polinomial pode executar melhor” Finalmente, observamos o caso mais comum de um hipercubo lattice e investigamos a negociação de tempo e espaço em detalhes As visões, em algum sentido, formam uma memória hierárquica com diferentes tempos de acesso. Nas hierarquias de memória convencionais os dados são comumente associados a diferentes memórias de armazenamento (tais como cache ou memória principal) dinamicamente baseadas em padrões de acesso em tempo de execução Trabalhos futuros Estamos atualmente investigando estratégias de materialização similares para o cubo de dados 35/36 36 Walter Coelho Pereira de Magalhães Junior [email protected] PPGCC/DC - UFSCar 2009 36/36