query processing in main memory vitor silva. bibliografia “query processing in main memory...

29
Query processing in main memory Vitor Silva

Upload: internet

Post on 22-Apr-2015

107 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Query processing in main memory Vitor Silva. Bibliografia “Query Processing in Main Memory Database Management Systems” - Tobin J. Lehman & Michael J

Query processing in main memory

Vitor Silva

Page 2: Query processing in main memory Vitor Silva. Bibliografia “Query Processing in Main Memory Database Management Systems” - Tobin J. Lehman & Michael J

Bibliografia “Query Processing in Main Memory Database

Management Systems” - Tobin J. Lehman & Michael J. Carey, 1986

“Implementation Techniques for Main Memory Database Systems” - David J. deWitt, Randy H. Katz, Frank Olken, Leonard D. Shapiro, Michael R. Stonebraker, David Wood, 1984

“Database Management Systems”, 2nd Edition - Mcgraw Hill

“Join Processing in Database with Large Main Memories” - Leonard D. Shapiro, 1986

“A Study of Index Structures for Main Memory Database Management Systems” - Tobin J. Lehman, Michael J. Carey

http://en.wikipedia.org/wiki/Relational_algebra

Page 3: Query processing in main memory Vitor Silva. Bibliografia “Query Processing in Main Memory Database Management Systems” - Tobin J. Lehman & Michael J

O que nos espera (nesta apresentação)

Analisar estruturas de dados que permitem colocar a informação em memória para ser processada

Procurar explorar alguns algoritmos para quatro operadores de querys Selecção Join Projecção Agregação

Page 4: Query processing in main memory Vitor Silva. Bibliografia “Query Processing in Main Memory Database Management Systems” - Tobin J. Lehman & Michael J

Estruturas de Dados

AVL Tree (Árvores Binárias) B+ Tree Array Chained Bucket Hashing Linear Hashing Modified Linear Hashing T Tree

Page 5: Query processing in main memory Vitor Silva. Bibliografia “Query Processing in Main Memory Database Management Systems” - Tobin J. Lehman & Michael J

Estruturas de Dados

Page 6: Query processing in main memory Vitor Silva. Bibliografia “Query Processing in Main Memory Database Management Systems” - Tobin J. Lehman & Michael J

Estruturas de Dados

Page 7: Query processing in main memory Vitor Silva. Bibliografia “Query Processing in Main Memory Database Management Systems” - Tobin J. Lehman & Michael J

Sistema de Testes

PDP VAX 1 l/750 – 2 MB de memória Linguagem C 30.000 elementos unívocos Índices compostos apenas por

ponteiros Teste de 60% pesquisas, 20%

Inserções, 20% Remoções

Page 8: Query processing in main memory Vitor Silva. Bibliografia “Query Processing in Main Memory Database Management Systems” - Tobin J. Lehman & Michael J

Velocidade T Tree melhor que AVL Tree e B

Tree no conjunto pesquisa, actualização

AVL mais rápido que B Tree em pesquisa, mas em actualizações a B Tree é mais rápida

Os algoritmos de hashing têm velocidades semelhantes de pesquisa para valores baixos de nós, e enquanto não é necessário redimensionar o directório têm velocidades de actualização iguais

Linear Hashing mais lento porque para manter uma utilização de espaço estável perde muito tempo a fazer reorganização de dados

Os arrays são ineficazes devido à necessidade de reorganização de dados para manter-se ordenado (1 actualização significa mover ½ array, em média)

Page 9: Query processing in main memory Vitor Silva. Bibliografia “Query Processing in Main Memory Database Management Systems” - Tobin J. Lehman & Michael J

Espaço Arrays ocupam menos espaço AVL Tree ocupam sensivelmente o triplo do

espaço dos arrays (para cada ponteiro para dados existem mais dois ponteiros para nós filhos)

Chained Bucket Hashing e Modified Linear Hashing ocupa o espaço dos elementos + espaço da tabela de hash (sensivelmente o dobro do espaço do array)

Linear Hashing, B Trees, Extendible Hashing and T Trees neste teste ocuparam sensivelmente 1,5 do tamanho do array

Extendible Hashing obtém os piores resultados chegando a ocupar cerca de 6 vezes mais que um array devido ao facto de duplicar a tabela de hash de cada vez que um bucket fica cheio

Page 10: Query processing in main memory Vitor Silva. Bibliografia “Query Processing in Main Memory Database Management Systems” - Tobin J. Lehman & Michael J

Relação Velocidade/Espaço

Extendible Hashing e Modified Linear Hashing têm boa performance para quantidade de nós baixa, mas à custa de uma grande quantidade de espaço

Chained Bucket Hashing tem boa performance na pesquisa e na actualização, mas à custa de algum espaço

Linear Hashing é simplesmente demasiado lento

AVL Tree em tempos de execução de pesquisa e actualização razoáveis mas grandes custos de espaço

Arrays têm um tempo de pesquisa razoável e um custo de espaço baixo, mas o tempo de actualização é muito elevado

T Trees e B Trees tem o melhor desempenho no conjunto

Page 11: Query processing in main memory Vitor Silva. Bibliografia “Query Processing in Main Memory Database Management Systems” - Tobin J. Lehman & Michael J

Ponto de Situação

Estas estruturas de dados proporcionam a pesquisa de tuplo(s) - um dos operadores básicos de querys – Selecção

“ SELECT * FROM Reserves R WHERE R.rname=`Joe‘ ”

Page 12: Query processing in main memory Vitor Silva. Bibliografia “Query Processing in Main Memory Database Management Systems” - Tobin J. Lehman & Michael J

Algoritmos de Join

Nested Loops Join Hash Join Tree Join Sort Merge Join Tree Merge Join

Page 13: Query processing in main memory Vitor Silva. Bibliografia “Query Processing in Main Memory Database Management Systems” - Tobin J. Lehman & Michael J

Nested Loops Join

Para cada tuplo r Є R Para cada tuplo s Є S

Se ri==sj adiciona (r,s) ao resultado

O(N²)

Page 14: Query processing in main memory Vitor Silva. Bibliografia “Query Processing in Main Memory Database Management Systems” - Tobin J. Lehman & Michael J

Sort Merge Join A ideia base passa por ordenar as duas relações a juntar e

depois procurar fundir as duas relações. Ao ordenar os tuplos é mais fácil identificar grupos com o

mesmo valor de atributo de join. Ao identificarmos as partições comparamos as partições da

primeira relação com as partições iguais na segunda relação

O algoritmo começa por pesquisar duas relações R e S, à procura de tuplos cujo valor do atributo de join seja igual.

De seguida é feito uma pesquisa com o primeiro tuplo de cada relação.

Vai-se avançando na relação R enquanto o tuplo de R for menor que o tuplo de S

Analogamente, avança-se na relação S enquanto o valor do atributo de join for menor que o valor de R

Vai-se alternando a pesquisa até encontrar os valores pretendidos

Page 15: Query processing in main memory Vitor Silva. Bibliografia “Query Processing in Main Memory Database Management Systems” - Tobin J. Lehman & Michael J

Tree Merge Join

O conceito é similar ao Sort Merge Join, mas com recurso a T Trees de índices

Page 16: Query processing in main memory Vitor Silva. Bibliografia “Query Processing in Main Memory Database Management Systems” - Tobin J. Lehman & Michael J

Hash Join Similar as sort merge mas baseado em

tabelas de hash Se a função de hash for perfeitamente

uniforme os buckets de R terão correspondência nos buckets de S

Page 17: Query processing in main memory Vitor Silva. Bibliografia “Query Processing in Main Memory Database Management Systems” - Tobin J. Lehman & Michael J

Tree Join

Conceptalmente similar ao Hash Join, mas com recurso a T Trees

Page 18: Query processing in main memory Vitor Silva. Bibliografia “Query Processing in Main Memory Database Management Systems” - Tobin J. Lehman & Michael J

Bateria de Testes1. Variar Cardinalidade – variar a dimensão das relações |R1|=|R2|2. Variar Cardinalidade da relação interior – variar a dimensão de

R2 (|R2| = 1-100% de |R1l, com |R1l = 30,000 elementos)3. Variar Cardinalidade da relação exterior – variar a dimensão de

R1 (|R1l = 1-100% de |R2|, com |R2| = 30,000 elementos)4. Variar percentagem de duplicados (enviesada) – variar a

percentagem de duplicados das duas relações de 0-100% com |R1l=|R2|=20,000 elementos, de distribuição de duplicados enviesada

5. Variar percentagem de duplicados (uniforme) – variar a percentagem de duplicados das duas relações de 0-100% com |R1|=|R2|=20,000 elementos, de distrbuição de duplicados uniforme

6. Variar selectividade de semijoin – variar a selectividade de semijoin entre 1-100% com |R1|=|R2|=30,000 elementos e uma percentagem de duplicados de 50% de distribuição uniforme

Foram feitos apenas join de igualdade

Page 19: Query processing in main memory Vitor Silva. Bibliografia “Query Processing in Main Memory Database Management Systems” - Tobin J. Lehman & Michael J

Resultado do Nested Loop Join

Mesmo com menos elementos nas relações (de 1-20,000) os resultados demonstram que o Nested Loop Join nunca deverá ser considerado como eficaz

Page 20: Query processing in main memory Vitor Silva. Bibliografia “Query Processing in Main Memory Database Management Systems” - Tobin J. Lehman & Michael J

Resultados

Page 21: Query processing in main memory Vitor Silva. Bibliografia “Query Processing in Main Memory Database Management Systems” - Tobin J. Lehman & Michael J

Resultados

Page 22: Query processing in main memory Vitor Silva. Bibliografia “Query Processing in Main Memory Database Management Systems” - Tobin J. Lehman & Michael J

Resultados

Page 23: Query processing in main memory Vitor Silva. Bibliografia “Query Processing in Main Memory Database Management Systems” - Tobin J. Lehman & Michael J

Resultados algoritmos de Join Se já existirem as àrvores de índices o Tree Merge

demonstra ser o algoritmo mais vantajoso Se não existir pelo menos um dos índices ou os

dois índices o algoritmo de Hash Join demonstra ser o mais eficaz

Excepções: (que confirmam a regra) Se apenas existirem índices numa relação e na outra

não, mas esta segunda fôr menos de metade da maior então o T Tree Join é mais rápido que o Hash Join porque o tempo de pesquisa nos tuplos da relação menor é inferior ao tempo de construção e pesquisa da tabela de hash

Se a selectividade de semijoin e a percentagem de duplicados forem elevadas a melhor opção é o Sort Merge dado que este lida melhor com grandes volumes de pesquisa

Page 24: Query processing in main memory Vitor Silva. Bibliografia “Query Processing in Main Memory Database Management Systems” - Tobin J. Lehman & Michael J

Projecção

SELECT DISTINCT R.sid, R.bidFROM Reserves R

Critíco: Remoção de duplicados

Sort Scan Hashing

Page 25: Query processing in main memory Vitor Silva. Bibliografia “Query Processing in Main Memory Database Management Systems” - Tobin J. Lehman & Michael J

Resultados

Page 26: Query processing in main memory Vitor Silva. Bibliografia “Query Processing in Main Memory Database Management Systems” - Tobin J. Lehman & Michael J

Resultados Algoritmos de Projecção No 1º teste não foram inseridos duplicados e o

que domina o desempenho dos algoritmos é o tempo de inserção dos elementos nas estruturas de dados (no hashing o crescimento é linear, enquanto o custo do sort scan é O(|R| log |R|))

No 2º teste, ao inserir elementos duplicados, a tabela de hash passa a guardar menos elementos (descarta duplicados) o que leva a que o desempenho seja melhor que o sort scan em que só se eliminam os duplicados após todos os elementos já estarem inseridos e ordenados no array

Page 27: Query processing in main memory Vitor Silva. Bibliografia “Query Processing in Main Memory Database Management Systems” - Tobin J. Lehman & Michael J

Agregação

SELECT AVG(S.age)FROM Sailors S

O algortimo básico passa por pesquisar em toda a tabela e ir guardando informação adicional que permita calcular o valor final

Para querys com grouping novamente pode recorrer-se ao sorting e ao hashing

Page 28: Query processing in main memory Vitor Silva. Bibliografia “Query Processing in Main Memory Database Management Systems” - Tobin J. Lehman & Michael J

Pontos Finais Uma ideia sobre alguns dos algoritmos

que podem implementar três dos operadores de query

Existem mais algoritmos (pelo menos de Join) como o Hybrid Hash ou o GRACE

Existem critérios que permitem efectuar a escolha dos algortimos (quantidade de tuplos, quantidade de duplicados, entre outros)

Page 29: Query processing in main memory Vitor Silva. Bibliografia “Query Processing in Main Memory Database Management Systems” - Tobin J. Lehman & Michael J

Obrigado