Miran은 분석 시스템의 근간을 이해하기 위해 OLTP(Online Transactional Processing)와 OLAP(Online Analytical Processing)의 차이를 명확히 설명합니다. Ruby 개발자들이 익숙한 OLTP는 개별 레코드의 읽기/쓰기 및 트랜잭션 처리에 최적화되어 있는 반면, OLAP는 대량의 레코드를 읽어 특정 컬럼의 값을 요약하고 집계하는 데 중점을 둡니다. 이는 데이터 접근 방식에서 ‘행(row)’ 중심에서 ‘열(column)’ 중심으로의 전환을 의미하며, 분석적 사고방식의 핵심이라고 강조합니다. 이어서 롤업(Rollup), 슬라이싱(Slicing), 다이싱(Dicing), 피벗(Pivot), 드릴다운(Drill-down)과 같은 주요 분석 연산들을 분석 큐브(Analytical Cube) 개념과 함께 구체적인 예시를 통해 설명하며, 이러한 연산들이 대규모 데이터 처리에서 성능을 보장하는 데 얼마나 중요한지 설명합니다.
Salesloft의 기존 시스템은 Kafka를 통해 유입되는 실시간 통화 이벤트를 처리하며, 이를 PostgreSQL 데이터베이스 내의 시간별, 일별, 월별 롤업 테이블로 집계합니다. Ruby on Rails의 after_create
콜백과 Sidekiq, Clockwork와 같은 도구를 활용하여 이벤트 발생 시 큐에 데이터를 추가하고, 주기적으로 롤업 작업을 수행합니다. 특히, 롤업되지 않은 최신 데이터와 이미 롤업된 데이터를 통합하여 사용자에게 제공하기 위해 데이터베이스 뷰(DB View)를 활용하는 복잡한 로직을 구현했습니다. 이는 PostgreSQL이 OLTP에 최적화된 관계형 데이터베이스임에도 불구하고, OLAP 기능을 모방하려 했던 시스템의 특징입니다. 그러나 이러한 맞춤형 솔루션은 수천만 건의 이벤트와 수십억 건의 통화 기록을 처리하는 규모에서 한계에 부딪혔습니다. 특정 차원(dimension)에 고정된 롤업 방식은 유연한 맞춤형 분석을 어렵게 만들었으며, PostgreSQL의 성능 문제 또한 대두되었습니다. 데이터 변경 시 롤업된 데이터를 재계산하는 복잡성과 그로 인한 고객 불만 또한 중요한 문제점으로 지적되었습니다.