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
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. Python과 R에서 시공간 데이터 처리를 위한 라이브러리, 패키지, 도구 소개
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년에 발표된 논문이라
본 논문에서는 최신 기술이라고 말하지만
현재의 나 입장에서는 최신 기술이 아니라
더 최신 논문을 살펴 볼 필요도 있다는 생각이 들었다
아무튼 이번 논문리뷰는 여기서 마무리-!
'논문 > spatial-operation' 카테고리의 다른 글
[논문 리뷰] The Case for Learned Spatial Indexes (2020.08.24) (3) | 2024.12.04 |
---|