• Nenhum resultado encontrado

projeto-fisico

N/A
N/A
Protected

Academic year: 2021

Share "projeto-fisico"

Copied!
38
0
0

Texto

(1)

Projeto Físico de Bancos de

Dados

Fabio Porto

LNCC DEXL

Agenda

l 

Introdução

l 

Armazenamento em Disco

l 

Estruturas internas de representação

l 

Indexação

Introdução

l 

Projeto Conceitual BD

– 

Projeto lógico de BD - Esquema

Relacional -> definição de relações e R.I.

l 

Projeto físico de BD

- Esquema interno

de BD -> criação de tabelas, índices,

distribuição de dados, alocação em

disco,…

(2)

Ciclo de vida de projeto de BD

Projeto conceitual Esquema conceitual

Projeto logico

Esquema de banco de dados Normalizado (ex. Relacionall) Projeto físico Necessidades de dados das aplicações Regras de transformação Requisitos de

desempenho Características do sistema Esquema interno

Verificação Regras Normalização

Especificaç

ão física do BD

l Consiste em escolher as técnicas de implementação

em disco(ou memória - in memory databases) do esquema de banco de dados que melhor satisfará à aplicação

l Dado um conjuto de dados D e um conjunto de

consultas Q um BD bd deve armazenar D e garantir um tempo máximo tmaxpara toda q em Q. l Porém, as especificidades de projeto lógico não

devem modificar aplicações desenvolvidas segundo o projeto lógico R.

Independência de dados

l 

As aplicações são desenvolvidas sobre uma

visão externa da base de dados e não

devem ser afetadas por mudanças de

características físicas do BD.

(3)

Armazenamento Gerenciador de armazenamento Gerenciador de buffer Memória (Buffers)

Páginas de leitura e gravação

Gerenciador de Índice/arquivos/

registros

Comandos de Páginas dados/metadados/índices

Sub-sistema de

Armazenamento

Armazenamento de dados

l Os dados devem persistir por um longo período de

tempo

l O projeto de armazenamento deve considerar:

– O volume da base de dados

– O custo de armazenamento

– A rapidez desejada de acesso

– O perfil de acesso aos dados pelas aplicações

– O hardware disponível – A garantia de persistência

Armazenamento de

base de dados

cache Memoria RAM

Memória Flash (EEPROM)

Discos de Estado sólido (SSD) Discos Rígidos Fitas Magnéticas

custo Tempo

(4)

Velocidade/custo

l 

HD - (5 - 10) ms ,$ 0.05 / GB

l 

SSD - cerca de 0.1 ms, $ 1.2 - 2.0 / GB

l 

Memória Flash - cerca de 100 ns

l 

DRAM - nanosegundos - cerca de $40/GB

l 

Obs: Acesso ao disco é o gargalo na

transferência entre disco e memória

Armazenamento BD

cache Meomória Principal

disco Mémoria

virtual File system

1 0 -1 -2 -3 -4 -5 -6 -7 -8 -9 5 6 7 8 9 10 11 12 13 secudário Principal cache sec 10i Byt es 10i SGBD

A lei de Moore

l 

A capacidade dos processadores deve

crescer de forma exponencial, duplicando

sua capacidade a cada 18 meses.

– Velocidade de acesso à memória e a disco

(5)

Armazenamento em disco

Discos vs Fitas magnéticas

l 

Principal diferença:

– Discos oferecem acesso direto;

l Utilizado por dados online;

– Fitas fornecem acesso sequencial;

l backups;

l dados historicos;

l 

Técnicas de espelhamento e « stripping »

oferecem garantia de segurança e

disponibilidade

Discos Magnéticos

Trilha Setor Cilindro (imaginario) Pratos de disco Cabeça de leitura e gravação Setores de trilhas Com mesma densidade De dados

(6)

Armazenamento Físico

l Uma trilha é dividada em setores de discos. Setores

são agrupados em páginas como unidade de transferência

– Páginas do SO variam em geral entre 2KB a 16KB

l O acesso a disco é direto a paptir de um endereço

(número de cilindro, numero da trilha e numero do setor/bloco)

– A controladora de disco envia o endereço para o dispositivo de leitura ou gravação

l Operações de leitura e escrita transferem os dados

do disco para a memória e vice-versa

Característica de

acesso a disco

l  Latência – o tempo para transferir dados para memória a partir de um comando de leitura

–  Tempo de busca(seek time);

l Positionamento a cabeça de leitura sobre a trilha desejada; –  Tempo de rotação;

l Posiciona a cabeça de leitura sobre o setor desejado l Positionne la tête de lecture sur le secteur; –  Tempo de transferência de um bloco; l  Comparação

–  Busca - 14 µs;

–  Transferência +- 0,5 µs por um bloco de 4 KB;

• 

Desejável que dados associados sejam gravados sobre um mesmo cilindro.

• 

Obs:

–  Enquanto se processa a busca em disco, a CPU pode realizar milhões de instruções. Deriva dai a necessidade de pre-fetch de dados

Sub-sistema de disco

bus

Controladora De disco Pode acessar várias páginas E transferi-las de uma só vez

(7)

Custo de leitura de um registro

l 

Acesso direto:

– Tempo de latência por bloco (tlb) + busca em

memória+tempo de transferência

l 

Acesso sequencial:

– Em média: (tlb)*número de blocos/2 + busca em

memória

Desafio para o

armazenamento em disco

l 

Uma estrutura física que:

– Permita acesso direto

– Permita múltiplos formatos de dados

– Variação de tamanho

– Garantindo eficiência

l 

SGBD armazena dados em blocos

– Minimiza o número de pedidos de transferência

– Tamanho de cada bloco estabelece uma relação

entre volume de dados transferido e número de requisições

Estrutura de

armazenamento de BD

l Um banco de dados é distribuído por vários arquivos

gerenciados pelo S.O. ou diretamente pelo SGBD

l Um arquivo é formatado em blocos (páginas);

l Cada bloco conterá várias unidades lógicas de

dados (registros ou, em SGBD, tuplas):

l Cada registro conterá valores (valores de atributos)

l Um conjunto de registros será acomodado em um

bloco para ser transferido entre a memória principal e o disco;

(8)

Distribuição Física

… … …

Banco de Dados

Arquivo Arquivo Arquivo blocos

…. blocos blocos

Estrutura de armazenamento

em BD

l Em um banco de dados relacional, as relações

(≈arquivos) são compostas por tuplas (≈ registros) agrupados em blocos:

– Cada tupla pode apresentar tamanho diferente

l Os registros apresentam tamanho fixo ou variável;

l Na maioria das implementações um registro não

ultrapassa o tamanho de seu bloco;

l O tamanho de um bloco pode variar segundo o

SGBD, ou devido a configuração do sistema, entre (4KB, 16 KB, 32 KB, 56 KB)

O Tamanho dos blocos

l 

Tamanho fixo;

l 

Deve acomodar relações pequenas;

l 

Grandes relações atravessam vários blocos;

l 

Um bloco pode estar distribuído por várias

(9)

Formato de Registros Físicos

l 

Registros de tamanho fixo e variável

l 

Mapeamento das estruturas produzidas no

modelo lógico em representações físicas

Tipos de dados simples

l  Strings de caracteres

–  char(n) –

l string the caracter de tamanho fixo n.

l ocorrências de valores desse tipo ocupam n bytes; l Strings menores que n são preenchidas com espaços; l  Strings tamanhos variável

–  VARCHAR(n)

l Suporta strings de tamanho até n, n <= 255; l Ocupa bytes referentes ao tamanho real de cada valor +1; l  Timestamp

l 8 bytes inteiros

l Armazenados como o número de segundos antes e depois de meia-noite 01-01-2000.

l  Campos numéricos

l 2,4,8 inteiros

l 4,8 ponto flutuante

l Tipos numericos,decimais – suportando valores bastante grandes mas de processamento aritmético mais lento que inteiros ou ponto-flutuante;

(10)

Mapeando Tuplas

l 

Tuplas (ou objetos) são mapeados em

registros em páginas;

l 

Registros são compostos por:

– Cabeçalho;

– Campos;

l 

Registros podem ser fixos ou variáveis

Registro de tamanho fixo

Type deposito = record

agencia : char(22); numero-de-conta : char(10); saldo : real

end

Reg 0 Centro A-1 2000 Reg 1 Quitandiha A-10 2500 Reg 2 Itaipava A-3 3000 Reg 3 Araras A-5 7000 Reg 4 Bingen A-8 4000 Reg 5 Rio A-7 3400 Reg 6 Angra A-9 2500 Reg 7 Cabo Frio A-2 2000

Arquivo: Contas bancarias

nomtamanho <tipo,..>

Obs:

•  Tamanho de registro fixo: •  22+10+2=34 bytes •  Mais o cabeçalho

Cabeçalho

l 

Armazena informações de apoio a acesso

aos registros

– Tamanho do registro

– Ponteiro para áreas do registro

(11)

Registros de tamanho variável

l Porque tamanhos variável?

– Armazenamento de registros de tipos diferentes. Por

exemplo: armazenamento de alunos e suas notas;

– Tipos de registro contendo um ou mais atributos de tamanho variável (por ex: nome do empregado);

– Tipos de registros contendo atributos opcionais (Nulos) (por ex: número celular do empregado)

l Atributos de tamanho variável ocupa um byte a mais para acodar seu tamanho

Exemplo: Tipo Array

l 

Type lista-de-contas = record

agencia : char(22); info-conta : array [1 .. ] de record; numero-conta : char(10); situação :real; end end

Exemplo: Tipo atributos de

tamanho variável

l 

Type correntista = record

nome : varchar(100);

endereço: varchar(200); telefone: char(10);

(12)

Registros de tipos diferentes

em um mesmo arquivo

l Relações frequentemente acessadas conjuntamente

são estocadas em um mesmo arquivo

l Fatura Item Fatura – Select F.numero_fatura, i.id-produto

from Fatura f, Item_fatura i where f.idfatura = idfatura

–  Vantagens: acesso conjunto requer menos I/O

–  Desvantagem: SCAN de apenas uma delas

Atributos de tamanho variável

l 

Cabeçalho registra:

– tamanho de cada registro

– Ponteiro para cada campo variável:

l tamanho

l Ex: campo endereço com comprimento variavel

l 

Os campos de tamanho simples são

alocados à frente;

Compri- mento total

data telefone nome ponteiro para endereço endereço Tamanho atributo variavel

Estrutura

cabeçalho # info geral agencia Tamanho

da lista conta1conta2 ….

Comprimento total cabeçalho # info geral nome nome tamanho endereço Comprimento total tamanho (null) telefone Info conta com NULL Array 0 10 100

(13)

Registros maiores que um

bloco

l Em algumas situações, registros têm tamanho maior

que o de um bloco:

– Audio e video;

– Sequencia de nucleotideo do genoma humano (se armazenado em um único atributo de tipo string);

l Nestes casos, precisamos de uma outra estrutura;

– Cada cabeçalho de registro deve informar se o registro é um fragmento;

– Se for fragmento, um bit para indicar se é o primeiro ou o último;

– Se não for o último, um ponteiro para o próximo fragmento

Registro com fragmentos

Cabeçalho bloco # info geral Cabecalho registro

Registro 1 Registro 2-a

Registro 2b Registro 3

Registros BLOBS

l Vídeos e Audios são em geral mapeados para

objetos do tipo BLOB (Binary Long Objects);

l Um BLOB é armazenado em uma lista de

páginas for do bloco onde suas tuplas se encontram armazenadas;

l Ex:

– Create table filme (

nome varchar(200), gênero varchar(100), filme blob)

(14)

Blob data type

cabeçalho

# info geral

gênero tamanho nome drama House of cards video Bloco 1 Bloco 2 0001000101000100100100001001001001 00010011110111001001000011110001001 1101001010100100100100100000001001 0001000101000100100100001001001001 00010011110111001001000011110001001 1101001010100100100100100000001001

Registro de tamanho fixo

em bloco

cabeçalho

Bloco 0 Petropolis A-1 2000 Araras A-10 2500 Itaipava A-3 3000 Nome arquivo tamanho

Registro de tamanho variável

em um bloco

Reg 0 Lausanne A-1 200 montana Reg 1 Morges A-10 250 champs-verts Reg 2 Écublens A-3 300 lac dor Reg 3 Berne A-5 700 111 Reg 4 Luzern A-8 400 A-11 500 Reg 5 Bale A-7 340 le primptemps Reg 6 Zurich A-3 250 A-13 320 Reg 7 Lugano A-2 200 valée d’ours

Cabeçalho

(endereço-tamanho)

Problema: Atualização para um tamanho mais longo requer movimentação

(15)

Organização de registros em

um bloco

l 

Sequencial

– Os registros se sucedem na ordem de inserção

– A eliminação de registros deixa espaços livres

– De tempos em tempos o arquivo deve ser

re-organizado

– Se um bloco é inteiramente preenchido, um outro

é alocado para futuras inserções.

Modificação de dados

em um bloco

l 

Inserção em um bloco

– Se há espaço

regx

reg reg reg bloco1

reg reg reg regx bloco1

Modificações de dados

l 

Inserções em um bloco

– Se não há espaço contíguo

regx

reg reg reg

reg reg reg

… bloco1

reg

reg reg reg

reg reg reg

… bloco1

(16)

Organização de registros em

blocos

l Ordenados

– Os registros são estocados segundo os valores de campos chaves;

– Se há espaço no bloco

l Insere-se o registro e atualizam-se os ponteiros no cabeçalho – Se não houver espaço

l Cria-se um novo bloco

l Deslocam-se os registros de valores mais altos l Insere-se o novo registro em sua posição com base em seu

valor de atributo chave l Atualizam-se os ponteiros nos blcos

– OBS: alternativa, utilizar estruturas de indexação onde os registros encontram-se nos nós folhas.

Modificação de dados em

blocos ordenados

l 

Inserção em bloco

– Não há espaço contíguo

reg1 reg3 reg2 reg4

reg5

reg6 reg7 reg8 1o 2o 3o 4o 1o 2o 3o bloco1 bloco2

Modificação de dados

l 

Inserção em um bloco

– Deslocar as chave mais altas

reg1 reg3 reg2 rec4

reg5 reg6 reg7 reg8 reg4 bloco1

(17)

Estrutura de arquivos de

comprimento fixo em disco

Bloco 0 Lausanne A-1 2000 Écublens A-10 2500 Chavannes A-3 3000

Bloco 1 St-sulpice A-5 7000 Morges A-8 4000 Vevey A-7 3400 Montreux A-9 2500 Mapa de bloco

Nome arquivo Qtd Blocs

free Size free proximo

free size

Calculo de espaço em

blocos

l  Tamano do bloco: ex. 4k

l  Uma página de controle dos blocos

l  Tamanho do cabeçalho:

– Inicial - 200 bytes

– Espaço livre: 50 x (ponteiros de endereçamento (2)+tamano(2)= 4 bytes)

l  Tamano de cada registro

– Posição do primeiro atributo fixo - 1 Byte – Par (endereço + tamanho) atributos variáveis

l 4 bytes X numero de atributos de tam. Variável – Soma do comprimento dos atributos:

l Fixo - tamanho de alocação l Variável: tamanho máximo

Consequencia sobre

algoritmos

l A maioria dos algoritmos são desenvolvidos

considerando-se que os dados estejam em memória;

l Precisam ser revistos para SGBDs onde os

dados estão em disco:

– Sort, merge, join

l Devem ser projetados algoritmos que:

–  reduzam o acesso a disco

– Utilizem as diferentes estruturas de memória de forma

(18)

Transferência de blocos

controladora

Memória (Buffer)

Espaço de memória RAM < espaço em disco

Leitura seletiva dos dados em disco

Estruturas de Indexação

Organizaç

ão Indexada

•  Objetivo:

• Acesso direto à base por valor chave

• Acesso sequencial segundo ordenação das chaves • Distribue inserções sobre blocos diferentes • Avaliar rapidamente a unicidade de um registro com base em seu valor de chave

• Em alguns casos responder à consultas sem acessar os dados;

(19)

Tipos de Indices

l 

Índices densos

l 

Índices esparsos

l 

Índice com chaves duplicadas

l 

Índices secundários

l 

Árvores B+

l 

Bitmaps

Indice denso e esparso

l Dados são mantidos ordenados por um campo

chave

l Indice denso

– Cada valor de chave de acesso aparece no índice;

– A entrada de um indice contém um ponteiro para a primeira entrada no arquivo com o valor da chave;

l Indice esparso

– Uma entrada no índice é criada somente para alguns valores

– Cada entrada contém o valor da chave e um ponteiro para um registro com o valor

Índices densos

10 20 30 40 50 60 70 80 10 20 30 40 50 60 70 80

•  Quantidade de blocos de índice inferior aos de dados •  Para achar uma chave K log2n , n blocos •  O índice pode eventualmente caber em memória

(20)

Índices esparsos

10 20 30 40 50 60 70 80 10 30 50 70

•  para achar K, procurar pelo maior valor X menor ou igual a K •  segue-se o ponteiro sequencialmente até achar a chave K • Volume do indice menor que o do índice denso

Pode-se Escolher uma chave

por bloco

Indice Multi-níveis

l Indices esparsos em arquivos muito grandes podem

tb. ocupar um grande numero de blocos

l Uma chave seria encontrada via pesquisa binária

em média log2 n, para n chaves no índice. – Para um índice de 100 blocos levaria aprox. 30 ms

l Logo para se reduzir esse tempo pode-se aplicar ao

índice a mesma estratégia criando níveis superiores que apontem para os blocos de índice

Índices multi-níveis

10 20 30 40 50 60 70 80 10 30 50 70

•  reduz o número de acesso às páginas de índices a sua altura • A cada nível busca a chave maior ou igual a K

90 100 90 110 130 150 10 90 170 259

(21)

Operações índices

l 

Exclusões e inserções precisam atualizar os

índices

l 

Exclusões - marca-se o registro como

excluído. Se for o único registro com a

chave, elimina-se a entrada no índice. Caso

seja um índice esparso e sua chave for

utilizada no índice, atualizar a chave do

índice;

Operações indice

l Inserção - procura-se a chave de indexação no

índice. Se existir e o índice for denso, insere-se o registro em sua posição na área de dados. Se o índice for esparso, procura-se a maior chave menor que a chave a ser inserida. Se houver espaço no bloco insere-se a chave. Caso não haja, um novo bloco é inserido e as chaves são particionadas em dois grupos.

l Inserções e exclusões em vários níveis aplicam o

mesmo conceito no nível de índices

Índices sobre valores não

chave

10 10 10 20 20 30 30 30 40 50 10 20 30 40 50 etc

•  a busca sobre o nível de índice se passa da mesma forma

(22)

Índices sobre valores não

ordenados

30 10 50 20 40 30 50 30 10 20 10 10 20 20 30 30 30 40 50 50

Árvore B+

l 

Uma estrutura mais geral para aceder por

meio de um índice

– Mantém o numero de níveis em função da

quantidade de chaves de indexação

– A arvore se mantém balanceada, I.e. todos as

chaves distam igualmente da raiz

– A distância entre a raiz e qualquer nó folha é

constante e igual a (logkn +1), onde K é o número

de chaves por bloco e n é o número de chaves

Estrutura

chaves ponteiros Raiz folha Intermediario K chaves

(23)

Regras para árvore B+

l  A raiz contem um ou mais ponteiros;

–  P1 aponta para a chave menores que K; –  P2 aponta para chaves maiores ou iguais a K; l  Cada nó, fora a raiz, tem entre e K chaves l  Nos nós folhas (indice), o último ponteiro aponta para o bloco

folha com os valores de chaves mais altas

l  Nos nós internos com {P1, P2,.., Pn} ponteiros haverá n-1

chaves:

–  P1 aponta para chaves menores que K1 –  P2 aponta para valores entre [k1 e k2) –  Pn aponta para valores maiores que K n-1 l  Todas as chaves aparecem no nível folha;

(K +1) / 2 !" #$

Nó interno, k=3

57 81 95 chaves <57 57 ≤ chaves <81 81 ≤ chaves <95 chaves ≥95

Nó folha, k=3

57 81 95 chaves =57 chave =81 chave =95

Ponteiro p/ proximo bloco folha 97 100 110

•  ponteiros apontam para a pagina de dados contendo a chave procurada • Último ponteiro aponta para o próximo bloco

(24)

Exemplo

899-46-2035 177-32-1776 213-46-8915 238-95-7766 409-56-7008 756-30-7391 341-22-1782 427-34-6542 431-67-9874 Raiz

Nivel Intermediário Nivel folha

109-56-7008 699-46-2035 238-95-7766 787-45-4322 … … … … … … 238-95-7766 … … … … 787-45-4322 756-30-7391 431-67-9874 427-34-6542 409-56-7008 341-22-1782 267-41-2394 177-32-1776 213-46-8915 267-41-2394 K=3 341-22-1782 109-56-7008 431-67-9874 109-56-7008 … … 109-56-7008

Inserção

l Buscar nó folha onde a chave deve ser inserida;

l Se há espaço, a chave é inserida

l Se não há espaço

– Cria um novo nó a direita

– Movimenta as últimas chaves sobre o novo nó;

– As primeiras se mantém no nó original

– A menor chave do nó recém criado sobe ao nível superior. Se o nó é o nível folha, uma cópia da chave se mantem para apontar aos dados

(K +1) / 2 !" #$ k / 2 !" #$

Indice - inserção

5 10 50 25 K=3 <5 5≤ <10 10≤ <50 ≥50 5 10 50 25 split <5 5≤ <10 10<25 ≤ 25≤ <50 ≥50 <25 ≥25 Nivel > 1 25

(25)

Indice –insert, split nivel

1 10 50 25 60 65 80 70 68 90 93 160 K=4 35 100 150 170 180 25 60 70 93

Indice –inseção, split nível

1 10 50 25 60 65 80 70 68 90 93 160 K=4 35 100 150 170 180 Spilt nó

Index - split nível

1 10 25 60 65 35 50 68 80 90 100 150 160 93 70 170 180 Split raiz

•  o split leva a menor chave à direita ao nivel superior « 170 » 160 93 70 60 25

(26)

Indice - split raiz

1 10 25 60 65 35 50 68 80 90 100 150 160 70 170 180 93 25 60 70 93

Indice – Fator de

Preenchimento (Fillfactor)

l Permite fixar uma porcentagem de cada página que

deve manter-se livre durante a carga inicial (criação do índice);

l Deixe espaço para inserções futuras;

l Reduz a quantidade de splits;

1 10 35 50 65 68 80 90 100 150 170 180

Todas as páginas mantêm 50 % de espaço livre (apenas como ilustração)

Cálculo do espaço de um

índice

l  Tamanho da chave (tc)

– Soma de seus tamanhos

l  Tamanho dos atributos componentes do índice (tbi): l tc + 4 bytes para ponteiro

l  Tamanho do bloco (tb)

l Tb=espaço total - espaço de preenchimento

l  Total de entradas por bloco (teb):

l Teb=tb / tbi

l  Número de blocos folha (nbf):

l Nbf=Total de tuplas /teb

l  Número de blocos nível folha-1

l Corresponde ao número de blocos necessários para

armazenar os ponteiros aos blocos folha:

l Nbnf-1= (nbf * 4 + nbf*tc) / tb

(27)

DDL - Criação de índice

•  Create {unique,nonunique} index

nomindex on nomtableau (col1,col2,...)

[with fillfactor = n]

•  Drop index nomindex

Projeto Físico cont.

Índices - Clustered

l  Índices clustered mantém as tuplas ordenadas segundo a chave de ordenação do próprio índice. As tuplas de dados são armazenadas no nível folha da árvore B+.

– Índices clustered otimizam acessos do tipo sequencial-indexado, por ex: funcionários cm salário > 1.500,00, alunos com matrículas de 2009 em diante. Transações de inserção concorrentes fora da sequência da chave são favorecidas por alocação distribuída; – A criação de um índice cluster em tabela populada requer o

espaço livre de 1 vez e um terço o tamanho da tabela; – Só pode haver 1 índice cluster por tabela; – chaves primárias criam, por default , índices clustered

(28)

Índices - Não Clustered

l  Estruturas tradicionais de índices em árvores B+. Os dados são armazenados em uma seqüência de páginas desassociadas do índice.

–  As inserções ocorrem sempre na última página, podendo acarretar em concentração de acesso e bloqueios por transações com concorrência de inserção.

–  O nível folha da árvore B+ contém páginas onde cada ocorrência contém uma chave e um ponteiro para a página onde a tupla correspondente encontra-se armazenada;

–  O nível folha pode ser utilizado em consultas que procuram pela existência de um conjunto de chaves, ou pelo somatório de tuplas, ou ainda para atender a consultas do tipo não igual, uma vez que neste nível aparecem todas as chaves existentes;

–  Ideal para consultas em ordem aleatória, como por exemplo: joins, consultas pontuais.

Índices (comando)

•  Create {unique,nonunique} {clustered,nonclustered} index nomeíndice on nometabela (col1,col2,...)

[with fillfactor = n]

Outras estruturas

l 

Além da estrutura em árvore B+ outras

estruturas de indexação favorecem o

acesso a tipos de dados particulares.

(29)

Tabelas Hash em

armazenamento secundário

l 

Tabelas hash distribuem chaves por

depósitos através de uma função de

mapeamento.

– Uma função de hashing pode calcular para cada

chave o resto de chave/|depositos|

l 

Assim como em memória, a cada chave é

associado um depósito (bucket).

l 

Em cada depósito colocam-se as chaves

com mesmo valor de hashing

Exemplo de hash

Bloco=4

Registro/bloco=2

a f d e m c

0

1

2

3

chave

F

h

(f) = 0

F

h

(d) = 0

F

h

(m) = 2

Tabela Hash

l Acesso direto – apenas por igualdade de valor

de chave.

l Acesso sequencial – varre os blocos da tabela.

l Cada depósito é armazenado como arquivo;

– Sistema guarda mapeamento entre id do depósito e

arquivo em disco;

l A cada instante um depósito é lido para

(30)

Bitmap

l  Estrutura de bits mapeando valores para ocorrência

em registros (tuplas)

l  Para um dado atributo att, criam-se n vetores um

para cada valor que att possui, todos de tamanho m;

l  um bit em um vetor esta ligado se a tupla a que

corresponde tem o valor do bitmap.

l  Eficientes em colunas com baixa cardinalidade, ou

seja baixo número de valores distintos. Por exemplo, Sexo.

l  O “XOR” entre os bitmaps de uma coluna é ∅ –  Pois cada coluna corresponde a um valor distinto;

Bitmap: exemplo

0: linha não atende predicado 1: linha atende predicado Sexo:

M: 110011000101. . . F: 001100111010. . .

– No exemplo acima:

l M aparece nas tuplas {1,2,5,6,10,12…}

l F aparece nas tuplas {3,4,7,11,..}

Bitmap

l 

Eficiente na resolução de expressões

conjuntivas sobre diversos atributos

indexados.

(31)

Índice Bitmap

(consultando)

Classif_idade 18 – 22 A 23 – 27 B 28 – 33 C 34 - 40 D .... Nível de renda 1000 – 15000 A 15001 – 20000 B 20001 – 30000 C .... Nível educacional 1o grau – A 2o grau – B 3o grau – C .... Select ... from participante

where classif_idade = ‘B’ and nivel_renda = ‘A’ and nivel_educacional = ‘C’ C(B): 110011001101 R(A): 001100111010 E(C): 100100111000 _______________ XOR: 000000001000

Índices Bitmap

l Podem ser permanentes, criados pelos usuários

l Podem ser criados dinamicamente pelo SGBD durante a

execução de uma consulta.

l Eficientes quando cada um dos predicados no

SQL é pouco restritivos:

select * from tabela_censo where sexo = ‘F’ and

estado = ‘MG’ and estado_civil = ‘S’

Índices Bitmap

restrições

l 

Não recomendável para transações de

atualização pois atualização dos vetores é

lenta.

l 

Não pode ser declarado como único (não

(32)

Desnormalização

Desnormalização

controlada

l Objetivo

– evitar custo de junções e agregação sobre dados com alta taxa de acesso;

l Benefício

– ganho de tempo para aplicações de consultas; – melhora no desempenho geral do sistema

l Problemas

– redundância

– aumento no tempo de txns de atualização

Técnicas de

desnormalização

l 

Adicionar colunas redundantes

l 

adicionar colunas derivadas

l 

congregar tabelas

l 

duplicar tabelas

(33)

Adicionar coluna

redundante

Titulo_autor Autor Id_titulo Id_autor Id_autor Nome

Titulo_autor Autor Id_titulo Id_autor Nome Id_autor Nome

•  Elimina Joins • exige manutenção de redundância • requer + espaço em disco

Tratamento para

atualização

l 

Gatilho (

trigger

) associado à tabela autor

– Se modifica valores da coluna Nome a

atualização é automaticamente e sincronamente realizada em Título-Autor

l 

autorização sobre coluna impede

atualização de

Nome

em

Titulo-Autor.

Adicionar colunas

derivadas

Aluno (….CR…)

HistóricoAluno (….nota…)

•  Elimina em tempo de execução: - joins

- agregações e cômputos

•  Requer manutenção de redundância •  Consome mais espaço

CR é derivado das notas do aluno.

•  Cálculo do CR é armazenado na tabela

(34)

Congregar tabelas

Pessoa (….) PessoaJurídica (…. …) Cliente (….) •  Elimina junções •  Requer manutenção de consistência •  Implementação:

Visão materializada

Particionamentos

Horizontal

Particionamento

(35)

Desnormalização -

implementando

l 

Trigger ou stored procedure?

– Depende da necessidade de atualização da

informação:

l trigger imediato, porém aumenta o tempo da transação OLTP;

l SP pode ser uma melhor opção para dados sem exigência de atualização instantânea;

l 

Visão materializada

Visão de dados

l 

O modelo lógico pode ser acrescido de

visões:

– Expressões relacionais sobre o modelo lógico

– Fornecem uma relação virtual que pode ser mais

favorável à uma aplicação

– Create view v as < expressão de SQL >

Visão Materializada

l Visões podem ter seu conteúdo materializado em

disco;

l Atualizações nas tabelas componentes da visão são,

se possível, refletida no conteúdo da visão.

l Bastante utilizada em:

– carga de sistemas remotos;

– computação móvel; – desnormalização;

(36)

Uso de visões

materializadas em

consultas

Usuário envia consulta Reescrita de consulta Geração de plano Geração de plano Comparação planos execução

Uso de visões

materializadas

l 

São usadas implicitamente em consultas de

usuários. Consultas referenciando tabelas de

base da visão podem ser reescritas para que

façam uso de visões materializadas;

l 

podem também ser utilizadas explicitamente

em consultas;

l 

incluem junções, agrupamentos e funções de

agregação.

Criando uma visão

materializada

l  CREATE MATERIALIZED VIEW store_sales_mv

PCTFREE 0 TABLESPACE mviews

STORAGE (INITIAL 16k NEXT 16k PCTINCREASE 0) PARALLEL

BUILD DEFERRED REFRESH COMPLETE ENABLE QUERY REWRITE

AS SELECT s.store_name, SUM(dollar_sales) AS sum_dollar_sales FROM store s, fact f WHERE f.store_key = s.store_key GROUP BY s.store_name;

(37)

l  CREATE MATERIALIZED VIEW store_sales_mv

PCTFREE 0 TABLESPACE mviews

STORAGE (initial 16k next 16k pctincrease 0) BUILD DEFERRED

REFRESH COMPLETE ON DEMAND ENABLE QUERY REWRITE

AS SELECT s.store_name, SUM(dollar_sales) AS sum_dollar_sales FROM store s, fact f WHERE f.store_key = s.store_key GROUP BY s.store_name;

l  CREATE MATERIALIZED VIEW store_avgcnt_mv

PCTFREE 0 TABLESPACE mviews

STORAGE (INITIAL 16k NEXT 16k PCTINCREASE 0) BUILD IMMEDIATE REFRESH COMPLETE ENABLE QUERY REWRITE

AS SELECT store_name, AVG(unit_sales) AS avgcnt_unit_sales, COUNT(DISTINCT(f.time_key)) AS count_days FROM store s, fact f, time t WHERE s.store_key = f.store_key AND f.time_key = t.time_key GROUP BY store_name,t.time_key;

Visão materializada com

log

l  CREATE MATERIALIZEDVIEWlog on fact with rowid (store_key, time_key, dollar_sales, unit_sales) including new values;

l  CREATE MATERIALIZED VIEW sum_sales

PARALLEL BUILD IMMEDIATE REFRESH FAST ON COMMIT

AS SELECT f.store_key, f.time_key, COUNT(*) AS count_grp, SUM(f.dollar_sales) AS sum_dollar_sales, COUNT(f.dollar_sales) AS count_dollar_sales, SUM(f.unit_sales) AS sum_unit_sales, COUNT(f.unit_sales) AS count_unit_sales

FROM fact f

(38)

Autorizações

l 

Create materialized view

l 

query rewrite

Particionamento

CREATE TABLE sales

( invoice_no NUMBER, sale_year INT NOT NULL, sale_month INT NOT NULL, sale_day INT NOT NULL )

PARTITION BY RANGE (sale_year, sale_month, sale_day) ( PARTITION sales_q1 VALUES LESS THAN (1998, 04, 01) TABLESPACE tsa,

PARTITION sales_q2 VALUES LESS THAN (1998, 07, 01) TABLESPACE tsb,

PARTITION sales_q3 VALUES LESS THAN (1998, 10, 01) TABLESPACE tsc,

PARTITION sales_q4 VALUES LESS THAN (1999, 01, 01) TABLESPACE tsd );

Particionamento

l CREATE TABLE scubagear (...)

STORAGE (INITIAL 10k) PARTITION BY HASH (id) PARTITIONS 16

Referências

Documentos relacionados

Nessa situação temos claramente a relação de tecnovívio apresentado por Dubatti (2012) operando, visto que nessa experiência ambos os atores tra- çam um diálogo que não se dá

Os maiores coeficientes da razão área/perímetro são das edificações Kanimbambo (12,75) e Barão do Rio Branco (10,22) ou seja possuem uma maior área por unidade de

5) “Estado da arte” do desenvolvimento local sertaginense. “A Sertã continua a ser pequenina e com pouca população. O setor turístico tem vindo a melhorar e temos

Neste estudo foram estipulados os seguintes objec- tivos: (a) identifi car as dimensões do desenvolvimento vocacional (convicção vocacional, cooperação vocacio- nal,

Foi membro da Comissão Instaladora do Instituto Universitário de Évora e viria a exercer muitos outros cargos de relevo na Universidade de Évora, nomeadamente, o de Pró-reitor (1976-

Por outro lado, é necessário ressaltar que o comportamento dos custos (quer sejam Custos Fixos ou Custos Variáveis) pode apresentar alterações quando considerados os diversos

A presente revisão bibliográfica abordará polímeros molecularmente impressos, onde aprofundamos os processos de obtenção desses materiais através dos métodos de

Os doentes paliativos idosos que permanecem nas instituições privadas são encaminhados pelos hospitais em que estavam ou internados pelos próprios familiares