Modelagem Ambiental + Modelagem de Dados Geográficos
Weighted Vertex Collections e SciDB
1. Weighted Vertex
Collections e SciDB
José Augusto Sapienza Ramos
08/09/2015
Trabalho de Banco de Dados Não Convencionais
Engenharia de Sistemas e Computação da COPPE/UFRJ
2. • Processamento de Map Overlay de forma
eficiente e por um novo caminho
– Avaliação de como a minha estrutura proposta
(WVC) pode se beneficiar do SciDB!
Pergunta principal
3. • Quais são os pontos contidos nos polígonos?
Spatial Join
4. • Quais são os pontos contidos nos polígonos?
Spatial Join
7. • Spatial join produto cartesiano;
• Predicado espacial pode ser custoso;
• Processamento em etapas;
Estratégia de processamento
8. • Campo escalar S em 2D;
– Dado um ponto p valor escalar S(p);
• Conjunto de vértices ponderados
– Variações no campo
– Representação de S.
Weighted Vertex Collection
25. • Joga tudo em memória...
• Limitado quando estamos interessados só em
uma área restrita do dado geográfico.
Há uma implementação do WVC
26. • Uma coleção ordenada nos WV (em scan
order) – converter, somar
• Manutenção da scanline na reconstrução do
campo escalar – eventos também ordenados
• O ponto é: ordenação e recuperação em
array!
Duas estrutura de dados e
processamentos básicos
28. • Modelagem de arrays multidimensionais com
array unidimensional;
• Cada matriz tem atributos e dimensões:
– Dimensões: definem a posição do array (ex. i,j);
– Atributos: atributos locados nas posições.
Algumas características do SciDB
30. Chunking...
• Pedaços do array são
distribuídos - função hash;
• Busca-se manter a
localidade dos chunks dentro dos nós;
• Há a possibildiade de replicação, mas apenas
para manter a disponibilidade.
31. Chunking...
Exemplo simples:
CREATE ARRAY A1
<att1: double,
att2: int64>
[x=0:100,25,0
y=0:100,10,0];
atributos
dimensões
nome do array
Valor
inicial Valor final (use * para auto-ajuste)
Tamanho do chunk
Sobreposição do chunk
33. Chunk e array esparso
• O chunk é representado como um Bitmap;
– Vazios não são representados;
• Usa-se compactação RLE – eficiente.
34. Chunk Overlap
• Repetir posições em chunks adjacentes é
recomendado para:
– Operações em janelas (filtro, médias móveis, ...)
– Detecção de features
– Aplicação de kernels e outras operações de
vizinhança...
35. Características das transações
• Garante ACID:
– Coordenador pede lock de todos os chunks do array e
faz rollback para um estado consistente, se houver
falha;
• Particionamento vertical do array;
– 1 chunk para cada atributo;
• Estratégia “no overwrite” - versionamento
– Alterações geram novas versões dos chunks e do
array;
36. Linguagens de manipulação
• AQL - Array Query Language:
INSERT INTO A1 SELECT att1, att2 FROM A2 WHERE att1 =
‘valor’;
SELECT count(*) INTO A3 FROM A1;
• AFL - Array Functional Language:
insert(filter(project(A2,att1,att2),att1=‘valor’)),A1);
store(aggregate(A1,count(*)),A3);
37. • Implementar operação Add do WVC com
transformação escalar:
S3 = S1 + α.S2
WVC3 = WVC1 + α.WVC2;
• Envolve essencialmente merge e sort de
coleções de vértices ponderados (WVC)!
O que fiz neste trabalho?
38. • Para os processamentos (sort, scan, ...) a
posição relativa de scan order é mais
importante:
create array WVC1
<x: double, y: double, theta: double, w: int32>
[i=0:*,50,0];
O que é atributo e o que é dimensão
para mim?
40. set lang AQL;
load WVC1 from '../../../wvc1.txt';
load WVC2 from '../../../wvc2.txt';
insert into WVC1 select * from
sort(WVC1,y,x,theta);
insert into WVC2 select * from
sort(WVC2,y,x,theta);
Carregando os vértices podenrados
41. insert into WVC3 select * from WVC1; '‘insere todos os elementos de
WVC1 em WVC3
create temp array T <x: double, y: double, theta: double, w: int32, i2:
int64, count: uint64>[p=0:*,100,0]; '''array temporario
set lang AFL; ''' por causa de bug, redimension nao funciona em AQL
insert(redimension(substitute(cross_join(WVC2,aggregate(WVC1,cou
nt(*))),zeros,count),T),T);
set lang AQL;
update T set w=pow(10,ceil(log10(count)))*w; '''atualizando
alpha*w;
set lang AFL;
insert(redimension(cast(sort(merge(redimension(apply(T,i3,i2+count)
,WVC3),WVC3),y,x,theta),WVC3),WVC3),WVC3);
remove(T); '''drop array T;
Realizando a operação Add
42. • Foi utilizado AQL e AFL, linguagens sem recursos
procedurais;
– Podemos utilizar um cliente Python ou R!
• A solução está em amadureciamento;
– Há bugs e nem todas as funções em AQL existem em
AFL e vice-versa;
– Muita necessidade de cast entre os resutados;
– A função sort não permite a passagem de uma função
de ordenamento;
– Considerações adicionais são necessárias para
robustez de operações com ponto flutuante.
Considerações
43. • A operação Add, que envolve essencialmente
sort, pode ser implementada se beneficiando
das vantagens de paralelismo e de acesso
parcial dos dados;
– É possível fazer window queries.
– Scalar transformation pode ser feita na aplicação.
• Creio que seja possível criar a operação Scalar
Transformation também;
– Pensar! Estrutura de operações de arrays difere
dos algoritmos tradicionais de scan (plane sweep)
Considerações
44. Obrigado!
José Augusto Sapienza Ramos
08/09/2015
Disciplina de Banco de Dados Não Convencionais
Engenharia de Sistemas e Computação da COPPE/UFRJ