2019년 8월 4일 일요일

Difference Between ROLAP and MOLAP


Online Analytical Processing

들어가기 전 -
과거 어떤 커뮤니티에서 OLAP을 오엘에이피와 올랩을 구분지어야 한다는 댓글로 논쟁을 하는 사람을 봤는데 쓸데 없는 소모전을 하는 것 같았다. OLTP와 대비되는 개념으로 오엘에이피로 읽어야 하고, 의사결정권자가 데이터를 볼 수 있도록 개발해 놓은 서비스를 올랩으로 읽어야 한다는 것인데 필자가 보기엔 어찌됐든 (오엘에이피든, 올랩이든) 같은 모토와 같은 방향을 바라 보고 있기 때문에 굳이 어떻게 읽느냐로 논쟁의 의미가 있나 싶었다.
결론 - 비효율적이면서 소모적인 논쟁이다.


올랩이란 질문에 대한 답을 얻기 위해 설계된 시스템이다.
여기서 말하는 질문이란 "언제, 어디서, 어떤 성별이, 어떤 카테고리의 물건을 자주 구매하는가?"가 될 수 있다. 이러한 질문에 답을 하기 위해서는 작은시스템(실시간으로 다량의 트랜잭션이 발생하지 않는)이라면 DB에 바로 SELECT - JOIN - GROUP BY 쿼리를 날려 알아낼 수 있다. 하지만 거대한 트랜잭션이 실시간으로 들어오는 OLTP 환경이라면 절대 불가능 할 것이다.
이를 위해 DW가 필요한 것이고 이번 포스팅을 보기 전 아래 포스팅을 참고하면 좋을 것이다.
바로가기 - 전통적 Data WareHouse(데이터 웨어하우스) 아키텍처 및 고찰



그럼 DW를 통해 만들어낼 수 있는 OLAP에 대해 알아보도록 하자.

OLAP에는 크게 ROLAP과 MOLAP이 존재한다. 물론 이 둘을 수용한 HOLAP(하이브리드), DOLAP 등이 있지만 크게는 ROLAP과 MOLAP으로 구분할 수 있다.

picture by Doulkifli Boukraâ


Star Schema(또는 Snowflake schema)로 구성된 Sales, Time, Location, Product라는 테이블이 있다. Sales는 Fact Table이며 Time, Location, Product은 Dimension Table이다.
좌측은 MOLAP, 우측은 ROLAP이다.


질문을 하나 던졌다.
"언제, 어디서, 어떤 상품의 매출이 얼마나 되는가?"

MOLAP에서는 특정 X,Y,Z 좌표의 Cell에 해당 답이 존재할 것이고, ROLAP의 경우에는 Sales, Time, Location, Product를 선으로 잇고 따라가며 결과를 알아낼 수 있을 것이다.

둘 모두 정답을 내놓을 수 있다면 둘 중에 어떤 구조가 효율적일까?
정답은 없으며 각각의 OLAP을 만드는 방법으로 인해 장단점이 존재한다.

MOLAP의 경우에는 미리 질의된 값을 CUBE형태로 저장하고 있다. 그림처럼 다차원 배열을 저장할 수 있도록 설계된 MDBMS가 필요하며 MDX라는 Language로 구현이 된다.
반면에 ROLAP의 경우에는 다차원큐브 형태로 저장하는 것이 아닌 테이블처럼 2차원 배열형태로 저장이 된다.




다양한 유료 솔루션이 존재하기도 하고 apache kylin이나 druid같은 오픈 소스가 존재하기도 한다. 둘 모두 전통적인 ROLAP, MOLAP이라고 하기엔 무리가 있지만 어느 성질에 가까운 지는 작동 방식만 봐도 예상할 수 있다. druid는 테스트를 해보지 않아서 어떤 성질의 OLAP인지는 확실히 알지 못하지만 대략 cube를 만들지 않기 때문에 ROLAP에 가까운 것 같다.  time series이면서 데이터를 인덱싱하여 빠른 조회가 가능할 수 있도록 하는데 druid는 결국 별도의 다차원 CUBE를 만들지 않기 때문에 ROLAP과 가까운 반면 kylin의 경우에 cube를 생성하기 위해 팩트와 디멘전을 정의해주는 단계가 있고 실제 집계하는데 시간을 꽤 투자해야하기 때문에 MOALP쪽에 가까운 것 같다.



그럼 MOLAP VS ROLAP 의 승자는?
MOLAP과 ROLAP을 고르는 기준은 쿼리의 복잡성에 달려있다.
빠른 속도를 원하면 MOLAP, 유연한 확장을 원하면 ROLAP을 택하면 될 것이다.
확실히 일반적인 상황 이상으로 수 많은 차원이 존재하고 자주 차원이 추가된다면 MOLAP은 단점일 수 있다. 왜냐하면 큐브를 새로 만드는 것 외에도 집계하는데 오래 걸리기 때문이다. 최근 몇 개월이 아닌 수년동안의 데이터에 차원 한개를 추가하여 큐브를 다시 집계하는 것은 엄청나게 소모적인 일이기 때문이다. 따라서 이러한 경우에는 ROLAP이 좋을 수 있다. ROLAP의 경우에 집계보다 조회가 오래 걸리기 때문에 아무래도 개발적인 측면에서 (난이도보다는 완성되는데까지의 소요 시간) 더 유리하기 때문이다. 하지만 분명한 것은 이미 정해진 '틀' 안에서는 확실히 MOLAP이 빠르고 다양한 분석(접근)이 가능한 것은 ROLAP인 것은 자명한 사실일 것이다.

댓글 없음:

댓글 쓰기

2022년 회고

 올해는 블로그 포스팅을 열심히 못했다. 개인적으로 지금까지 경험했던 내용들을 리마인드하자는 마인드로 한해를 보낸 것 같다.  대부분의 시간을 MLOps pipeline 구축하고 대부분을 최적화 하는데 시간을 많이 할애했다. 결국에는 MLops도 데이...