Weighted Vertex Collections e SciDB
-
Upload
jose-augusto-sapienza-ramos -
Category
Science
-
view
158 -
download
0
Transcript of Weighted Vertex Collections e SciDB
Weighted Vertex Collections e SciDB
José Augusto Sapienza Ramos08/09/2015
Trabalho de Banco de Dados Não Convencionais
Engenharia de Sistemas e Computação da COPPE/UFRJ
• 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
• Quais são os pontos contidos nos polígonos?
Spatial Join
• Quais são os pontos contidos nos polígonos?
Spatial Join
• Interseção entre os mapas
Map Overlay
• Resultado:
Map Overlay
• Spatial join produto cartesiano;
• Predicado espacial pode ser custoso;
• Processamento em etapas;
Estratégia de processamento
• 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
Exemplo de campo escalar contínuo
• Partição do plano, – Cada polígono ou classe de polígono associado a
um valor escalar diferente:
Campo escalar com polígonos
• Definido por– Peso w – Ângulo θ
• Soma +w a uma região do plano– Região = cone c.
Vértice Ponderado
Exemplo – Região poligonal
0
S:
Exemplo – Região poligonal
S:
v1 : +w
+W
θ
v1 : +w
+W
v2 : -w
-W+W = 0
θ
Exemplo – Região poligonal
S:
+W
Exemplo – Região poligonal
S:
v1 : +w v2 : -w
-W+W = 0
v3 : -w
-W+W = 0 -W+W-W = -W
+W
S:
v1 : +w v2 : -w
-W+W = 0
v3 : -w
-W+W = 0
-W+W-W= -W
v4 : +w
Exemplo – Região poligonal
-W+W-W+W= 0
+W
S:
v1 : +w v2 : -w
-W+W = 0
v3 : -w
-W+W = 0
-W+W-W+W= 0
v4 : +w
Exemplo – Região poligonal
-W+W-W+W= 0v5 : +w
-W+W-W+W+W= +W
+W
S:
v1 : +w v2 : -w
-W+W = 0
v3 : -w
-W+W = 0
-W+W-W+W= 0
v4 : +w
Exemplo – Região poligonal
-W+W-W+W= 0v5 : +w
-W+W-W+W+W-W= 0
v6 : -w
• S3 = S1 + S2 C3 = C1 U C2;
• Reordenar C3 ;
• Avaliar a forma canônica em C3.
Operação Adicionar/Add
Adição/Add
1 1
S1 S2
1 12
S1 + S2
• St = f(S) – St representado por Ct
• Permite realizar Map Overlay;• Algoritmo baseado em scan• Pré-condição: f(0) = 0
Operação Scalar Transformation/Transformação Escalar
Scalar Transformation/Transformação Escalar
1 12
S1 + S2
1
Interseção
Scalar Transformation/Transformação Escalar
1 12
S1 + S2
1
União/Dissolve
Scalar Transformation/Transformação Escalar
1 23
S1 + 2S2
1
Diferença A-B
• Joga tudo em memória...
• Limitado quando estamos interessados só em uma área restrita do dado geográfico.
Há uma implementação do WVC
• 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
Solução com SciDB
• 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
Arquitetura Básica
A aplicação se comunica apenas com o coordenador...
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.
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
Valorinicial Valor final (use * para auto-ajuste)
Tamanho do chunkSobreposição do chunk
Chunking...
Exemplo simples:CREATE ARRAY A1 <att1: double, att2: int64> [x=0:100,25,0 y=0:100,10,0];
Chunk e array esparso
• O chunk é representado como um Bitmap;– Vazios não são representados;
• Usa-se compactação RLE – eficiente.
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...
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;
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);
• Implementar operação Add do WVC com transformação escalar:S3 = S1 + α.S2WVC3 = WVC1 + α.WVC2;
• Envolve essencialmente merge e sort de coleções de vértices ponderados (WVC)!
O que fiz neste trabalho?
• 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?
create array WVC1 <x: double, y: double, theta: double, w: int32>[i1=0:*,10,0];
create array WVC2 <x: double, y: double, theta: double, w: int32>[i2=0:*,10,0];
create temp array WVC3 <x: double, y: double, theta: double, w: int32>[i3=0:*,10,0];
Lembrando: WVC3 = WVC1 + α.WVC2
Criando os arrays para o Add
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
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 AQLinsert(redimension(substitute(cross_join(WVC2,aggregate(WVC1,count(*))),ze
ros,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
• 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
• 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
Obrigado!
José Augusto Sapienza Ramos08/09/2015
Disciplina de Banco de Dados Não Convencionais
Engenharia de Sistemas e Computação da COPPE/UFRJ