OLTP
OLTP(Oline Transaction Processing)은 일반적인 데이터 조작 및 트랜잭션 처리에 용이하도록 구성된 시스템을 말한다. 시스템이 사용자 요청에 즉각 반응하여 처리하는 서비스를 가리키는 용어이기도 하다. 가장 기본적으로 사용되는 정보 시스템으로, 무수히 발생하는 작업 요청을 오류없이 처리하고 저장된 데이터들의 무결성을 유지한다. 작업 요청을 트랜잭션 단위로 압축하여, 다수의 이용자가 거의 동시에 이용하는 것이 가능하다.
OLAP
OLAP(Online Analytical Processing)은 방대한 양의 비즈니스 데이터를 분석에 용이하도록 구성된 시스템을 말한다. 이미 저장된 데이터를 기반하여 분석하는데 중점이 되는 서비스를 가리키는 용어이기도 하다. 대량의 데이터를 다차원적으로 분석할 때, 데이터를 빠르게 분석하고 의미있는 정보로 치환하거나 복잡한 모델링이 가능하도록 설계된 시스템이다. 데이터마트(DM)나 데이터웨어하우스(DW), 데이터레이크(DL)에 저장된 데이터를 분석하여 사용자에게 유의미한 정보를 제공해준다.
OLTP vs OLAP
일반적으로 OLTP의 경우 정규화(3NF)된 테이블로 이루어져있다. 이런 정규화를 만족하는 OLTP 데이터베이스에서 분석 질의를 수행하면 복잡한 JOIN 연산을 여러 테이블에 수행하여 컴퓨팅 자원을 많이 소모하게 된다. 쓰기 속도를 최적화하기 위해 인덱스가 적은 OLTP에서 큰 단위의 분석 질의가 수행되면 트랜잭션으로 인해 분석 질의 속도가 저하되기 때문에, 분석 질의 전용 데이터베이스가 필요해 OLAP가 등장하게 되었다.
OLTP는 현재의 데이터가 얼마나 정확하고 무결하게 저장되어 있는지가 중요하고, OLAP는 이미 저장된 데이터를 바탕으로 데이터를 어떻게 분석하는지가 중요하다. 다시말해 OLTP가 우선적으로 선행되어 데이터를 무결하게 저장하고, OLAP는 무결하게 저장된 데이터를 사용자에게 어떻게 표현하고 제공하는지를 다룬다.
구분 | OLTP | OLAP |
목적 | 비즈니스 활동 지원 | 비스니스 활동에 대한 평가 및 분석 |
주 트랜잭션 형태 | SELECT, INSERT, UPDATE, DELETE | SELECT |
속도 | 수초 이내 | 수초 이상 수분 이내 |
데이터 생명주기 | 실시간 | 과거 |
관리 단위 | 테이블 | 분석된 정보 |
데이터 처리 단위 | 트랜잭션 중심 | 정보 중심 |
중요도 | 데이터의 정확도, 일관성 | 데이터 분석 결과 출력 속도 |
최적화 방법 | 트랜잭션 효율화, 무결성 극대화 | 조회 속도 증가, 편의성 증대 |
데이터의 모델링 | 정규화 중심 모델링 | 분석, 집계 중심 모델링 |
예시 | 회원정보 수정
상품 주문
댓글 남기기 및 수정 | 1년간 주요 트랜드
한달 간의 항목별 수입 및 지출
10년간 직급별 임금 상승률 |
HTAP(Hybrid Tranactions/Analytical Processing)은 데이터의 수정이 발생하며 짧은 시간에 실행되는 OLTP와 오랜 시간에 걸쳐 데이터를 분석하는 OLAP가 동시에 수행되는 워크로드를 의미한다.
Row-Oriented DB
Row-Oriented DB는 각 데이터를 레코드 단위로 저장하고, 메모리 상으로 레코드끼리 수평적으로 저장된다.
이와 같은 레코드를 저장한다고 하면,
varchars와 같은 타입이라면 매우 다양한 크기의 value를 가질 수 있기 때문에, 실제 저장된 데이터파일은 이와 같이 저장되어있을 것이다.
구체적인 예시를 살펴보자.
이와 같은 테이블을 Row-Oriented DB에서는
이러한 형태로 Row별로 연속적으로 저장된다.
이와 같은 형태로 저장하기 때문에 새로운 데이터를 추가하는 경우에 맨 뒤에 하나의 페이지만을 추가하기 때문에 용이하다. 또한 하나의 레코드 전부를 읽거나 변경하는 경우에도 유리하다.
반면, 다수의 레코드의 특정 column값만 필요하더라도 데이터가 연속적으로 저장되어있어 불필요한 column을 전부 읽어야한다는 단점이 있다. 이 때문에 데이터 간의 집합을 만드는 경우(aggregation) 속도 저하 현상이 발생한다.
PostgreSQL이나 MySQL과 같은 기존의 RDBMS들이 Row-Oriented 방식으로 데이터를 저장하고, 이러한 Row-Oriented 방식은 OLTP 스타일의 애플리케이션에 최적화 되어있다.
Column-Oriented DB
Column-Oriented DB는 데이터를 필드 단위로 기록하며, 메모리 상 필드끼리 수평적으로 저장된다.
위의 테이블의 경우 Column-Oriented DB에 저장하면,
이러한 형태로 Column별로 연속적으로 저장된다.
이와 같은 형태로 데이터를 저장하기 때문에 데이터 집합을 만드는 경우 추가적인 메모리 소모나 불필요한 접근이 없어 성능이 크게 향상된다. 또한 데이터 쿼리를 할 때 성능이 더 좋은 경우가 있다.
반면, 데이터를 추가하는 경우 각 열의 마지막 데이터 위치를 조회하여 그 옆에 추가하기 때문에 메모리 전체를 조회해야 한다는 단점이 있다. 하지만 이는 각 열마다 저장되는 메모리 공간을 분리함으로써 해결이 가능하다.
Redshift나 BigQuery, Snowflake 등의 DB가 Column-Oriented 방식을 사용하고, 이러한 Column-Oriented 방식은 OLAP 스타일의 애플리케이션에 최적화 되어있다.