로그 데이터 같은 비정형(Unstrucutred) 데이터는 보통 분산 파일 스토리지(HDFS, S3 등)에 저장된다. 그리고 이들을 분석할 수 있도록 하기 위해 분산 처리 기술(Spark, MapReduce 등)을 사용하여 정규화 작업을 거친다. 이때 정규화된 데이터는 MPP Database(Redshift, Bigquery 등)나 Columnar Database(Hive 등)에 저장한다. (대용량 데이터들은 Aggregation을 할 때 비용이 크므로 상황을 고려해 비정규화하는 것도 중요하다고 함)
마지막으로 BI 툴이나 Zeppelin, jupyter 같은 시각화 툴을 활용해 시각화를 진행한다. 이때 크로스 집계(비정규화)를 통해 여러 인사이트를 추출하기도 한다.
트랜잭션 테이블 : 기존 RDB 구조처럼 행을 추가하기에 용이한 테이블
크로스 테이블 : 행과 열이 교차하는 부분에 값이 들어가는 테이블. 열을 추가하기에 용이함
피벗(Pivot) : 행에 있는 값들을 열로 피벗시켜 크로스 테이블을 만드는 과정
트랜잭션(팩트 테이블) → 크로스 테이블로 가는 과정을 크로스 집계라고 함. 결국엔 인사이트 추출하는 과정으로 가는 과정인듯
Join과 똑같다고 보면됨. 테이블끼리 서로 Join시키는 기능
RDB는 메모리가 부족하면 성능이 급격히 저하. 그래서 데이터 크기가 매우 큰 건 RDB로는 한계가 명확함. 또한 I/O 작업은 일반적으로 CPU의 싱글코어를 사용함.
분산된 데이터를 읽어들이러면 멀티 코어 활용하면서 I/O 병렬 처리하는 것이 효과적임. 이를 MPP 기술을 사용한다고 함. MPP는 Massive Parallel Processing의 약자로 대규모 분산 처리 기술임.
대표적인 MPP 데이터베이스로 Redshift, Bigqeury가 있다.
RDB가 행지향 데이터베이스임. 행으로 데이터가 쌓임. 기본적으로 하나의 쿼리는 싱글 코어에서 동작하므로 오래 걸리는 작업이 아니면 상관없음.