4. SONUÇ TARTIŞMA VE ÖNERİLER
4.5. Sınırlılıklar
4.6.2. Uygulamaya yönelik öneriler
A estrutura VAGUEGEOM (Algoritmo 1) pode possuir tamanho vari´avel, uma vez que a quantidade de pontos contido nas geometrias n˜ao ´e fixo e dependente da aplicac¸˜ao. Com isso, existe a necessidade de um processo de serializac¸˜ao, o qual transforma um objeto espacial vago em um fluxo cont´ınuo de dados (data stream) para ser inserido no PostgreSQL. Dessa forma a estrutura VAGUEGEOMSERIALIZED, mostrada no Algoritmo 2, ´e definida para armazenar de forma serializada os objetos espaciais vagos, al´em de ser manipulada diretamente pelo n´ucleo do SGBD PostgreSQL. Para isso, ´e necess´ario seguir as especificac¸˜oes do SGBD PostgreSQL descritas na Sec¸˜ao 2.2 do Cap´ıtulo 2. A estrutura VAGUEGEOMSERIALIZED ´e detalhada como segue:
4.2 Especificac¸˜ao dos Tipos de Dados de VagueGeometry 59
• O elemento size armazena em um inteiro de 4 bytes, o tamanho do objeto instanciado em
bytes, o qual ´e requerido pelo PostgreSQL e manipulado somente por ele;
• O elemento srid armazena o SRID dos objetos crisp em um vetor de caracteres (i.e., 3
bytes) em forma serializada utilizando aritm´etica de ponteiros;
• O elemento flags se refere ao mesmo elemento flags da estrutura VAGUEGEOM (Algo- ritmo 1);
• O elemento data ´e um vetor que armazena de forma serializada os objetos do n´ucleo (kernel) e conjectura (conjecture), os quais s˜ao objetos do PostGIS;
Algoritmo 2 Estrutura de dados para armazenar um objeto VagueGeometry no SGBD Post- greSQL 1: typedef struct { 2: uint32 t size; 3: uint8 t srid[3]; 4: uint8 t flags; 5: uint8 t data[1]; 6: } VAGUEGEOMSERIALIZED;
A ordem da serializac¸˜ao de um objeto VAGUEGEOMSERIALIZED (Algoritmo 2) ´e um fator importante, uma vez que ap´os recuperar um objeto armazenado no PostgreSQL, o pro- cesso inverso deve ser feito. Ou seja, deve ser poss´ıvel a transformac¸˜ao do fluxo cont´ınuo de
bytes em objetos mantidos em mem´oria principal (estrutura VAGUEGEOM) para realizar as
operac¸˜oes de alto n´ıvel. Outro fator importante ´e o alinhamento dos dados e se necess´ario, a inserc¸˜ao de preenchimentos (padding) para satisfazer a condic¸˜ao do alinhamento. O alinha- mento adotado pelo PostGIS, bem como pelo TAD VagueGeometry, ´e de 8 bytes. Isso significa que o tamanho total do objeto deve ser m´ultiplo por 8 e que com isso, ´e poss´ıvel recuperar, a cada 8 bytes, partes de um objeto acessando diretamente sua posic¸˜ao no vetor serializado. Ou seja, as coordenadas x e y de um ponto podem ser acessadas sem a necessidade de um processo custoso de transformac¸˜ao. Os trˆes primeiros elementos da estrutura VAGUEGEOMSERIALI- ZED, os quais s˜ao o size, srid e flags, tem um tamanho total de 8 bytes, assim, satisfazendo o alinhamento imposto. Por outro lado, o alinhamento deve tamb´em ser mantido pelo elemento
data, que pode ter tamanho vari´avel.
Uma vez que um objeto VagueGeometry ´e composto por dois objetos do PostGIS (Algo- ritmo 1), a serializac¸˜ao utilizada pelo TAD VagueGeometry reutiliza a serializac¸˜ao de objetos espaciais crisp provido pelo PostGIS. Esta reutilizac¸˜ao ´e para serializar o n´ucleo e a conjectura
4.2 Especificac¸˜ao dos Tipos de Dados de VagueGeometry 60 Tabela 4.1: Ordem de serializac¸˜ao de um objeto espacial crisp utilizada pelo PostGIS.
Tipo de Dado Ordem de Serializac¸˜ao
Ponto Crisp
<tipo de dado POINT>
<n´umero de pontos (0 para vazio e 1 caso contr´ario)> [coordenada x]
[coordenada y]
Linha Crisp
<tipo de dado LINESTRING>
<n´umero de pontos (0 para vazio e 1 caso contr´ario)> para cada ponto i da linha:
[coordenada xi]
[coordenada yi]
Pol´ıgono Crisp
<tipo de dado POLYGON>
<n´umero de an´eis (0 para vazio e 1 caso contr´ario)> para cada anel j do pol´ıgono:
<n´umero de pontos do anel j> se o n´umero de an´eis ´e impar:
<padding>
para cada anel j do pol´ıgono e cada ponto i de j: [coordenada xji]
[coordenada yji]
Objeto Espacial Crisp Complexo
<tipo de dado do objeto espacial complexo> <n´umero de componentes
(0 para vazio e 1 caso contr´ario)>
para cada componente i do objeto espacial complexo: [serializac¸˜ao de i]
de um objeto espacial vago. Na Tabela 4.1 ´e mostrado a ordem de serializac¸˜ao de objetos espa- ciais crisp realizada pelo PostGIS. A notac¸˜ao<> ´e utilizada para representar que o elemento possu´ı 4 bytes, enquanto a notac¸˜ao[ ] representa que o elemento possu´ı um m´ultiplo de 8 bytes. Cada tipo de dado tem sua serializac¸˜ao espec´ıfica o qual pode variar em n´umero de coordena- das. ´E importante notar que para o tipo pol´ıgono ´e necess´ario um padding de 4 bytes uma vez que o n´umero de an´eis (i.e. a borda externa somado ao n´umero de buracos) pode quebrar o alinhamento. Al´em disso, o processo de serializac¸˜ao para um objeto espacial crisp complexo ´e o processo de serializac¸˜ao de cada componente do objeto, uma vez que um objeto espacial crisp complexo ´e composto por v´arios objetos espaciais crisp simples de mesmo tipo. Por exemplo, o processo de serializac¸˜ao de um multipol´ıgono, serializa cada sub pol´ıgono, uma vez que um multipol´ıgono ´e composto por v´arios pol´ıgonos simples.
A ordem de serializac¸˜ao do elemento data da estrutura VAGUEGEOMSERIALIZED ´e detalhada na Tabela 4.2. Existem quatro casos de serializac¸˜ao de acordo com a existˆencia ou n˜ao de n´ucleo e conjectura: (i) quando o objeto espacial vago ´e vazio (ou seja, n˜ao tem n´ucleo
4.2 Especificac¸˜ao dos Tipos de Dados de VagueGeometry 61 Tabela 4.2: Ordem de serializac¸˜ao de um objeto espacial vago do TAD VagueGeometry.
Caso Ordem de Serializac¸˜ao
Objeto espacial vago vazio <tipo de dado do objeto espacial vago> <padding>
Existˆencia somente do n´ucleo
hflag do PostGIS referente ao n´ucleoi hpaddingi
hpaddingi hpaddingi <padding>
[serializac¸˜ao do n´ucleo]
Existˆencia somente da conjectura
hflag do PostGIS referente a conjecturai hpaddingi
hpaddingi hpaddingi <padding>
[serializac¸˜ao da conjectura]
Existˆencia do n´ucleo e da conjectura
<tamanho em bytes do n´ucleo> <padding>
hflag do PostGIS referente ao n´ucleoi hpaddingi
hpaddingi hpaddingi <padding>
[serializac¸˜ao do n´ucleo]
hflag do PostGIS referente a conjecturai hpaddingi
hpaddingi hpaddingi <padding>
[serializac¸˜ao da conjectura]
e conjectura definidos); (ii) o objeto espacial vago tem somente o n´ucleo; (iii) o objeto espacial vago tem somente a conjectura; e, (iv) o objeto espacial vago tem um n´ucleo e uma conjectura. Para o caso (iv) tamb´em ´e armazenado o tamanho em bytes do n´ucleo para que seja poss´ıvel o acesso da conjectura de forma mais r´apida.
Em geral, ´e reutilizada a ordem de serializac¸˜ao apresentada na Tabela 4.1 para a serializac¸˜ao do n´ucleo e da conjectura. Dessa forma, a ordem de serializac¸˜ao pode variar de acordo com o tipo de dado do objeto espacial crisp. Por exemplo, a serializac¸˜ao de um ponto vago que cont´em n´ucleo e conjectura ir´a reutilizar a serializac¸˜ao do ponto crisp da Tabela 4.1. Adicionalmente, a notac¸˜aohi representa um elemento de 1 byte. A flag do PostGIS, que ´e tamb´em armazenada junto ao n´ucleo ou conjectura, representa informac¸˜oes internas do objeto espacial crisp, tal como a sua dimensionalidade (bidimensional ou tridimensional) e a presenc¸a ou n˜ao de MBR.
4.2 Especificac¸˜ao dos Tipos de Dados de VagueGeometry 62
Por fim, para manter o alinhamento de 8 bytes, ´e necess´ario adicionar padding em todos os casos.