논문/spatial-operation

[논문 리뷰] A Survey on Spatio-temporal Data Analytics Systems

하기싫지만어떡해해야지 2024. 12. 9. 21:47

A Survey on Spatio-temporal Data Analytics Systems

논문 정보
제목 A Survey on Spatio-temporal Data Analytics Systems
저자 MD MAHBUB ALAM, LUIS TORGO, ALBERT BIFET
소속
Dalhousie University Canada, The University of Waikato New Zealand
저널 ACM
주제 Computer Science > Machine Learning
논문제출일 2021.03.21
인용수 70회 (2024.12.08 기준)

 

 

해당 논문 리뷰는 논문을 읽고 한국어 해석 + 부가 설명을 직접 추가하여 작성한 것으로

논문에는 없는 내용이 있을 수도 있으며

부정확한 내용이 있을 수도 있습니다 (..-_-..)

 

https://arxiv.org/abs/2103.09883

 

A Survey on Spatio-temporal Data Analytics Systems

Due to the surge of spatio-temporal data volume, the popularity of location-based services and applications, and the importance of extracted knowledge from spatio-temporal data to solve a wide range of real-world problems, a plethora of research and develo

arxiv.org


Abstract + Introduction

위치 기반 서비스(LBS) 및 애플리케이션의 인기로

매일 엄청난 양의 공간 빅데이터가 생성되고 있다

스마트 모바일 기기의 보급, 차량, 전 세계에 배치된 센서,

인공위성, 항공 촬영 등 다양한 출처에서

이러한 공간 데이터는 생성되고있다

 

이전에는 공간 및 시공간 데이터베이스 시스템의 연구와 개발은

전통적인 RDBMS에서 시작되었다

연구자들은 지속적으로 RDBMS에 새로운 기능을 추가하였고

병렬 및 분산 시스템, I/O 병목과 같은 부분에서

RDBMS의 한계를 많이 극복하였다

 

기존 RDBMS는 반구조적 또는 비구조적 데이터를

저장하고 처리할 지원이 부족했기 때문에

스키마가 필요없고 높은 가용성과 수평적 확장성을 갖춘

NoSQL이 대안으로 등장했다

 

최근 몇 년동안은 빅데이터를 처리하기 위해서

Hadoop, Spark, NoSQL 데이터베이스 시스템을 확장하면서

공간 및 시간 데이터 유형, partitioning indexing,

geometric operations과 같은 요소들을 구현하였다

 

시공간 데이터에 관해서는 연구가 지속되고있지만

최근 기술 동향을 반영하고 있는 논문은 부족하다

따라서 본 논문은 공간 RDBMS, GIS, 프로그래밍 언어를 포함하여

시공간 데이터 분석 생태계를 나누어 분석하였다

 

시공간 데이터 분석 생태계는 아래 3개로 분류된다

1. 데이터 저장: 공간 RDBMS와 NoSQL

2. 데이터 처리: Hadoop, Spark, NoSQL 등을 기반으로 한 빅데이터 인프라

3. 데이터 프로그래밍 및 소프트웨어 도구: R과 Python에서 시공간 데이터를 처리하는

라이브러리, 패키지, 도구 등

 

따라서 본 논문에서는

1. 기존 연구에 대한 조사와 한계점 + 본 논문의 목적

2. 시공간 데이터 분석 연구의 중요성과 주요 application 소개

3. 시공간 데이터와 공간 데이터 정의

4. 빅데이터 시대에서 공간 데이터의 중요성과 NoSQL 시스템에서의 공간 자원 논의

5. 시공간 데이터 처리를 위한 기존 빅데이터 인프라에 대한 리뷰

6. PythonR에서 시공간 데이터 처리를 위한 라이브러리, 패키지, 도구 소개

7. ArcGIS, QGIS

 

이러한 순서로 시공간 데이터 분석 생태계를 정리해보고자한다

 

 

 

 

Related Works

시공간데이터 시스템에 대한 연구들은 다음 2가지로 분류된다

1. 기존 공간 데이터 분석 시스템의 비교 분석

2. 공간 쿼리를 이용한 시스템 성능 평가

 

기존 공간 데이터 분석 시스템의 비교 분석 연구는 다음과 같다

 

Eldawy et al.는 공간 빅데이터에서 2016년 이전에 개발된

기존 연구를 6가지 주요 특징을 기준으로 탐구했다

 

Maguerra et al.는 시공간 빅데이터 처리 시스템을

framework, partitioning and indexing, spatial query 관점에서 검토했다

 

Castro et al.는 Hadoop 및 Spark 기반 공간 데이터 시스템의 지원 기능을 분석하여

사용자가 application에 적합한 공간 데이터 시스템을 선택하도록 했다

 

Yao et al.은 데이터 모델, 저장소, 인덱싱, 처리 및 분석에 기반하여

최신 기술을 연구하였고

Karim et al.는 Apache의 여러 framework들에서

시공간 기능을 비교했다

 

Almeida et al.는 궤적 빅데이터 분석에 대해

전통적인 DBMS 뿐만 아니라 Cloud 기반 시스템과

NoSQL 기반 시스템을 포함한 시스템에 대한 개요를 제공했다

 

 

공간 쿼리를 이용한 시스템 성능 평가는 다음과 같다

 

Hulbert et al.는 GeoMesa와 Elasticsearch의 시공간 쿼리를 실행하여

쿼리 실행시간과 처리량을 비교했다

García et al.는 Spatial Hadoop과 Location Spark의 쿼리를 비교분석했고

Hagedorn et al.은 Hadoop 및 Spark의 공간 빅데이터 처리 기능을 비교했다

Data Reply는 GeoSpark, Hive, MongoDB, GeoMesa, Elasticsearch, Postgres-XL을 포함한

6개의 빅 지리공간 데이터 인프라를 벤치마킹하였다

.

.

.

 

이러한 기존 연구들에는 한계점이 존재한다

첫 번째로, 이러한 기존 연구들은 대부ㅇㅂㅈSㅇ 2017년 이전에

개발된 시스템만을 다루었기 때문에 최신 기술을 반영하지 못한다

두 번째로, 기존 연구는 주로 공간 데이터 처리에 두었으나

시공간 데이터 및 궤적 데이터를 처리하기 위한 시스템도 많이 등장했다

 

세 번째로, NoSQL 데이터베이스를 활용하여 개발된

공간 빅데이터 처리 시스템에 대한 종합적인 조사가 없다

마지막으로, Python으로 DASK 및 RAPIDS와 같은

공간 빅데이터용 병렬 및 분산 라이브러리에 대한 조사가 없다

 

따라서 본 논문에는

공간, 시공간, 궤적 데이터를 처리하기 위한

최신 시공간 데이터 분석 시스템 연구의 현황을 종합적으로 검토하고자한다

RDBMS, NoSQL, 빅데이터 처리 플랫폼, 프로그래밍 언어, GIS에서 지원되는

최신 공간 기능을 다룬다

Spark와 함께 Python의 DASK, RAPIDS도 포함하여 논의한다

또한 R과 Python에서 사용가능한 라이브러리, 패키지, 도구 및 GIS 소프트웨어와의

API도 다룬다

 

 

 

IMPORTANCE AND APPLICATIONS OF SPATIO-TEMPORAL DATA ANALYTICS

1854년 영국의 존 스노우가

콜레라 환자의 발생 지점을 지도에 표시하여

콜레라의 원인이 broad stree의 수로였음을

밝혀낸건 정말 유명한 공간 데이터로 문제를 해결한 사례이다

(학부 재학 중 귀에 딱지가 앉게 들었음)

 

spatio-temopral data를 활용해야하는

몇 가지 응용 분야를 알아보자

 

1. 전염병과 공중 보건

질병의 확산과 관련한 spatio-temporal data를 분석

2. 산불 및 기후학

항공 및 위성이미지에서 얻은 spatio-temporal data로

산불 초기 진압

3. 비상 관리 및 응급 대응

교통사고 및 범죄

4. 해양환경 및 해양 데이터

5. 도시 교통 및 설계

GPS, 자율주행, LBS

6. 정밀 농업

농경지의 특성 파악

 

 

 

DEFINITION AND TYPES OF SPATIAL AND SPATIO-TEMPORAL DATA

시공간 데이터는 이산 점 데이터와 trajectory(궤적) 데이터로 구분할 수 있다

 

Spatial Data

공간과 관련된 데이터 항목은

geospatial(지리공간) 혹은 spatial data(공간데이터)라고 부른다

전통적으로는

래스터(raster) 데이터

점(point) 데이터

네트워크(network) 데이터

가 일반적인 패턴이다

 

최근에는 전통적인 패턴이 많이 변하고 있음

eg,. 스마트폰의 GPS 궤적 데이터, 위치가 태그된 트위터 등

 

1. Raster Data (래스터 데이터)

픽셀(또는 그리드 셀) 집합으로 표현되며

각 픽셀은 특정 지리적 위치와 연결된다

래스터 데이터는 이산 데이터(eg,. 토지 피복 유형, 토양 유형) 

또는 연속 데이터(eg,. 온도, 고도, 항공 사진, 위성이미지)로

나타낼 수 있다

 

2. Vector Data (벡터 데이터)

벡터 데이터로는

point, line, polygon이 있다

 

3. Network Data (네트워크 데이터)

공간에 내장된 노드로 구성되니 특수 그래프이고

교통망이 대표적인 예시이다

edge는 도로로, node는 도로의 교차점 또는

poi를 나타낸다

 

 

Spatio-temporal Data

1. spatio-temporal raster data

raster data에 timestamp가 추가되면

spatio-temporal raster data(시공간 래스터 데이터)라고 부른다

예를 들어, 고정된 공간 위치에서 시간 경과에 따라 수집되는

대기 질 관측 데이터나, 지표 관측 데이터는

시공간 래스터 데이터이다

 

 

2. spatio-temporal vector data

spatio-temporal discrete point data는

특정 이벤트가 발생한 시간과 위치를 나타냄

예를 들어서 범죄, 교통사고, 비행기 추락과 같은

이벤트를 시공간적으로 모델링 할 수 있다

 

시간의 경과에 따라 공간의 이동 reference point에서

수집된 데이터인 reference point data도

이러한 데이터의 유형이다

 

 

3. trajectory data

시공간에서 이동 객체에 의해 생성된

점의 집합으로 구성된 경로

GPS, 동물 궤적, 허리케인의 이동 경로 등이 그 예이다

 

 

 

SPATIAL DATABASE

공간 데이터베이스는 RDBS와 NoSQL로 나뉜다

RDBMS는 전통적인 데이터베이스 관리 시스템으로

안정적이고 성숙하며 효율적이다

그러나 다양한 소스에서 생성되는 대량의 데이터와

다양한 형식의 데이터로 인해 NoSQL 데이터베이스 시스템과

대규모 공간 데이터 처리 플랫폼이 등장하게 되었다

 

Spatial Relational Database

전통적인 RDBMS는 효율적인 데이터 관리와 쿼리로

여전히 인기가 많다

 

대부분 OGC에서 정의된 데이터 형식(WKT, WKB)과

기하 객체(점, 선, 폴리곤, 컬렉션)를 지원한다

또, 대다수의 시스템이 R-Tree 인덱싱 혹은 grid 인덱스를 지원한다

 

PostregreSQL/PostGIS와 Oracle Spatial에서는

공간 래스터 데이터를 저장하고 처리할 수 있고

OGC 및 표준에서 정의된 완전한 공간 관계 및 분석 함수도 제공한다

이에 따라 다양한 공간 조인, 범위 쿼리 등의

공간 쿼리를 실행할 수 있다

 

하지만 I/O 병목 현상, 병렬 처리 부족, 확장성 문제로 인해

데이터의 개수가 증가하면서 성능이 저하되었다

또한, 빅데이터가 들어오며 다양한 형태의 데이터가 들어오는데

이러한 데이터를 모델링하는데에도 어려움을 겪었다

따라서 이러한 RDBMS의 한계를 극복하기 위해

많은 변화와 개선을 거쳤다

 

PostgreSQL에서 GeoJSON 데이터 형식을 지원,

sharding을 통한 수평적 확장,

pgpool(Pgpool-II) 및 스트리밍 복제를 활용한 읽기 확장성 등이

대표적인 예시이다

 

또한 PostgreSQL 및 postGIS에서는

병렬 시퀀스 스캔, 병렬 조인, 병렬 집게를 지원하여

대규모 공간 데이터를 병렬로 처리할 수 있게 되었다

 

 

Spatial NoSQL Database

1998년에 제안된 NoSQL은 고정된 스키마가 없어

RDBMS의 대체 시스템으로 부상하였다

 

NoSQL은 핵심 데이터 모델에 따라 4개로 분류된다

1. Key-Value database : Redis, Oracle NoSQL

2. Column Family database: Cassandra, HBase

3. Document database: MongoDB, Couchbase

4. Graph database: Neo4j

 

Redis는 in-memory key-value 저장소로

공간 쿼리 처리를 가속화하기 위해 geohash2 공간 인덱스를 구현했다

geoadd, geopos, geohash, georadius와 같은 명령어를 통해

저장된 포인트 데이터셋에 대한 공간 인덱스를 생성하고 작업한다

하지만 포인트에 제한된 공간 분석만 수행할 수 있다

또한, Redis에는 SQL 유사 쿼리 언어를 지원하지 않는다

 

반면에 Oracle NoSQL은 일반적인 기하학 객체와

geohash indexing, 공간 연산자, 공간 쿼리를 지원한다

 

MongoDB는 document형 database로 공간 처리를 기본적으로 지원한다

(카카오 모빌리티가 쓰는 DB인걸로 알고있다)

MongoDB는 GeoJSON 객체(point, linestring, polygon, collection)를 지원하며

구면 표면을 모델링하기 위한 2dsphere index를 제공한다

 

near, nearSphere, geoWithin, geoIntersect, geoNear와 같은

연산자를 통해 공간 쿼리를 수행할 수 있다

하지만 Redis와 마찬가지로 SQL 유사 쿼리는 지원하지 않는다

 

반면에 Couchbase는 SQL 유사 쿼리 언어를 지원하며

GeoJSON 객체도 지원한다

하지만 MongoDB가 더 다양한 공간 쿼리 지원 면에서 우수하다

 

Cassandra는 공간 데이터 처리를 위한 기본 지원이 없지만

Stratio의 Lucene Index라는 공간 플러그인이 있다

 

Neo4j는 Neo4j Cypher라는 공간 데이터를

저장, 인덱싱, 처리할 수 있는 지원하는 라이브러리가 있다

이 라이브러리는 ESRI Shapefile 및 OSM 데이터를 가져오는

모듈을 포함하며 저장된 데이터에 대해 R-Tree 인덱싱을 적용할 수 있다

 

Neo4j Spatial은 JTS 및 GetTools와 같은 인기있는

geospatial library를 매핑하며 이들의 기능을 활용할 수 있다

 

하지만 Neo4j Spatial은 외부 라이브러리로

고도의 확장성은 없으며

높은 동시성 및 대규모 데이터 처리에 어려움을 겪는다

이를 개선하기위해 3.4 버전부터는 

2D 및 3D 포인트를 지원하는 Point와 Temporal 데이터 유형을

기본적으로 제공하기 시작했다

Neo4j는 포인트 인덱싱에는 Hilbert-curve를 사용하며

현재는 공간 거리 함수만을 지원한다

 

 

Future Research Directions

NoSQL의 데이터베이스 공간 지원은

공간 RDBMS에 비해 사용할 수 있는

공간 연산이 부족하다

 

또한, NoSQL에서 공간 래스터와 궤적 데이터를

저장하고 처리할 수 있는 기능을 추가해야한다

 

graph database인 Neo4j는 sharding을 통한

수평적 확장 기능을 지원하고 있으며,

분산 그래프 데이터베이스가

공간 데이터를 처리하는 성능을 살펴보는 것도

흥미로운 연구가 될 것이다

 

 

 

BIG SPATIO-TEMPORAL DATA PROCESSING INFRASTRUCTURES

빅데이터가 등장함에 따라

방대한 양의 데이터를 저장, 관리, 처리할 수 있는

고도로 확장 가능하고 분산된 데이터 처리 시스템에 대한 수요가 증가하고있다

 

지난 몇 년 동안 개발된 대규모 공간 혹은 시공간 데이터 처리 시스템은

MapReduce 프레임워크인 Hadoop, NoSQL 데이터베이스,

그리고 Spark를 기반으로 하고있다

 

또한 최근에는 DASK와 RAPIDS와 같은

Python 라이브러리가 빅데이터 플랫폼으로

인기를 얻고있다

 

이 섹션에서는 개발 기준에 따라

대규모 시공간 데이터 인프라를 분류한다

 

 

 

Hadoop-based Big Spatio-temporal Infrastructures

Hadoop은 대량의 데이터를 처리하기 위한

고도로 확장 가능하고 분산된 오픈소스 MapReduce 프레임워크로

HDFS 분산 저장시스템과 통합되어있다

 

Hadoop은 기본적으로 공간과 시공간 데이터를

처리하는 기본적인 지원을 제공하고 있지 않다 

 

따라서 연구와 산업 분야에서 Hadoop이

공간 또는 시공간 데이터를 저장, 처리, 분석하기 위한

Hadoop 확장 기능들이 여러 가지 제안되었다

 

(1) Hadoop-GIS

Hadoop의 공간 확장 시스템이다

Hadoop의 핵심을 변경하지 않고

Hadoop 위에 공간 레이어를 통합한다

그래서 공간 데이터를 처리하는 성능이

예상보다 좋지 않다

또한, 공간 쿼리 처리를 위해

추가적인 overhead를 야기하는

선언적 공간 쿼리(HiveSP)를 지원하기 위해

Hive를 확장한다

 

(2) Spatial Hadoop

Hadoop 프레임워크의 핵심 내부에

공간 지원을 통합해서

Hadoop-GIS보다는 나은 성능을 보인다

또한 SQL-like 쿼리 언어인 Pigeon도 도입되었다

 

(3) ST-Hadoop

SpatialHadoop의 시공간 확장 시스템으로

각 레이어에 시공간 인식을 통합한다

그러나 ST-Hadoop은 discrete한 시공간 point data의

속성을 고려하여 개발되었기 때문에

궤적 데이터 처리에는 적합하지 않다

이에 따라 궤적 데이터를 처리하기 위해

Summit이 확장되어 개발되었다

 

(4) HadoopTrajectory

Hadoop의 핵심에 다양한 데이터 타입과 연산자를 추가하여

궤적 데이터를 저장하고 처리할 수 있는 시스템이다

 

(5) Parallel SECONDO

Hadoop과 SECONDO DBMS를 결합하여 확장성을 제공한다

SECONDO는 공간 및 시공간 데이터를 나타내는 데이터 모델

이동 객체 처리를 위한 연산, SQL-like 쿼리 언어를 지원한다

하지만 SECONDO는 단일 컴퓨터에서 개발되어

대규모 데이터를 처리할 수 없었기 때문에

Hadoop과 결합되어 쿼리를 병렬로 실행하였다

하지만 이는 중앙 집중식 처리 방식으로 인해서

Hadoop의 잠재력을 제대로 활용하지 못한다

 

 

 

 

Spark-based Big Spatio-temporal Infrastructures

Hadoop 기반의 빅데이터 시스템은

데이터 규모가 커질수록 성능이 저하될 수 있다

이에 따라, 디스크 기반 시스템보다

인메모리 빅데이터 시스템이 개발되었고

Apache Spark는 인메모리 방식의

분산 빅데이터 처리 프레임워크로 널리 사용되고있다

 

하지만 Hadoop과 마찬가지로

공간 또는 시공간 데이터를 처리하기 위한

기본적인 자원이 많이 부족하다

 

(1) GeoSpark

Spark의 RDD, S를 확장하여

공간 데이터 유형인 Spatial RDD를 지원한다

최근에는 SQL API를 추가적으로 지원하게 되었다

 

(2) SpatialSpark

Spark위에 라이브러리 형태로 구현되었으며

범위 질의와 두 가지 공간 조인 질의를 수행한다

고정 그리드, 이진 분할, 정렬 타일 기법을 통해

데이터를 분할하고 R-Tree를 사용하여 인덱싱한다

그러나 SQL을 지원하지 않는다

 

(3) Simba

Spark SQL 및 DataFrame API를 확장하여

공간 데이터를 지원한다

 

(4) Location Spark

Spark 위에 라이브러리 형태로 개발

공간 데이터를 key-value pair로 저장한다

 

(5) SparkGIS

Fixed-Grid, Binary-Space, Quad-Tree 알고리즘을 지원하며

R*-Tree 인덱싱을 활용하여 공간 질의를 처리한다

 

(6) STARK

Spark RDD를 확장하여 공간 및 시간 데이터 유형,

연산자, 조건자를 통합한다

시공간 클러스터링(DBSCAN)을 수행할 수 있다

 

(7) TrajSpark

새 데이터가 도착할 때 전체 데이터셋을 다시 분할하지 않고

새로운 데이터 배치만 분할하여 글로벌 인덱스를 업데이트한다

이를 통해 실시간에 가까운 궤적 데이터 처리가 가능하지만

실시간 스트리밍 데이터 처리 시스템은 아니다

 

(8) Dragoon

오프라인과 온라인 데이터를 모두 처리하는

하이브리드 궤적 분석 시스템이며

궤적 질의를 처리한다

 

(9) GeoTrellis

공간 raster 데이터를 처리할 수 있도록 지원하는

Scala 라이브러리이다

 

 

 

 

NoSQL-based Big Spatio-temporal Infrastructures

(1) MD-HBase

HBase를 확장하여 시공간 쿼리를 지원하도록 설계되었다

Z-Ordering과 같은 선형화 기법을 사용하여

다차원 위치 데이터를 1차원 공간으로 변환하여

효율적인 인덱싱을 제공한다

또한, Quad-tree 및 KD-tree와 같은

다차원 인덱스 구조를 범위 분할 key-value store 위에 계층화하여

range 및 KNN 쿼리를 실시간으로 처리할 수 있다

 

(2) GeoMesa

NoSQL 데이터베이스위에 구축된 시공간 데이터 처리 시스템이다

MD-HBase와 같이 다차원 데이터를 1차원 키로 변환하기 위해

space-filling curve를 사용하며

GeoHash와 timestamp를 사용해 시공간 인덱스를 생성한다

 

(3) BBoxDB

다차원 데이터를 위한 분산형 및 확장 가능한

key-bounding box-value store이다

각 값을 n차원 축 기준의 경계 박스(bounding box)와 함께 저장하여

데이터의 공간 위치를 정의한다

Grid, KD-tree, Quad-tree와 같은 공간 분할 기법과

다중 수준 인덱싱을 지원한다

 

(4) Distributed SECONDO

관계형, 공간, 시공간(경로 포함) 데이터를 처리할 수 있는

범용 DBMS이다

분산 데이터 저장소로는 Apache Cassandra를

쿼리 처리 엔진으로는 SECONDO를 통합했다

이전의 Hadoop 기반의 SECONDO는 성능이 저하되었지만

Distributed SECONDO는 Cassandra 통합으로

높은 업데이트 속도를 달성했다

 

(5) JUST (JD Urban Spatio-Temporal)

HBase를 기본 storage로

GeoMesa를 인덱싱 도구로

Spark를 쿼리 실행 엔진으로 사용한다

JustQL이라는 SQL-like query 언어를 사용하고

메모리 기반 시스템과 달리, 필요한 데이터만

메모리에 로드하므로 클러스터 노드가 많은 메모리를 요구하지 않는다

 

(6) TrajMesa

GeoMesa를 기반으로 한 경로 저장 엔진으로

수평 스토리지 스키마(H-Store)를 제안했다

경로 전체를 하나의 행으로 저장하며 압축하고

이를 통해 스토리지 크기를 줄이고 I/O를 감소시켰다

 

(7) THBase

효율적인 경로 저장 관리를 위해

분할 기반 데이터 모델 및 MO(이동 객체) 기반

파티션 모델을 제안했다

단일 객체, 시공간 범위, knn 쿼리를 지원한다

 

 

Python Libraries as Big Spatio-temporal Infrastructures

DASK는 Python을 native로 확장하는

병렬 및 분산 컴퓨팅을 위한 Python 라이브러리이다

클러스터의 분산 노드뿐만 아니라

단일 노드에서도 여러 CPU 코어를 활용하여 작업을 병렬화한다

 

 DASK는 고수준에서는

Pandas, Numpy, Scikit-Learn 등의 기존 라이브러리를 확장하여

Python 생태계를 병렬화한다

저 수준에서는 Airflow나 Luigi와 같은

동적 task scheduler를 제공하여

고급 workload를 처리할 수 있도록 한다

 

XArray는 레이블이 있는 다차원 배열을 위한 Python 패키지로

과학 데이터셋을 처리하는데 효율적이다

DASK와 긴밀히 통합되어 병렬 계산을 지원하므로

래스터 공간 데이터를 처리하는데 사용할 수 있다

 

RAPIDS는 Python에서 GPU의 성능을 활용해

빅데이터를 처리할 수 있도록 하는 라이브러리 및 API 모음이다

RAPIDS는 PyTorch/TensorFlow 등의 라이브러리를 지원한다

또한, DASK와 통합되어 있으므로

단일 노드 및 분산 클러스터에서 수평 확장도 가능하다

 

cuSpatial은 RAPIDS의 공간 모듈로

초기 개발 단계에 있지만 빠르게 성장하고있다

 

 

 

Other Big Spatio-temporal Infrastructures

Hadoop, Spark, NoSQL 이외에도

공간 데이터를 처리할 수 있는 여러 분산 시스템이 있다

 

(1) Sphinx

Apache Impala의 코어를 확장하여 개발된

고도로 확장 가능한 분산 공간 데이터 처리 시스템이다

Hadoop 위에서 동작하는 SQL 엔진으로

표준 SQL 인터페이스를 채택하여

Impala의 네 가지 계층에 공간 지원을 추가했다

 

storage 계층에는 글로벌 인덱스(R-Tree/R+-Tree)가

각 데이터를 블록으로 나누고

로컬 인텍스(R-tree)가 HDFS의 각 블록 내 레코드를 정렬하는

이중 인덱스가 추가되었다

 

또한, 쿼리 플래너와 실행 계층을 수정하여

공간 조인 및 범위 쿼리를 지원한다

 

 

(2) AsterixDB

LSM 기반 데이터 스토리지와 B+- 트리 및 R-Tree를 포함한

다양한 인덱싱 기술을 통합하는 빅데이터 관리 시스템이다

SQL++ 언어를 지원한다

 

(3) Apache Ignite

Spark와 유사한 확장 가능하고

내결함성을 갖춘 분산 메모리 기반 빅데이터 처리 플랫폼이지만

공간 지원에서는 제한적이다

따라서 SpatialIgnite를 도입하여

공간 분석 함수가 포함된 라이브러리를 추가하여

공간 조인 및 범위 쿼리 실행이 가능하고

성능이 우수하다

 

(4) SciDE, RasDaMan, DISTIL

이는 모두 과학 컴퓨팅을 위해 설계된

특화된 데이터베이스시스템으로

다차원 배열 데이터를 이용해

공간 래스터 데이터를 처리하는데 효율적이고

SQL과 유사한 쿼리를 지원한다

 

(5) Google Earth Engine

대규모 지리 공간 데이터 분석을 위한

클라우드 기반 플랫폼인 google earth engine을 사용하여

공간 데이터 분석 및 시각화도 가능하다

 

 

 

 

Future Research Directions

공간, 시공간, 궤적 데이터를 처리하기 위한

빅데이터 인프라에 관한 연구는 활발하지 않다

또한, 대부분 시스템의 쿼리들이

SQL만큼 효율적이지 않고

python 기반 라이브러리를 제외하면 시각화 기능이 제한적이다

 

따라서 이러한 데이터들을 처리하기 위한

추가적인 연구는 필수적이다

 

 

 

PROGRAMMING AND SOFTWARE TOOLS FOR SPATIO-TEMPORAL ANALYSIS

지리 공간 도구를 활용하고

데이터를 저장, 쿼리, 분석 및 시각화하기 위한

코드를 작성하는 것도 중요한 부분 중 하나이다

 

대규모 개발이 필요한 시스템을 개발해야한다면

C/C++이나 JAVA로 개발을 해야할 것이고

데이터의 처리나 분석, 시각화 작업이 주요 목적이라면

Python이나 R과 같은 언어를 선택해야 할 것이다

 

많은 공간 시스템은 특정 언어에서 더 잘돌아간다

그 예시는 아래와 같다

JTS(JAVA), GEOS(C++), Google S2(C++),

ESRI Gemetry API(JAVA), Spatial4j(JAVA)

 

Python과 R의 라이브러리 및 패키지들은

GEOS 라이브러리를 활용하고 있다

 

이 섹션에서는 공간, 시공간, 궤적 데이터를

분석 및 모델링 시각화하기 위한

Python과 R의 널리 사용되는

라이브러리와 패키지를 종합적으로 검토해본다

 

또한, 공간 데이터 처리를 위한

ArcGIS와 QGIS에 대해서도 살펴보Pㄴ

 

 

The R Ecosystem for Spatio-temporal Data Analysis

R은 data science에서 가장 많이 사용되는 언어 중 하나이다

데이터 분석, 통계 작업에 중점을 두어

통계학자, 엔지니어, 과학자들 사이에서 인기가 많다

 

R에서의 시공간 데이터 분석 생태계를 정리해보겠다

 

spatial data

sp 패키지는 R에서 처음으로 시공간 데이터를 처리하기 위해

ㄱㅐ발된 패키지이다

sp는 OGC 표준을 준수하지 않았기 때문에

sf(simple features) 패키지가 등장하였다

sf는 데이터 프레임으로 공간 작업을 처리하며

더 빠른 입출력, 시각화를 지원한다

 

raster data

raster 패키지는 raster data를 생성, 읽기, 쓰기, 조작, 처리하는데

널리 사용되며, 메모리에 적합하지 않을 정도로

큰 데이터도 처리할 수 있다

terra라는 패키지도 raster 패키지와 비슷한 기능을 제공하지만

더 간단하고 빠르게 동작한다

 

spatio-temporal data

stars와 spacetime 패키지는

시공간 데이터를 처리하는데 사용되며

spacetime은 궤적 데이터도 지원한다

궤적 데이터 분석을 위해 특별히 개발된

trajectories 패키지도 존재한다

이러한 패키지는 xts와 zoo와 같은 시계열 분석 패키지와

sp와 sf같은 공간 데이터 분석 패키지에 의존한다

 

data manipulation

dplyr 패키지는 데이터 프레임을 조작하기 위한 문법을 제공한다

sf 패키지와도 호환이 잘 된다

 

data modeling

gstat 패키지는 공간 및 시공간 데이터의 통계 모델링, 예측, 시뮬레이션에 사용되며

sp 패키지에 의존한다

CAST 패키지는 시공간 모델링 작업을 개선하며

mlr은 다양한 머신러닝 알고리즘을 지원한다

 

data visualization

공간 데이터를 지도로 나타내는

tmap, leaflet, mapview같은 패키지들이

sf 패키지와 호환된다

정적 매핑 도구로는 tmap과 ggmap이 널리 사용되며

대화형맵과 애니메이션을 위해서는

leaflet, mapview, plotly가 사용된다

 

APIs for GIS Software and Spatial RDBMSs

R은 GIS software나 공간데이터베이스 시스템이 아니라

한계점이 존재하지만

RQGIS 패키지는 Python API를 통해

R과 QGIS를 연결하여

QGIS 알고리즘을 R 내에서 사용할 수 있도록 하였다

rpostgis 패키지는 PostgreSQL/PostGIS와의 인터페이스를 제공하여

벡터 및 래스터 데이터를 읽고 쓰는 작업을 지원한다

 

APIs for Big Data Platforms

R에서는 RHadoop, RHIPE, sparklyr와 같은 패키지를 통해

Hadoop과 Spark와 같은 분산 빅데이터 플랫폼에 접근할 수 있다

geospark는 R사용자가 GeoSpark를 활용할 수 있게 해준다

 

 

 

Python Ecosystem for Spatio-temporal Data Analysis

ArcGIS와 QGIS같은 인기 GIS software들이

python을 주요 스크립팅 언어로 통합하면서

python을 이용한 공간 데이터 모델링, 분석, 시각화가 가속화되었다

 

SciPy Stack

Python에서 과학적 계산을 위해 개발된 라이브러리 세트이다

SciPy, Numpy 그리고 Pandas는

데이터 과학의 핵심패키지로써, 공간 스택 라이브러리들이

의존하고 있기 때문에 시공간 분석에서도 필수적인 라이브러리이다

 

Data I/O

Python의 공간 데이터 입출력 라이브러리는

기존의 GDAL(Geospatial Data Abstraction Library) C 라이브러리를

활용하여 개발되었다

Fiona는 GDAL을 인터페이스하여 Shapefile, GeoJSON, JSON, CSV 등

다양한 포맷의 공간 벡터 데이터를 읽고 쓸 수 있다

rasterio는 GDAL을 인터페이스하여

GeoTIFF, netCDF, JPEG2000 등 래스터 포맷을 처리할 수 있고

효율적인 처리를 위해 Numpy를 사용한다

 

Data Processing

Shapely는 벡터 기하 객체를 조작하고 분석하며

GEOS를 기반으로 한다

GeoPandas는 Pandas의 공간적 확장이다

SciPy & Spatial은 공간 분석을 위한 알고리즘과

데이터 구조를 제공한다

rasterstats는 래스터 데이터를 요약하기 위해

텽역 통계 및 점 쿼리 기능을 제공한다

 A

Statistical Analysis and Modeling

PySAL은 벡터 데이터를 중심으로 하는

오픈소스 공간 분석 라이브러리로

공간 클러스터 감지, 핫스팟 및 이상치 분석,

통계 모델링, 공간 경제학, 시공간 분석,

시각화 등 광범위한 기능을 제공한다

 

PySAL은

pysal.lib, pysal.explore, pysal.model, pysal.viz

4가지 도메인으로 구분되는데

ArcGIS와 QGIS용 toolkitArA 제공되며

Anaconda Python 배포판의 주요 패키지로 포함되어있다

 

statsmodels은 통계 및 시계열 분석을 위해 사용되며

scikit-learn은 지도 및 비지도 학습 알고리즘을 포함한

머신러닝 학습 라이브러리이다

 

Data Visualization

Matplotlib은 시각화를 위한 핵심 라이브러리이며

Cartopy는 지도 작성 기능을 제공하고

Folium, Bokeh, Plotly는 웹용 상호작용 지도 및 시각화를 지원한다

 

 

Python for GIS Software

ArcPy는 ArcGIS Desktop 버전에서 제공되며

python을 통해 GIS 도구에 접근할 수 있다

PyQGIS API는 QGIS기능의 확장,

플러그인 개발 및 독립형 Python 스크립트를

작성하는 데 사용된다

 

BigData Plaform APIs

Hadoop API와 SparkAPI를 활용해서 각각

Hadoop과 Spark를 활용할 수 있다

또한, 앞에서 나왔던

DASK와 RAPIDS를 이용해 빅데이터를 처리할 수 있다

 

 

 

 

GIS Software

GIS(Geographic Information System)은 모든 종류의 지리 데이터를

캡처, 저장, 분석 및 시각화하기 위한 통합 환경을 제공한다

여러 가지 상용 GIS 소프트웨어가 있으며

ArcGIS와 QGIS가 가장 널리 사용된다

 

ArcGIS는 ESRI에서 개발한 상용 GIS 소프트웨어이고

QGIS도 ArcGIS와 비슷한 기능을 제공하는 GIS 소프트웨어이다

ArcGIS와 QGIS는 모두 python 콘솔을 지원하여

GIS도구와 Python 기능을 소프트웨어 안에서 실행할 수 있고

모두 R과의 인터페이스도 제공한다

 

x의 실험에 따르면

buffer, convex hull, intersection와 같은 기하 연산은 QGIS가

공간 매핑 기능에서는 ArcGIS가 더 뛰어난 성능을 보인다고 한다

ArcGIS는 도구와 지원 알고리즘이 더 풍부하지만

QGIS는 third party plugin을 추가하여 기능을 확장할 수 있다

또한 QGIS는 GDAL/OGR 라이브러리를 사용하여

지원하는 입력 파일 형식이 매우 다양하다

 

GIS software도 마찬가지로 빅데이터를 다루기 위해

공간 빅데이터를 분석할 수 있는 GIS 도구들을 출시했다

그 도구들의 주요 예시는 아래와 같다

 

1. Java로 공간 데이터 분석을 위한 MapReduce application을

개발할 수 있는 geometry API

2. Hive Query Language(HQL)을 사용하여 공간 데이터를

SQL과 유사한 방식으로 쿼리할 수 있는 공간 프레임워크

3. Hadoop과 ArcGIS의 공간 처리 기능을 결합한

geoprocessing toolbox

 

또한 ESRI의 ArcSDE는 RDBMS gateway로

ArcGIS 사용자가 IBM DB2, Informix, Oracle, Microsoft SQL Server, PostgreSQL 등

인기있는 데이터베이스에 공간 데이터를 저장, 사용, 관리할 수 있도록 지원한다

 

 

Future Research Work

Python과 R에서의 Hadoop 혹은 Spark API 사용은

아직 종합적인 평가가 이루어지지 않아 성능이 불분명하다

또한, 이러한 API는 해당 언어에 맞게 컴파일을 해야하므로

추가 overhead를 발생시킬 가능성이 높다

 

또한 R에서도 빅데이터 처리를 위한

시스템을 개발할 필요가 있다

 

또한, GIS software는 Machine Learning과

Deep Learning 모델을 통합하여

더 발전된 공간 데이터 분석을 제공해야한다

 

 

 

Conclusion

본 논문에서는 공간 데이터 베이스, 대형 시공간 인프라,

프로그래밍 언어, 소프트웨어 도구를 포함하여

시공간ㄱㄷㅅSㄷ 데이터 분석의 전체 생태계에 대한 포괄적인 연구를 진행하였다

 

이에 따라 본 논문에서는

연구 커뮤니티가 향후 연구에서 해결해야 할

시공간 데이터 분석의 분야를 제시한다

 

1. 공간 래스터 데이터 모델링 및 분석에 대한 더 많은 지원

2. 시공간(경로) 데이터 스트림 처리에 대한 더 많은 지원

3. SQL과 유사한 쿼리 통합 또는 개선

4. 대형 시공간 인프라에서 분석 및 시각화에 대한 더 많은 지원

5. 시공간 데이터 분석에서 GPU 사용에 대한 추가 연구


자그마치 44 페이지의 역대급 논문을 리뷰하느라

정말 힘들었지만 ㅎㅎ..

그래도 공간데이터베이스를 연구해보려고 하는 나에게

입문용으로 읽기 좋은 논문이었던 것 같다

 

하지만 모든 개발이나 기술들이 그렇듯

직접 코딩해보고 사용해보면 정말 쉽게 이해가되는데

이렇게 글로만 읽으니 와닿지 않는 건 어쩔 수 없는 것 같다

 

 

또한 지금은 2024년인데 2021년에 발표된 논문이라

본 논문에서는 최신 기술이라고 말하지만

현재의 나 입장에서는 최신 기술이 아니라

더 최신 논문을 살펴 볼 필요도 있다는 생각이 들었다

 

아무튼 이번 논문리뷰는 여기서 마무리-!