45
Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Embed Size (px)

Citation preview

Page 1: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Algoritmos para Operação de Junção

AULA 14

SISTEMAS DE BANCO DE DADOS

Page 2: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Tabelas a serem juntadas R : tabela externa

M páginas Pr tuplas por página

S : tabela interna N páginas Ps tuplas por página

Condição de Junção: Ri = Sj Custo de uma operação de I/O = 10ms

Page 3: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Nested Loops Join – tupla a tuplaPara cada tupla r ε R faça

Para cada tupla s ε S faça

se ri = sj então

insere <r,s> em Result

Retorne Result

t

Páginas de S

Página de R

Page 4: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Custo do NLJ - t/t S é escaneada Pr . M vezes Cada scan em S equivale a N operações de

I/O (N = número de páginas de S) R é escaneada uma vez Custo total = Pr. M. N + M Não se considera o custo de escrever o

resultado, pois é igual para todos os métodos.

Page 5: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Exemplo

M = 1000 páginas Pr = 100 registros por página N = 500 Custo = 1000 + 100.1000.500 = 50.000.100 I/Os

~ 140 horas de processamento !!

Page 6: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Nested Loops Join – página a páginaPara cada R-page de R faça

Para cada S-page de S faça

se ri = sj então

insere <r,s> em Result

Retorne Result

Páginas de S Página de R

Page 7: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Custo do NLJ- p/p S é escaneada M vezes Cada scan em S equivale a N operações de

I/O (N = número de páginas de S) R é escaneada uma vez Custo total = M. N + M Não se considera o custo de escrever o

resultado, pois é igual para todos os métodos.

Page 8: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Exemplo M = 1000 páginas N = 500 Custo = 1000 + 1000.500 = 501.000 I/Os

~ 1,4 horas de processamento

Page 9: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Block Nested Loops Join – uso do Buffer Caso 1: Tem-se espaço suficiente no buffer

para a relação S inteira + 2 páginas extras

Para cada R-page faça

Para cada S-page in memory faça

se ri = sj então insere <r,s> em Result

Retorna Result

Relação S inteira

Buffer

Página de R Página de output

Custo = M + N I/OsNo exemplo :1500 I/Os = 15 segundos

Page 10: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Block Nested Loops Join – uso do Buffer Caso 2: Tem-se espaço suficiente no buffer

para B - 2 páginas da relação R + 2 páginas extras

Para cada bloco de (B-2) páginas in memory de R-page faça

Para cada S-page faça

se ri = sj então insere <r,s> em Result

Retorna Result

Bloco de B-2 páginas de R

Buffer tem capacidade para B páginas

Página de S Página de output

Page 11: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Esquema Geral do BNL Join

Bloco de B-2 páginas de R

Buffer tem capacidade para B páginas

Página de S Página de output

Relações R e S

DiscoDisco

Relação R S

Page 12: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Custo do BNL Join K = Número de blocos de B-2 páginas de M

K = [M/(B-2)] Cada página de S é escaneada K vezes Cada scan em S equivale a N operações de I/O (N =

número de páginas de S) R é escaneada uma vez Custo total = K.N + M = [M/(B-2)]N + M Não se considera o custo de escrever o resultado,

pois é igual para todos os métodos.

Page 13: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Exemplo M = 1000 páginas N = 500 B = 102 Custo = (1000/100).500 + 1000 = 6000 I/Os

~ 1 minuto

Page 14: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Exercício Calcular o custo do BNL Join, caso a relação

S (menor) seja escolhida como a relação externa.

Page 15: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Otimizações do BNL Join1. Diminuindo o custo de CPU para fazer as

junções. Se houver espaço suficiente na memória,

construir uma tabela hash para cada R-block carregado na memória, com chave = atributo da junção.

Para cada tupla s ε S, para encontrar r ε R-block tal que ri = sj, utiliza-se a tabela Hash construída.

Page 16: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Otimizações do BNL Join2. Ao invés de utilizar B-2 páginas em memória para

alocar blocos da relação externa R, e uma só página para a relação S, utilizar (B-2)/2 páginas para alocar um bloco de R e (B-2)/2 páginas para alocar um bloco da relação interna S.

Exercício: calcular o custo neste caso.

Onde há melhora de performance em relação ao método anterior (onde 1 única página em memória é alocada para a relação S) ?

Page 17: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Conclusão Até o momento:

NLJ - t/t = 140 horas NLJ - p/p = 1 hora e 24 min BNL Join com B = 102 páginas no buffer =

1 min

Page 18: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Index Nested Loops JoinSe uma das relações (S)

possui um índice nos atributos da junção (chave = atributos da junção)

Usa S como a relação interna

Para cada tupla r ε R faça Para cada tupla s ε S

tal que ri = sj insere <r,s> em ResultRetorna Result

Usa o índice em S para encontrar todas as tuplas de S com sj = rj

Page 19: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Custo do INL Join Para cada r = <r1,...,ri,...,rn>

Custo para encontrar todas as tuplas de S com sj = ri

Se o índice é B-Tree: custo para encontrar a folha apropriada é 2 a 4 I/Os = profundidade da árvore

Se o índice é Hash : custo para encontrar o bucket apropriado é 1 a 2 I/Os (2 I/Os caso for extensível com diretório de ponteiros em disco).

Se o índice é agrupado: custo de encontrar as tuplas correspondendo ao ponteiro indicado pelo índice é 1 I/O.

Se o índice não é agrupado: custo de encontrar as tuplas correspondendo ao ponteiro indicado pelo índice pode ser N I/O, onde N = número de tuplas de S com si= rj.

Page 20: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Custo do INL Join Custo Total em caso de índice hash agrupado:

M + (2 + 1).Pr.M

Custo Total em caso de índice B-tree agrupado M + (4 + 1).Pr.M

Page 21: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Exemplo 1 Tamanho de R = M = 1000 páginas Tamanho de S = N = 500 Pr = 100 tuplas por página S tem indice hash no atributo de junção Atributo de junção é chave da relação S Custo =

1000 + 100.000 (1 + 1,2 ) = 221.000 I/0s = 37 min

Page 22: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Exemplo 2 Tamanho de R = M = 1000 páginas Tamanho de S = N = 500 Ps = 80 tuplas por página R tem indice hash no atributo de junção Atributo de junção não é chave da relação R Custo p/ encontrar a pág. do indice correspondendo a ri = sj

500 + 80 . 500 (1,2) = 500 + 40000(1,2) = 48500 I/Os Custo p/ encontrar as tuplas em R indicadas pelo ponteiro da entrada <ri,*>

Total de tuplas de R = 100.000 Total de tuplas de S = 40.000 Se há distribuição uniforme, cada tupla de S ‘casa’ com 2,5 tuplas de R. Se o indice de R é agrupado: as tuplas de R que casam com sj estão em uma

página: Custo total = 48.500 + 40000 = 88.500 I/Os = 15 min

Se o indice de R não é agrupado: Custo total = 48.500 + 2,5. 40000 = 148.500 I/Os = 25 min

Page 23: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Conclusão INL Join vale mais a pena quando o índice

está na relação maior e é agrupado. Até o momento:

NLJ - t/t = 140 horas NLJ - p/p = 1 hora e 24 min BNL Join com B = 102 páginas no buffer = 1 min INL Join com índice agrupado na rel. maior = 15 min INL Join com índice ñ agrupado na rel. maior = 25 min

Page 24: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Sort Merge Join Ordena relação R pelo atributo de junção Ordena relação S pelo atributo de junção Carrega página de R e página de S na memória. Escaneia ambas as páginas simultaneamente para

encontrar as tuplas que casam. À medida que se encontram as tuplas que casam vai-

se construindo páginas da relação de output.

Page 25: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Sort Merge Join: Esquema Geral

Página de S

Página de output

Relações R e S

DiscoDisco

Relação R S

Página de R

4, 5, 2

4, 5, 2, 1, 3

4, 7, 26, 7, 36, 1, 9

2, 5, 23, 5, 24, 1, 34, 7, 15, 8, 06, 8, 46, 7, 5

4, 5, 2, 7, 1

6, 7, 3, 8, 4

4, 7, 2, 1, 3

Relação R SRelação R

Page 26: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Algoritmo Sort Merge JoinSe R não está ordenada, ordena RSe S não está ordenada, ordena STr = 1a tupla de RTs = 1a tupla de SGs = 1a tupla de SWhile Tr ≠ eof e Gs ≠ eof do

While Tri < Gsj do Tr = next tuple em R depois de Tr;

endwhile

While Tri > Gsj do Gs = next tuple em S depois de

Gs; endwhile

While Tri = Gsj do Ts = Gs

While Tsj = Tri do insere <Tr, Ts> em Result Ts = next tuple em S depois

de Ts; endwhile Tr = next tuple em R depois de

Tr; endwhileGs = Ts;endwhile

Page 27: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Custo do Sort-Merge Join Número de páginas no buffer = B Custo de ordenar a relação R

2M(logB-1M1 + 1) onde M1 = M/B Custo de ordenar a relação S

2N(logB-1N1 + 1) onde N1 = N/B Custo de juntar as duas relações = M + N

(supondo que cada partição de R e cada partição de S cabe numa página)

Observação : uma partição corresponde ao conjunto de tuplas com o mesmo valor do atributo de junção

Page 28: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Exemplo 1M = 1000, N = 500, B = 102 Custo de ordenar a relação R

2M(logB-1M/B + 1) = 2. 1000 (log101 1000/102 + 1) = = 2. 1000 (0,5 + 1) = 3000 I/Os(101)1/2 = 9,80

Custo de ordenar a relação S = 2. 500 (0,3+1) = 1300 I/Os Custo de juntar as duas relações = 1500 I/Os Custo total = 5800 I/Os Custo do BNL Join = 6000 I/Os Custos não muito diferentes

Page 29: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Exemplo 2M = 1000, N = 500, B = 35 Custo de ordenar a relação R

2M(logB-1M/35 + 1) = 2. 1000 (log34 1000/35 + 1) = = 2. 1000 (1 + 1) = 4000 I/Os(34)1 = 34 1000/35 = 28,57

Custo de ordenar a relação S = 2. 500 (1 + 1) = 2000 I/Os Custo de juntar as duas relações = 1500 I/Os Custo total = 7500 I/Os = 3 min e 7 seg Custo do BNL Join = [M/(B-2)]N + M = 31 . 500 + 1000 =

16500 I/Os = 7 min Sort Merge bem mais rápido

Page 30: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Exemplo 3M = 1000, N = 500, B = 300 Custo de ordenar a relação R

2M(logB-1M/300 + 1) = 2. 1000 (log299 3,33 + 1) = = 2. 1000 (0,2 + 1) = 2400 I/Os(299)0.2 = 3,12 Custo de ordenar a relação S = 2. 500 (0,2 + 1) = 1200

I/O Custo de juntar as duas relações = 1500 I/Os

Custo total = 5100 I/Os = 2min e 7 segundos Custo do BNL Join = 4 . 500 + 1000 = 3000 I/Os = 75 seg BNL mais rápido

Page 31: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Discussão: Sort Merge Join Piores casos:

Se o número de tuplas numa partição da segunda relação (S) é muito grande e não cabe no buffer pool Partição de S deverá ser varrida tantas vezes quanto

for o número de tuplas na correspondente partição de R.

Pior caso: todas as tuplas de R e S contém o mesmo valor no atributo de junção: Custo = Pr . N

Page 32: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Otimização do Sort Merge JoinRealizar a junção durante a ordenação das relações Tamanho do buffer = B páginas Primeira iteração da ordenação: ordena-se cada página de R e cada página de S

e obtém-se M/B subarquivos ordenados de R e N/B subarquivos ordenados de S Custo: 2M + 2N

Suponha que: B > M1/2, onde M é a relação maior número de subarquivos de R = M/B < M1/2 número de subarquivos de S = N/B < M/B < M1/2 Idéia: Se tivermos B > 2 M1/2 + 3, teremos espaço suficiente para fazer o

“merge” dos subarquivos de R e dos subarquivos de S na segunda iteração, além de construir a resposta da junção simultaneamente.

Custo = M + N Custo Total = 3(M+N)

Page 33: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Esquema Geral2a iteração da ordenação

Buffer

Subarquivos da Relação R em discoCada página estáordenada

Subarquivos da Relação S em disco

R S

Página de

em disco

Página ordenadade R

Página ordenadade S

Page 34: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Exemplo M = 1000, N = 500, B = 102 102 > 2.1000 ½ + 3 = 64 + 3 = 67

Custo da 1a iteração da ordenação = 2M + 2N = 2000 + 1000 = 3000 I/Os

Custo da 2a iteração (junção) =

M + N = 1500 I/Os Custo total = 4500 I/Os = 45 segundos

Page 35: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Conclusão Até o momento:

NLJ - t/t = 140 horas NLJ - p/p = 1 hora e 24 min BNL Join com B = 102 páginas no buffer = 1 min INL Join com índice agrupado na relação maior = 15 min INL Join com índice ñ agrupado na rel. maior = 25 min Sort Merge Join, B = 102 páginas no buffer = 1 min 30 s Sort Merge Join otimizado, B = 102 páginas no buffer

Custo = 45 segundos

Page 36: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Hash Join Fase do particionamento

Utiliza função hash para particionar R e S em k partições Fase de junção

Supondo que cada partição i da relação menor S cabe na memória

Carrega-se cada partição i de S na memória Reserva-se uma página para a partição i da relação R Para cada tupla t da partição i de R varre-se toda a

partição correspondente de S. Sabe-se que as tuplas que casam com t só podem estar nesta partição i de S.

Page 37: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Fase do Particionamento de R e S

Buffer tem capacidade para B páginas,onde B – 1 = número k de partições

Página de R

Relações R e S

DiscoDisco

Relação R particionada

Pt 1 Pt 2 Pt 3 Pt 6Pt 5Pt 4

DistribuiUsando hash h

Page 38: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Fase da Junção de R e S

Buffer tem capacidade para B páginas,onde B – 2 = tamanho da partição da relação menor

Página da partição n de R

Relações R e Sparticionadas

DiscoDisco

SRelação R

Partição n de S (inteira)

SPágina de R

Page 39: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Algoritmo Hash JoinRotina Particiona(R,k)

% R = tabela, k = número de partições

    Para cada página P da tabela R faça       begin            Leia P;            Para cada tupla r em P faça                 begin                     i : =  h(r(A));                    insere r na página Ki do buffer pool;                    Se página Ki está cheia então grava Ki em disco e libera espaço no

buffer correspondente a Ki;                end         end  

    Para cada  i=1,2,...,k  faça                begin                    Partição Pi = conjunto das páginas (em sequência)  gravadas em

disco correspondentes ao espaço Ki do buffer pool               end

Page 40: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Algoritmo Hash JoinRotina Junta(P1,…Pk,P’1,…,P’k)% (P1,...,Pk = partições de R; P’1, ..., P’k = partições de S)

Para cada i = 1, ...,k faça begin

carrega partição Pi de R no buffer pool (supomos que cada partição da relação menor (R) caiba no buffer pool);Para cada página P da partição P'i de S faça    begin       Para cada tupla s de P faça          begin                Para cada r na partição Pi de R  tal que  r(A) = s(A) faça                     insere <r,s> em Result                end          end     end

Page 41: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Custo do Hash Join R = M S = N Fase do Particionamento = 2(M + N) Fase da Junção = M + N Custo Total = 3(M+N)

Page 42: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Requisitos de memória K = número de partições M = tamanho da relação menor N = tamanho da relação maior B = número de páginas no buffer Fase de particionamento: K = B - 1 Tamanho de cada partição da relação menor =

M/K = M/(B-1) Fase da Junção : B = M/(B-1) + 2 B > M

Page 43: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

ExemploM = 500N = 1000B > 500 ~ 25 páginasCusto Hash = 3(1500) = 4500Custo de Sort-Merge = 3(1500) caso B > 2 + 3 ~ 67 páginas 25 ≤ B ≤ 67: Hash Join é melhor B ≥ 67 : Hash e Sort-Merge têm os mesmos custos Quanto maior for a diferença entre o tamanho das relações,

maior a vantagem do Hash Join sobre o Sort-Merge, pois necessita de menos memória interna para ter o custo mínimo de 3(M+N).

1000

Page 44: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Conclusão NLJ - t/t = 140 horas NLJ - p/p = 1 hora e 24 min BNL Join com B = 102 páginas no buffer = 1 min INL Join com índice agrupado na relação maior = 15 min INL Join com índice ñ agrupado na rel. maior = 25 min Sort Merge Join, B = 102 páginas no buffer = 1 min 30 s Sort Merge Join otimizado, B = 102 páginas no buffer

= 45 segundos Hash Join, B = 102 páginas no buffer = 45 segundos

Page 45: Algoritmos para Operação de Junção AULA 14 SISTEMAS DE BANCO DE DADOS

Algoritmos de “Join” nos SGBDs comerciais

Sybase ASE: INJ e Sort-Merge Sybase ASIQ: NLJ p/p, INJ, Sort-Merge, Hash Join

simples Oracle 8: NLJ p/p, Sort-Merge, Hash Join híbrido IBM DB2: BNL, Sort-Merge, Hash Join híbrido MS SQL Server: BNL, INL, Sort-Merge, Hash Join

simples, Hash teams (técnica própria da MS) Informix: BNL, INL, Hash Join híbrido