Árvores B

43
´ Arvores B ´ AtilaCamurc¸a Samir Coutinho Tunay Ara´ ujo 27 de junho de 2013

description

Apresentação sobre árvores B com exemplo usando PostgreSQL

Transcript of Árvores B

Page 1: Árvores B

Arvores B

Atila CamurcaSamir CoutinhoTunay Araujo

27 de junho de 2013

Page 2: Árvores B

Sumary

1 Introducao

2 Motivacao

3 Definicao

4 Operacoes Basicas

5 Exemplo

6 Utilizacao

PostgreSQL

7 Referencias

Page 3: Árvores B

Introducao

Sabemos que em relacao a memoria de computador existe uma hierarquiade velocidade de acesso, memorias cache e de registro sao mais velozesque memorias RAM, que sao mais velozes que HDs.

Podemos utilizar algorıtmos que especificamente sejam rapidos ao acessarHDs.

Page 4: Árvores B

Motivacao

Quando os dados sao muito grandes para caber na memoria principal,eles devem se expandir para o disco. O acesso ao disco e muito custosoem comparacao com uma instrucao tıpica. O numero de acessos ao discovai preponderar o tempo de execucao. O objetivo das Arvores B e criaruma arvore de busca que ira minimizar os acessos ao disco.

Page 5: Árvores B

Definicao

Arvores B sao arvores de pesquisa balanceadas projetadasespecificamente para serem armazanadas em discos magneticos.

Medimos o desempenho pela quantidade de tempo de computacao queconsomem, mas tambem pela quantidade de acesso a disco que saorealizadas.

Page 6: Árvores B

Altura

O numero de acessos ao disco e proporcional a altura da Arvore B.O pior caso da altura de uma Arvore B e

h ≤ logtn + 1

2 ⇔ O(logt n)

Page 7: Árvores B

Operacoes Basicas

Sempre mantemos a raız na memoria principal, assim umDISK-READ da raız nunca sera necessario.Qualquer no passado como parametro ja deve ter sofrido umDISK-HEAD.Qualquer no deve ter mudado com um DISK-WRITE.

Page 8: Árvores B

Operacoes Basicas

O numero de execucao de um algoritmo de arvores B e determinado,principalmente, pelo numero de operacoes DISK-WRITE eDISK-READ.A quantidade de acessos ao disco e diretamente proporcional aofator de ramificacao.

Page 9: Árvores B

Operacoes Basicas

1. B-TREE-SEARCH2. B-TREE-INSERT3. B-TREE-CREATE4. B-TREE-DELETE

Page 10: Árvores B

B-TREE-CREATE

Para construir arvores B utilizamos B-TREE-CREATE para criar um noraiz vazio e depois chamamos B-TREE-INSERT para adicionar novaschaves. Ela exige O(1) operacoes de disco e tempo de CPU O(1).

Page 11: Árvores B

B-TREE-INSERT

O numero de acessos a disco de B-TREE-INSERT e O(h) poisapenas O(1) operacoes disk-read/write sao feitas entre duaschamadas consecutivas de B-TREE-INSERT-NONFULL.O tempo total de cpu e O(th) = O(t logt n).

Observacao

o split na raiz e o unico jeito de aumentar a altura da arvore B. Aocontrario das arvores binarias, o crescimento se da na raiz em vez dasfolhas.

Page 12: Árvores B

Insercao de elemento (split)

A insercao nas arvores B e relativamente mais complicada, pois,precisamos inserir a nova chave no no correto da arvore, sem violarsuas propriedades.Como procedemos se o no esta cheio?

Se estiver cheio deve separar (split) o no em torno do elementomediano, criando outros dois nos que nao violam as definicoes dearvore.O elemento mediano e promovido, passando a fazer parte do no paidaquele no.

Page 13: Árvores B

B-TREE-SPLIT-CHILD

A nova chave sempre e inserida em uma folha.A insercao e feita em um unico percurso na arvore, a partir da raizate uma das folhas.O procedimento B-TREE-SPLIT-CHILD e usado para garantir que arecursao nunca desca em um no cheio.

Page 14: Árvores B

B-TREE-INSERT-NONFULL

O codigo a seguir faz uso do procedimentoB-TREE-INSERT-NONFULL, que e responsavel pela insercao dachave em um no n nao cheio.B-TREE-INSERT-NONFULL, insere a chave k no no x, caso esteseja uma folha, caso contrario, procura o filho adequado e desce aele recursivamente ate encontrar a folha onde deve inserir k.

Page 15: Árvores B

Exemplo

Page 16: Árvores B

Exemplo

Page 17: Árvores B

Exemplo

Page 18: Árvores B

Exemplo

Page 19: Árvores B

Exemplo

Page 20: Árvores B

Exemplo

Page 21: Árvores B

Exemplo

Page 22: Árvores B

Exemplo

Page 23: Árvores B

Exemplo

Page 24: Árvores B

Exemplo

Page 25: Árvores B

Exemplo

Page 26: Árvores B

Exemplo

Page 27: Árvores B

Exemplo

Page 28: Árvores B

Exemplo

Page 29: Árvores B

Exemplo

Page 30: Árvores B

B-TREE-DELETE

Caso 1: envolve delecao da chave de uma folha. Restando t − 1chaves.Caso 2: se a chave k estiver no no x e x e um no interno.Caso 3: se a chave nao estiver presente no no interno x.

Page 31: Árvores B

Utilizacao

Muitos sistemas de bancos de dados usam arvores B ou variacoes dearvores B para armazenar informacoes.

Um deles e o PostgreSQL (http://www.postgresql.org/).

Page 32: Árvores B

PostgreSQL

PostgreSQL usa arvores B nos seus ındices (INDEX). Indices sao usadosprimariamente para aumentar a performance do banco de dados.

Alem de Arvores B o PostgreSQL oferece suporte a:

HASHGiST (Generalized Search Tree)SP-GiST (Space-Partitioned - Generalized Search Tree)GIN (Generalized Inverted Index)

Page 33: Árvores B

PostgreSQL

Arvores B sao melhor utilizadas quando um ındice involve comparacoescomo <, <=, =, >=, >

Page 34: Árvores B

ExemploPostgreSQL

CREATE TABLE not_indexed_table(

id integer NOT NULL)WITH (

OIDS=FALSE);ALTER TABLE not_indexed_table

OWNER TO postgres;

Page 35: Árvores B

ExemploPostgreSQL

CREATE TABLE indexed_table(

id integer NOT NULL,CONSTRAINT indexed_table_pkey PRIMARY KEY (id)

)WITH (

OIDS=FALSE);ALTER TABLE indexed_table

OWNER TO postgres;

Page 36: Árvores B

ExemploPostgreSQL

INSERT INTO not_indexed_table (id)SELECT GENERATE_SERIES(1, 100000);

INSERT INTO indexed_table (id)SELECT GENERATE_SERIES(1, 100000);

Page 37: Árvores B

ExemploPostgreSQL

EXPLAIN ANALYZE SELECT COUNT(*) FROM not_indexed_table;

-- saıdaAggregate (cost=1572.00..1572.01 rows=1 width=0)

(actual time=73.198..73.198 rows=1 loops=1)-> Seq Scan on not_indexed_table(cost=0.00..1336.20 rows=94320 width=0)(actual time=0.023..38.878 rows=100000 loops=1)

Total runtime: 73.239 ms

Page 38: Árvores B

ExemploPostgreSQL

EXPLAIN ANALYZE SELECT COUNT(*) FROM indexed_table;

-- saıdaAggregate (cost=1643.00..1643.01 rows=1 width=0)

(actual time=69.939..69.940 rows=1 loops=1)-> Seq Scan on indexed_table(cost=0.00..1393.00 rows=100000 width=0)(actual time=0.014..35.571 rows=100000 loops=1)

Total runtime: 69.974 ms

Page 39: Árvores B

ExemploPostgreSQL

EXPLAIN ANALYZE SELECT * FROM not_indexed_tableWHERE id < 12;

-- saıdaSeq Scan on not_indexed_table

(cost=0.00..1643.00 rows=10 width=4)(actual time=0.020..17.527 rows=11 loops=1)

Filter: (id < 12)Rows Removed by Filter: 99989

Total runtime: 17.555 ms

Page 40: Árvores B

ExemploPostgreSQL

EXPLAIN ANALYZE SELECT * FROM indexed_tableWHERE id < 12;

-- saıdaIndex Only Scan using indexed_table_pkey

on indexed_table(cost=0.00..8.45 rows=11 width=4)(actual time=0.022..0.028 rows=11 loops=1)

Index Cond: (id < 12)Heap Fetches: 11

Total runtime: 0.053 ms

Page 41: Árvores B

ExemploPostgreSQL

Tabela Tamanho

not indexed table 3168 kB

indexed table 4936 kB

Page 42: Árvores B

PostgreSQL

Da documentacao do PostgreSQL:

Adding a primary key will automatically create a unique btreeindex on the column or group of columns used in the primarykey.

Adicionando uma chave primaria ira automaticamente criar uma Arvore Bde ındice unico na coluna ou grupo de colunas usadas na chave primaria.

http://www.postgresql.org/docs/9.0/static/ddl-constraints.html

Page 43: Árvores B

Referencias

http://www.depesz.com/2010/09/09/why-is-my-index-not-being-used/

http://www.thegeekstuff.com/2009/05/15-advanced-postgresql-commands-with-examples/

http://ats.oka.nu/b-tree/b-tree.manual.html

http://www.postgresql.org/docs/9.0/static/ddl-constraints.html

T. Cormen, C. Leiserson, R. Rivest, C. Stein, Algoritmos - Teoria ePratica, 2002http://www.lcad.icmc.usp.br/˜nonato/ED/B_arvore/btree.htm

http://www.di.ufpb.br/lucidio/Btrees.pdf