• Sonuç bulunamadı

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.