데이터 프로세싱 시스템에는 데이터로부터 무엇을 얻고 싶은지에 따라 나뉘는 두 가지 타입이 있다.
이미지 출처: TechTarget
OLAP는 이름에서 알 수 있듯이 데이터 분석을 위한 방법이다. 예를 들어 A회사의 상품과 매출에 대한 데이터가 있을 때, 이로부터 어느 시기에 어느 지역에서 어떤 제품이 잘 팔릴지, 다음 달에 예상되는 제품의 수요는 어떨지 등등의 인사이트를 OLAP를 통해 얻을 수 있다.
핵심은 이런 다양한 정보(어느 시기, 어느 지역, 어떤 제품)을 어떻게 효율적으로 쿼리하고 분석해내는가이다.
OLAP에서는 여러 데이터 소스로부터 OLAP cube라는 것을 만든다. 이 큐브는 dimension(고객, 위치, 시기) 별로 카테고리화 된 데이터를 갖고 있다. 이런 multidimensional database으로의 쿼리를 통해 답을 얻을 수 있다.
OLTP는 transaction을 위한 방법이다. 흔히 데이터베이스를 생각하면 떠올리는 은행에서의 입출금 처리라던가 웹사이트 계정의 패스워드 변경 등이다.
Transaction에서 가장 중요한 것은 데이터의 무결성이다. 하나의 데이터에 여러 쿼리로부터의 액세스가 일어날 수 있고 최대한 많은 쿼리를 처리해주면서도 각 쿼리가 항상 정확한 값을 얻도록, 데이터가 항상 정확한 값을 갖도록 보장해줘야 한다.
마트에서 계산할 때 사용하는 POS 기를 생각해보자. (참고로 POS 기는 a point of sale의 줄임말이다)
내가 물건을 태그하고 계산하는 순간, 마트의 인벤토리 시스템, Order 관리 시스템, 주차 정산 시스템 등등 여러 시스템과의 transaction이 발생할 것이다. 또 나와 같은 시간에 수십 개의 다른 POS기가 다른 고객의 transaction을 처리해주고 있다.
차이점이란 말이 조금 어색하지만 둘의 특징을 이해하면 좋을 것 같다.
OLAP | OLTP | |
---|---|---|
목적 | 데이터를 분석하여 인사이트를 얻기! | 데이터에 실시간으로 비지니스 로직 수행하기! |
쿼리 | SELECT | INSERT, UPDATE, DELETE |
고가용성 | 흠? | High availability 가능 |
프로세싱 시간 | 몇 초~몇 시간. 환경에 따라, 쿼리에 따라 다르다. | 수 ms 안에 끝나야 한다. |
데이터 소스 | Multi-dimensional schema | Relational DB |
데이터 업데이트 | 주기적으로 수행 | 실시간으로 빠르고 짧게 수행 |
여기서부턴 순전히 나의 생각이다.
인스타그램은 실시간으로 사람들이 포스트를 올리고, 댓글을 달고, 좋아요를 누른다. 또, 태그별로 포스트를 검색할 수 있다.
게다가 전 세계 사람들이 잠도 안 자고 24시간 정말 활발하게 사용하는 것 같다. 초당 쿼리가 몇백만은 되려나?
모든 웹서비스가 그렇겠지만 인스타그램처럼 트래픽이 많은 서비스일수록 기능별로 적합한 DB를 잘 선택해야 할 것 같다.
포스트 자체를 위해선 RDB가 적합할 것 같다. 다만 포스트를 올리는 시점에 여러 분석을 통하는 스트림을 만들 수 있을 것이다.
유저, 해쉬 태그, 위치 정보를 뽑아내서 Elastic Search 같은 시스템에 인덱스와 함께 저장할 수 있을 것이다.
그래서 해쉬 태그나 유저별로 무언가 검색을 할 땐, 저런 OLAP 시스템에 캐시 된 데이터로부터 원하는 정보를 빠르게 얻을 수 있을 것 같다.
참고한 글: https://scaleyourapp.com/instagram-architecture-how-does-it-store-search-billions-of-images/
네이버 쇼핑과 같은 오픈 마켓은 상품 판매 정보와 유저의 구매가 언제나 정확하게 이루어져야 한다(OLTP).
다만, 사람들의 구매 데이터를 모아 두고 월별, 지역별, 연령대 등 multi-dimensional database를 만든다면, 로그인한 유저의 정보에 따라 관심 있을 만한 상품을 추천할 수 있을 것 같다(OLAP). 당연히 이렇게 하고 있겠지?
결국, 비즈니스를 운영하는데 OLAP, OLTP 한 가지만 답이 있는 것이 아니고, 사용자로부터 전달된 데이터는 무결하게 저장 되록 (원하면 수정, 삭제 가능하게) OLTP를, 그 저장된 데이터로부터 여러 '기능'을 제공할 수 있는 OLAP를 사용할 수 있으면 좋은 서비스를 만들 수 있을 것 같다.