빅데이터를 효율적으로 탐색하려면 데이터를 시각화하는 환경이 마련되어야 합니다.

 

크로스 집계

데이터 시각화에서 먼저 기본이 되는 것은 크로스 집계입니다.

테이블

행과 열이 교차하는 부분에 숫자 데이터가 들어가는 테이블을 크로스 테이블이라고 합니다.

크로스 테이블 예시

크로스 테이블은 사람들이 보기 편한 테이블이지만, 데이터베이스에서는 다루기 힘든 데이터 형식입니다.

데이터베이스에 새로운 행을 추가하는 것은 쉽지만 새로운 열을 추가하는 것은 쉽지 않기 때문입니다.

따라서, 테이블의 바탕이 되는 데이터는 행방향으로만 증가하게하고, 열방향으로는 증가하지 않도록 해야합니다.

행 방향으로만 증가하는 테이블을 트랜잭션 테이블이라고 합니다.

트랜잭션 테이블 예시

트랜잭션 테이블에서 크로스 테이블로 변환하는 것이 크로스 집계라고 합니다.

 

소량의 데이터를 크로스 집계하는데 편리한 것이 스프레드시트의 피벗 테이블 기능입니다.

피벗 테이블 기능은 엑셀에서 사용하는 것이 일반적이지만, 구글 스프레드시트에서도 사용할 수 있습니다.

 

트랜잭션 테이블에서 특정 칼럼을 기준으로 다른 테이블을 결합하고 싶을 때 사용하는 것이 룩업 테이블 기능입니다.

 

크로스 집계는 BI 도구, 파이썬 Pandas, SQL로도 할 수 있습니다.

 

 

데이터 베이스의 지연 줄이기

데이터 마트를 만들 때 가급적 데이터 처리 지연이 적은 데이터베이스가 있어야 하는데, 거기에는 크게 2가지 선택이 있습니다.

 

첫 번째는 모든 데이터를 메모리에 올리는 것입니다.

수 GB에서 수십GB의 메모리를 제공하는 것은 어렵지 않기 때문에 그 정도의 데이터 양이라면 메모리에 다 올릴 수 있습니다.

그리고 그 정도의 데이터 양이라면 일반적인 RDB가 데이터 마트에 적합합니다.

RDB는 원래 지연이 적고, 많은 수의 클라이언트가 동시 접속해도 성능이 나빠지지 않기 때문에 많은 사용자가 사용하는 실제 운영 환경에서 우수합니다.

하지만 RDB는 메모리가 부족하면 급격히 성능이 저하됩니다.

 

두 번째는 압축과 분산 기법을 사용하는 것입니다.

즉, 데이터를 가능한 한 작게 압축하고 그것을 여러 디스크에 분산함으로써 데이터 로드의 지연을 줄이는 것입니다.

분산된 데이터를 멀티 코어를 활용하면서 디스크 I/O를 병렬 처리하는 아키텍쳐를 MPP(대규모 병렬 처리)라 합니다.

이 아키텍쳐는 대량의 데이터를 분석하기 위해 데이터베이스에서 널리 사용되고 있습니다.

예를 들어, Amazon Redshift, Google BigQuery 등이 있습니다.

 

행 지향 데이터베이스와 열 지향 데이터베이스

행 지향 데이터베이스는 테이블의 각 행을 하나의 덩어리로 디스크에 저장합니다.

그러면 새로운 행을 추가한다면 파일의 끝에 데이터만 쓰면 되기 때문에 고속으로 쓰기가 가능합니다.

데이터 검색을 고속화하기 위해 적절한 인덱스를 만드는 것이 중요합니다.

 

열 지향 데이터베이스는 테이블의 컬럼 단위로 디스크에 저장합니다.

칼럼 단위로 저장 함으로써, 필요한 칼럼만을 로드할 수 있어서 디스크 I/O를 줄입니다.

같은 칼럼에는 종종 유사한 데이터가 나열되고, 같은 문자열의 반복은 매우 작게 압축할 수 있습니다.

그렇기 때문에 열 지향 데이터베이스는 행 지향 데이터베이스의 1/10 이하로 압축할 수 있는 우수한 압축 효율을 보여줄 수 있습니다.

 

MPP

MPP는 열 지향 데이터베이스에서 사용합니다.

왜냐하면 열 지향 데이터베이스의 디스크에서 대량의 데이터를 읽기 때문에 한 번의 쿼리 실행 시간이 길어지고 압축된 데이터의 전개 등으로 CPU 리소스를 필요로 하므로 멀티 코어를 활용하여 고속화하는 것이 좋기 때문입니다.

 

오른쪽이 MPP를 사용한 것

쿼리가 잘 병렬화할 수 있다면, MPP를 사용한 데이터의 집계는 CPU 코어 수에 비례하여 고속화됩니다.

단, 디스크를 로드하는 과정에서 병목현상일 발생하지 않게 데이터가 고르게 분산되어 있어야합니다.

 

MPP는 구조상, 고속화를 위해 CPU와 디스크 모두를 균형 있게 늘려야합니다.

따라서, 일부 제품은 하드웨어와 소프트웨어가 통합된 제품으로 제공됩니다.

이처럼 하드웨어 수준에서 데이터 집계에 최적화된 데이터베이스를 MPP 데이터베이스라고 합니다.

 

MPP의 아키텍처는 Hadoop과 함께 사용되는 대화형 쿼리 엔진으로도 채택되고 있습니다.

(Hadoop: 대량의 데이터를 분산 처리를 위한 프레임워크)

이 경우 데이터를 저장하는 것은 분산 스토리지의 역할입니다.

안정성은 MPP 데이터베이스, 편리성은 대화형 쿼리 엔진 쪽이 좋습니다.

 

 

시각화 도구

데이터를 시각화하는 소프트웨어는 여러 종류가 있습니다.

스프레드시트

스프레드시트는 도입이 간단해 피벗 테이블을 사용하여 크로스 집계를 하고 그래프를 작성하기 쉽습니다.

또한 클라우드 서비스라면 다른 팀원과 공유하기 좋고, API 등으로 데이터를 자동으로 업데이트하는 것도 가능합니다.

 

스프레드시트 도구로는 구글 스프레드시트 등이 있습니다.

 

주피터 노트북(Jupyter Notebook)

어떤 데이터 분석이라도 처음에는 애드 혹(adhoc) 분석부터 시작합니다.

원하는 데이터가 어디에 있는지 모르고, 집계 시간도 얼마나 걸릴지 모르기 때문에 여러 번의 시행착오를 반복하면서 데이터를 살펴봐야 합니다.

그런 과정에서는 대화형 실행 환경이 자주 사용되고 그 도구로 인기가 있는 것이 주피터 노트북입니다.

주피터 노트북은 웹 브라우저에서 실행되고 사용할 수 있는 언어 중에서 선택해서 사용할 수 있습니다.

주피터 노트북에서 matplotlib 라이브러리를 사용해 시각화 할 수 있습니다.

그리고 수동으로 워크플로의 실행이 가능하고 !명령어로 외부 명령어를 실행할 수 있습니다.

주피터 노트북 예시

 

대시보드 도구

정기적으로 쿼리를 실행해 보고서를 작성하거나 주요 그래프를 모아서 대시보드를 작성한다고 하면 BI 도구를 사용할 수 있습니다.

하지만 대시보드를 만드는 것만이 목적이라면 그것에 특화된 도구가 있습니다.

 

대시보드는 새로운 그래프를 쉽게 추가하거나 정해진 지표의 일상적인 변화를 모니터링 할 때 더 적합합니다.

 

오픈 소스의 대시보드 도구는 Redash, Superset 등이 있고, 실시간 시각화 도구는 Kibana등이 있습니다.

Kinana는 검색 엔진인 Elasticsearch의 프론트 엔드로 개발되었기 때문에 Elasticsearch 설치가 필요합니다.

Redash 예시

 

BI 도구

몇 개월 단위의 장기적인 데이터의 추이를 시각화하거나, 집계의 조건을 세부적으로 바꿀 수 있는 즉, 대화적인 대시보드를 만들 때 적합합니다.

 

BI 도구로 무엇을 보고 싶은지에 따라 여러개의 대시보드가 만들어집니다.

그 과정에서 대시보드의 바탕이 되는 테이블을 하나로 통합하고 그 테이블에서 여러개의 대시보드를 만들면 배치 처리의 부하가 안정됩니다.

 

BI 도구로는 Tableau Desktop 등이 있습니다.

Tableau Desktop 예시

 

BI 도구에서 데이터를 볼 때 어떤 숫자가 어디에서 오는 것인지 그 내역을 파악하고 싶을때, 복잡한 데이터를 분석하기 쉽게 하려면 데이터를 몇 개의 그룹으로 분산하여 각 그룹에 내용을 정리하는 것이 효과적입니다.

이것을 브레이크 다운 분석이라고 합니다.

 

 

테이블

트랜잭션과 마스터

데이터베이스의 설계에서는 종종 테이블을 마스터와 트랜잭션으로 구분합니다.

시간과 함께 생성되는 데이터를 기록한것이 트랜잭션, 트랜잭션에서 참고되는 각종 정보가 마스터입니다.

트랜잭션은 한 번 기록하면 변화하지 않지만, 마스터는 상황에 따라 다시 쓰입니다.

트랜잭션과 마스터의 관계 예시

 

팩트 테이블과 디멘전 테이블

데이터 웨어하우스의 세계에서는 트랜잭션처럼 사실이 기록된 것을 팩트 테이블, 거기에서 참고되는 마스터 데이터 등을 디멘전 테이블이라 합니다.

팩트 테이블을 중심으로 스키마를 그리면 별 모양으로 보여서 스타 스키마라 합니다.

팩트 테이블과 디멘전 테이블 스타 스키마 예시

 

비정규화 테이블

팩트 테이블에 모든 테이블을 결합한 것을 비정규화 테이블이라고 합니다.

대부분의 경우, 데이터 마트는 비정규화 테이블로 하는 것이 가장 단순하며, 충분히 효율적인 방법입니다.

열 지향 데이터베이스가 아니라면 비정규화 테이블은 데이터양 때문에 바람직하지 않지만, 수백만 레코드 정도의 스몰 데이터라면 문제가 되지 않습니다.

하지만 데이터양이 수천만~수억 레코드 정도가 되어 메모리보다 엄청 많아진다면 열 지향 스토리지를 사용해야 합니다.

'to become 데이터 엔지니어 > 간단한 정리' 카테고리의 다른 글

빅데이터 파이프라인  (0) 2023.01.09
빅데이터의 축적  (0) 2023.01.06
빅데이터의 분산 처리  (0) 2023.01.05
스몰 데이터 분석  (0) 2022.12.29
데이터 파이프라인  (0) 2022.12.28

+ Recent posts