AJAX – Algoritmo de
Junção Adaptativo para
eXecução em ambientes
móveis
Monografia
Eriko Werbet
Unifor-CNPq
Motivação






Computação Móvel
Bancos de Dados + Mobilidade
Mobilidade + Restrições = Atraso
Técnicas Convencionais são Ineficientes
Processamento de Consultas Adaptativo
Definição de Operadores Adaptativos
Objetivos


Implementar um algoritmo de junção capaz
de executar operações de junção de forma
eficiente, num ambiente com suporte à
mobilidade.
Este algoritmo deve adaptar-se
dinamicamente às restrições do ambiente.
Mobilidade e Bancos de Dados





Ambiente de
Computação Móvel
Redes ad hoc
Mobilidade Física e
Lógica (Agentes)
Desafios
Soluções
Bancos de Dados Móveis



Autônomos
Heterogêneos
Distribuídos
A Arquitetura AMDB




Acesso a Bancos de
Dados Móveis
Comunidade de
Bancos de Dados
Móveis
Interoperabilidade
Agentes Móveis x
Estáticos
O Agente Executor




Acesso aos Membros da CBDM
Consultas
Coordenador do Protocolo 2PC
Operações de Junção
O Algoritmo AJAX

Adaptive Join Algorithm
for mobile
environments
eXecution





Simetria
Pipelining
Buckets Dinâmicos
Comparação
Progressiva
Prevenção de Estouro
de Memória
Simetria


Tratar as fontes de dados de maneira
independente, por meio de multithreading.
Evitar o bloqueio ou atraso na execução da
junção.
Buckets Dinâmicos




Comparação de buckets com o mesmo
“endereço” hash, em tabelas opostas.
Buckets com tamanho variável implicam em
mais flexibilidade, pois não precisamos tratar
bucket overflow.
Buckets podem acumular mais tuplas antes
de iniciar o probing.Melhor adaptação à
Comparação Progressiva.
Baixo overhead de manipulação.
Pipelining



Suprimento de tuplas para
operadores mais altos na
hierarquia da consulta.
Recebimento de tuplas de
operadores mais baixos.
Padrão recursivo implica
em pseudo-paralelismo na
execução da consulta, ou
seja, diminuição no tempo
de resposta.
Comparação Progressiva



Comparação cíclica dos
buckets.
Cada par de buckets é
comparado e somente o
conteúdo numa iteração “i”
é considerado.Tuplas
subseqüentes serão
comparadas numa iteração
“i + 1”.
Comparação e Hashing
contínuo das tuplas.
Last Probe Remembrance



Cada tupla do bucket
Alfa “lembra” a última
tupla do bucket Beta
(bucket oposto) que foi
comparada com ela.
Evita Duplicatas.
Evita Comparações
Desnecessárias.
Prevenção de Estouro de
Memória



A granularidade observada passa do nível de
bucket para o nível do sistema
computacional.
Monitoramento da memória do sistema.
Escolha de um ou vários pares de buckets
para descarregamento em disco.
Fases de Execução


Primeira Fase
Fase de execução
normal do AJAX



Segunda Fase
Executada quando
ocorre EOF ou quando
as fontes estão em
retardo.
O recebimento
continua, mas a
comparação passa a
usar buckets em disco.
AJAX em Pseudocódigo
1 thread de monitoramento EPSILON é iniciada em background;
2 thread de acesso à fonte de dados ALFA é iniciada; //simetria
3 se (operador depende de resultado parcial inferior) então
4
fonte BETA passa a ser o resultado parcial do operador inferior;
5 thread de acesso à fonte de dados BETA é iniciada;
6 iniciar geração da tabela hash para ambas as fontes; //dynamic bucket hashing
7 enquanto(não terminar o processamento) faça { //progressive probing
8 pegar próximo bucketAlfa;
9 localizar próximo bucketBeta pelo hashcode do bucketAlfa;
10 se (houver tuplas novas no bucketAlfa ou no bucketBeta) então {
11
se (a.UltimoProbe < b.Indice) então { //”a” é tupla de Alfa e “b” de Beta
12
adicionar o par (a, b) no resultado;
13
atualizar a.UltimoProbe; //last probe remembrance
14
se (existir operador superior na consulta) então
15
enviar tuplas parciais para o operador superior; //pipelining
16
}
17
se (EPSILON detectar a iminência de memory overflow) então { //overflow
18
escolher par de buckets que ocupa maior espaço de memória;
19
descarregar buckets escolhidos em disco;
20
}
21 se (as fontes atrasarem e houver buckets em disco) então { //segunda fase
22
comparar tuplas em disco [Alfa] com tuplas em disco [Beta];
23
comparar tuplas em disco [Alfa] com tuplas em memória [Beta];
24
comparar tuplas em memória [Alfa] com tuplas em disco [Beta];
25
comparar tuplas em memória [Alfa] com tuplas em memória [Beta];
26 }
27 }
28 }
Implementação do Protótipo




Linguagem Java
Threads simples
Função hash embutida etc
AMDB e Aglets
Estruturas de Dados




LinkedList
Tupla
Bucket
TabelaHash
Classes de Suporte




Ajax
FonteDados
Timer
TimerTask
Detalhes de Implementação





Desafios
Multithreading
Sincronização
Persistência
HashTable de Java




A Tabela Hash do AJAX
Encadeada
Buckets Dinâmicos
Deque (Deck)
Conclusão




AJAX garante:
Produção incremental de tuplas-resultado
Continuidade da execução da consulta
mesmo com fontes bloqueadas
Reação proativa em caso de estouro de
memória
Trabalhos Futuros




Testes comparativos
Aperfeiçoamento da Tabela Hash do AJAX
Definição de uma nova função hash
Pesquisa de estruturas de dados mais
adaptadas ao contexto do AJAX
Agradecimentos




CNPq
Angelo Brayner, Dr-Ing.
José de Aguiar, M.Sc.
A todos que tornaram este projeto possível!
Download

AJAX