Array DBMS - Array DBMS

Os sistemas de gerenciamento de banco de dados de array ( SGBDs de array ) fornecem serviços de banco de dados especificamente para arrays (também chamados de dados raster ), ou seja: coleções homogêneas de itens de dados (frequentemente chamados de pixels , voxels , etc.), sentados em uma grade regular de um, dois, ou mais dimensões. Freqüentemente, os arrays são usados ​​para representar dados de sensor, simulação, imagem ou estatísticas. Esses arrays tendem a ser Big Data , com objetos únicos frequentemente variando em tamanhos de Terabyte e logo Petabyte; por exemplo, os arquivos atuais de observação da Terra e do espaço normalmente crescem em Terabytes por dia. Os bancos de dados de matriz visam oferecer armazenamento e recuperação flexível e escalonável nesta categoria de informação.

Vizinhança euclidiana de elementos em matrizes
Vizinhança euclidiana de elementos em matrizes

Visão geral

No mesmo estilo que os sistemas de banco de dados padrão fazem em conjuntos, Array DBMSs oferece armazenamento escalável e flexível e recuperação / manipulação flexível em arrays de tamanho (conceitualmente) ilimitado. Como na prática, os arrays nunca parecem independentes, esse modelo de array normalmente é incorporado a algum modelo de dados geral, como o modelo relacional. Alguns sistemas implementam arrays como uma analogia às tabelas, alguns introduzem arrays como um tipo de atributo adicional.

O gerenciamento de arrays requer novas técnicas, especialmente devido ao fato de que tuplas e objetos de banco de dados tradicionais tendem a se ajustar bem em uma única página de banco de dados - uma unidade de acesso ao disco no servidor, normalmente 4  KB  - enquanto objetos de array podem facilmente abranger várias mídias. A principal tarefa do gerenciador de armazenamento de array é fornecer acesso rápido a grandes arrays e subarrays. Para este fim, os arrays são particionados, durante a inserção, em blocos ou blocos de tamanho conveniente que atuam como unidades de acesso durante a avaliação da consulta.

Array DBMSs oferece linguagens de consulta dando acesso declarativo a tais arrays, permitindo criá-los, manipulá-los, pesquisar e excluí-los. Como, por exemplo, o SQL , as expressões de complexidade arbitrária podem ser construídas em cima de um conjunto de operações centrais de array. Devido às extensões feitas nos dados e no modelo de consulta, os SGBDs de matriz às vezes são incluídos na categoria NoSQL , no sentido de "não apenas SQL". Otimização de consulta e paralelização são importantes para alcançar escalabilidade ; na verdade, muitos operadores de array se prestam bem à avaliação paralela, processando cada bloco em nós ou núcleos separados.

Domínios de aplicação importantes de SGBDs de matriz incluem Ciências da Terra, Espaço, Vida e Sociais, bem como as aplicações comerciais relacionadas (como exploração de hidrocarbonetos na indústria e OLAP nos negócios). A variedade que ocorre pode ser observada, por exemplo, em dados geográficos onde séries temporais de sensores ambientais 1-D, imagens de satélite 2-D, séries temporais de imagens 3-D x / y / t e dados geofísicos x / y / z, bem como 4-D x / y / z / t clima e dados do oceano podem ser encontrados.

História e status

O modelo de dados relacional , que prevalece hoje, não suporta diretamente o paradigma de array na mesma extensão que conjuntos e tuplas. ISO SQL lista um tipo de atributo com valor de matriz, mas é apenas unidimensional, quase sem suporte operacional e não pode ser usado para os domínios de aplicativo de SGBDs de matriz. Outra opção é recorrer a BLOBs ("objetos binários grandes") que são equivalentes a arquivos: strings de bytes de comprimento (conceitualmente) ilimitado, mas novamente sem qualquer funcionalidade de linguagem de consulta, como subconjuntos multidimensionais.

O primeiro trabalho significativo para ir além dos BLOBs foi estabelecido com PICDMS. Este sistema oferece o precursor de uma linguagem de consulta de array 2-D, embora ainda procedural e sem suporte de armazenamento adequado.

Uma primeira linguagem de consulta declarativa adequada para dimensões múltiplas e com uma semântica baseada em álgebra foi publicada por Baumann , junto com uma arquitetura escalável. Outra linguagem de banco de dados de array, restrita a 2-D, foi apresentada por Marathe e Salem. O trabalho teórico seminal foi realizado por Libkin et al .; em seu modelo, chamado NCRA, eles estendem um cálculo relacional aninhado com matrizes multidimensionais; entre os resultados estão contribuições importantes na análise da complexidade da consulta de matriz. Uma álgebra de mapa, adequada para dados raster espaciais 2-D e 3-D, foi publicada por Mennis et al.

Em termos de implementações de Array DBMS, o sistema rasdaman tem o mais longo histórico de implementação de arrays nD com suporte total a consultas. O Oracle GeoRaster oferece armazenamento fragmentado de mapas raster 2-D, embora sem integração com SQL. TerraLib é um software GIS de código aberto que estende a tecnologia DBMS objeto-relacional para lidar com tipos de dados espaço-temporais; embora o foco principal esteja em dados vetoriais, também há suporte para raster. A partir da versão 2.0, PostGIS incorpora suporte raster para rasters 2-D; uma função especial oferece funcionalidade de consulta raster declarativa. SciQL é uma linguagem de consulta de matriz adicionada ao DBMS do MonetDB . SciDB é uma iniciativa mais recente para estabelecer suporte a banco de dados de array. Como o SciQL, os arrays são vistos como equivalentes às tabelas, em vez de um novo tipo de atributo como no rasdaman e PostGIS.

Para o caso especial de dados esparsos , os cubos de dados OLAP estão bem estabelecidos; eles armazenam valores de células junto com sua localização - uma técnica de compressão adequada em face dos poucos locais que carregam informações válidas - e operam com SQL neles. Como essa técnica não aumenta em densidade, os bancos de dados padrão não são usados ​​hoje para dados densos, como imagens de satélite, em que a maioria das células carrega informações significativas; em vez disso, as implementações ad hoc proprietárias prevalecem no gerenciamento de dados científicos e em situações semelhantes. Portanto, é aqui que os DBMSs de matriz podem dar uma contribuição específica.

Geralmente, Array DBMSs é uma tecnologia emergente. Embora existam sistemas implantados operacionalmente, como Oracle GeoRaster , PostGIS 2.0 e rasdaman , ainda existem muitas questões de pesquisa em aberto, incluindo design e formalização de linguagem de consulta, otimização de consulta, paralelização e processamento distribuído e questões de escalabilidade em geral. Além disso, as comunidades científicas ainda parecem relutantes em adotar a tecnologia de banco de dados array e tendem a favorecer a tecnologia proprietária especializada.

Conceitos

Ao adicionar arrays aos bancos de dados, todas as facetas do design do banco de dados precisam ser reconsideradas - desde a modelagem conceitual (como operadores adequados) até o gerenciamento de armazenamento (como o gerenciamento de arrays que abrangem várias mídias) até o processamento de consultas (como estratégias de processamento eficientes).

Modelagem conceitual

Formalmente, um array A é dado por uma função (total ou parcial) A : X V onde X , o domínio é um intervalo inteiro d- dimensional para algum d > 0 e V , chamado intervalo , é algum (não vazio) conjunto de valores; na notação de conjunto, isso pode ser reescrito como {( p , v ) | p em X , v em V }. Cada ( p , v ) em A denota um elemento de matriz ou célula , e seguindo a notação comum, escrevemos A [ p ] = v . Os exemplos de X incluem {0..767} × {0..1023} (para imagens de tamanho XGA ), os exemplos de V incluem {0..255} para imagens em escala de cinza de 8 bits e {0..255} × {0 ..255} × {0..255} para imagens RGB padrão .

Seguindo a prática de banco de dados estabelecida, uma linguagem de consulta de matriz deve ser declarativa e segura na avaliação. Como a iteração sobre um array está no centro do processamento do array, a declaratividade se concentra muito neste aspecto. O requisito, então, é que conceitualmente todas as células sejam inspecionadas simultaneamente - em outras palavras, a consulta não impõe nenhuma sequência de iteração explícita nas células da matriz durante a avaliação. A segurança da avaliação é alcançada quando cada consulta termina após um número finito de etapas (de tempo finito); novamente, evitar loops gerais e recursão é uma maneira de conseguir isso. Ao mesmo tempo, evitar sequências de loop explícitas abre várias oportunidades de otimização.

Array querying

Como um exemplo para operadores de consulta de matriz, a álgebra de rasdaman e a linguagem de consulta podem servir, que estabelecem uma linguagem de expressão sobre um conjunto mínimo de primitivas de matriz. Começamos com os operadores centrais genéricos e, a seguir, apresentamos casos especiais comuns e atalhos.

O operador marray cria uma matriz sobre uma determinada extensão de domínio e inicializa suas células:

marray index-range-specification
values cell-value-expression

em que especificação de intervalo de índice define o domínio de resultado e vincula uma variável de iteração a ele, sem especificar a sequência de iteração. A expressão do valor da célula é avaliada em cada local do domínio.

Exemplo: “Um recorte da matriz A dado pelos pontos de canto (10,20) e (40,50).”

marray p in [10:20,40:50]
values A[p]

Este caso especial, subconjunto puro, pode ser abreviado como

A[10:20,40:50]

Este subconjunto mantém a dimensão da matriz; para reduzir a dimensão extraindo fatias, um único valor de ponto de fatia é indicado na dimensão de fatia.

Exemplo: “Uma fatia através de uma série temporal x / y / t na posição t = 100, recuperando todos os dados disponíveis em x e y.”

A[*:*,*:*,100]

O operador curinga * indica que o limite atual da matriz deve ser usado; observe que as matrizes onde os limites das dimensões são deixados abertos no momento da definição podem mudar de tamanho nessas dimensões ao longo do tempo de vida da matriz.

Os exemplos acima simplesmente copiaram os valores originais; em vez disso, esses valores podem ser manipulados.

Exemplo: “Matriz A, com um log () aplicado a cada valor de célula.”

marray p in domain(A)
values log( A[p] )

Isso pode ser abreviado como:

log( A )

Por meio de um princípio denominado operações induzidas , a linguagem de consulta também oferece todas as operações que o tipo de célula oferece no nível da matriz. Conseqüentemente, em valores numéricos, todas as operações aritméticas, exponenciais e trigonométricas unárias e binárias usuais estão disponíveis de maneira direta, mais o conjunto padrão de operadores booleanos.

O operador condensar agrega valores de células em um resultado escalar, semelhante aos agregados SQL. Sua aplicação tem a forma geral:

condense condense-op
over index-range-specification
using cell-value-expression

Como aconteceu com o marray antes, a especificação do intervalo do índice especifica o domínio a ser iterado e vincula uma variável de iteração a ele - novamente, sem especificar a sequência de iteração. Da mesma forma, a expressão do valor da célula é avaliada em cada local de domínio. A cláusula condense-op especifica a operação de agregação usada para combinar as expressões de valor da célula em um único valor.

Exemplo: "A soma de todos os valores em A."

condense +
over p in sdom(A)
using A[p]

Uma abreviatura para esta operação é:

add_cells( A )

Da mesma maneira e em analogia aos agregados SQL, uma série de outras abreviações são fornecidas, incluindo contagem, média, mínimo, máximo e quantificadores booleanos.

O próximo exemplo demonstra a combinação de operadores marray e condensar derivando um histograma.

Exemplo: "Um histograma sobre imagem A em tons de cinza de 8 bits".

marray bucket in [0:255]
values count_cells( A = bucket )

A comparação induzida, A = balde , estabelece uma matriz booleana da mesma medida que um . O operador de agregação conta as ocorrências de true para cada valor de bucket , que subsequentemente é colocado na célula da matriz adequada da matriz do histograma 1-D.

Essas linguagens permitem formular operações estatísticas e de imagem que podem ser expressas analiticamente sem o uso de loops. Foi comprovado que o poder expressivo de tais linguagens de array, em princípio, é equivalente a linguagens de consulta relacionais com classificação.

Armazenamento de matriz

O armazenamento de matrizes deve acomodar matrizes de diferentes dimensões e, normalmente, tamanhos grandes. Uma tarefa central é manter a proximidade espacial no disco, de modo a reduzir o número de acessos ao disco durante o subconjunto. Observe que uma emulação de arrays multidimensionais como listas aninhadas (ou arrays 1-D) não fará isso por si só e, portanto, em geral não levará a arquiteturas escaláveis.

Normalmente, as matrizes são particionadas em submatrizes que formam a unidade de acesso. O particionamento regular em que todas as partições têm o mesmo tamanho (exceto possivelmente para limites) é conhecido como fragmentação . Uma generalização que remove a restrição a partições de tamanhos iguais, suportando qualquer tipo de particionamento, é o agrupamento . O particionamento de array pode melhorar o acesso a subconjuntos de array significativamente: ajustando o tiling ao padrão de acesso, o servidor idealmente pode buscar todos os dados necessários com apenas um acesso ao disco.

A compressão de ladrilhos às vezes pode reduzir substancialmente a quantidade de armazenamento necessária. Também para a transmissão de resultados, a compressão é útil, uma vez que, para as grandes quantidades de dados em consideração, a largura de banda das redes frequentemente constitui um fator limitante.

Processamento de consulta

Uma estrutura de armazenamento baseada em bloco sugere uma estratégia de processamento bloco a bloco (em rasdaman chamado streaming de bloco ). Uma grande classe de consultas praticamente relevantes pode ser avaliada carregando bloco após bloco, permitindo assim que os servidores processem matrizes de ordens de magnitude além de sua memória principal.

Transformação de uma consulta em uma versão mais eficiente, mas equivalente, durante a otimização de consulta de matriz

Devido aos enormes tamanhos de matrizes em aplicativos científicos / técnicos em combinação com consultas frequentemente complexas, a otimização desempenha um papel central em tornar as consultas de matrizes eficientes. Tanto a paralelização de hardware quanto de software podem ser aplicadas. Um exemplo de otimização heurística é a regra "o valor máximo de uma matriz resultante da adição no nível da célula de duas imagens de entrada é equivalente a adicionar os valores máximos de cada matriz de entrada". Substituindo a variante esquerda pela expressão direita, os custos diminuem de três (caras) passagens de matriz para duas passagens de matriz mais uma (barata) operação escalar (consulte a Figura, que usa o padrão de consulta SQL / MDA).

Domínios de aplicativo

Em muitos - senão na maioria - dos casos em que algum fenômeno é amostrado ou simulado, o resultado é um conjunto de dados rasterizados que pode ser convenientemente armazenado, recuperado e encaminhado como uma matriz. Normalmente, os dados da matriz são ornamentados com metadados que os descrevem mais detalhadamente; por exemplo, imagens geograficamente referenciadas carregarão sua posição geográfica e o sistema de referência de coordenadas em que são expressas.

Os seguintes são domínios representativos nos quais dados de matriz multidimensional em grande escala são tratados:

  • Ciências da terra: geodésia / mapeamento, sensoriamento remoto, geologia, oceanografia, hidrologia, ciências atmosféricas, ciências criosféricas
  • Ciências espaciais: ciências planetárias, astrofísica (observações ópticas e de radiotelescópio, simulações cosmológicas)
  • Ciências da vida: dados genéticos, microscopia confocal, tomografias
  • Ciências sociais: cubos de dados estatísticos
  • Negócios: OLAP, armazenamento de dados

Estes são apenas exemplos; geralmente, as matrizes frequentemente representam dados de sensor, simulação, imagem e estatísticas. Cada vez mais as dimensões espaciais e temporais são combinadas com eixos abstratos , como vendas e produtos; um exemplo onde tais eixos abstratos são explicitamente previstos é o modelo de cobertura do [Open_Geospatial_Consortium | Open Geospatial Consortium] (OGC) .

estandardização

Muitas comunidades estabeleceram formatos de troca de dados, como HDF , NetCDF e TIFF . Um padrão de fato nas comunidades de Ciências da Terra é OPeNDAP , uma arquitetura e protocolo de transporte de dados. Embora não seja uma especificação de banco de dados, ela oferece componentes importantes que caracterizam um sistema de banco de dados, como um modelo conceitual e implementações cliente / servidor.

Uma linguagem declarativa de consulta geo raster, Web Coverage Processing Service (WCPS), foi padronizada pelo Open Geospatial Consortium (OGC).

Em junho de 2014, o ISO / IEC JTC1 SC32 WG3, que mantém o padrão de banco de dados SQL, decidiu adicionar suporte a array multidimensional ao SQL como um novo tipo de coluna, com base no suporte inicial de array disponível desde a versão 2003 do SQL . O novo padrão, adotado no outono de 2018, é denominado ISO 9075 SQL Parte 15: MDA (Matrizes Multi-Dimensionais) .

Lista de DBMSs de matriz

Veja também

Referências