728x90
Summary 
컬럼 기반 저장소(Column Oriented Store) 
: 집계/분석에 읽기 특화되어 OLAP에 활용

로우 기반 저장소(Row Oriented Store)
: 등록/수정/삭제에 특화되어 OLTP에 활용 

1. 아키텍쳐 

  • 컬럼 기반 저장소:
    • 데이터를 컬럼 단위로 저장합니다. 각 컬럼은 데이터 타입에 따라 별도의 파일이나 블록에 저장되어, 같은 속성을 가진 데이터가 인접하게 위치합니다.
      대표적인 컬럼 기반 DBMS : Vertica, Paraccel (Actian Matrix and Amazon Redshift), Sybase IQ, Exasol, Infobright, InfiniDB, MonetDB (VectorWise and Actian Vector), LucidDB, SAP HANA, Google Dremel, Google PowerDrill, Druid, kdb+.
    • 예를 들어, 고객 데이터베이스가 있을 때, "이름", "주소", "전화번호" 등의 컬럼이 개별적으로 저장됩니다.
    • 쿼리 시 특정 컬럼만 읽어들이므로 필요한 데이터만 메모리에 로드합니다. 이로 인해 데이터 분석 및 집계 쿼리에 최적화되어 있습니다.
    • 예: "모든 고객의 이름"을 조회할 때, "이름" 컬럼만 읽어들이면 됩니다.
      Column-oriented DBMS (source : clickhouse.com/docs)
  • 로우 기반 저장소:
    • 데이터를 행 단위로 저장합니다. 각 행은 모든 속성을 포함하고 있으며, 레코드가 순차적으로 저장됩니다. 
      대표적인 로우 기반 DBMS : SQL Server, MySQL, PostgreSQL 
    • 같은 고객 데이터베이스에서 "고객ID", "이름", "주소", "전화번호"가 하나의 레코드로 저장됩니다.
    • 쿼리 시 모든 컬럼을 읽어들이는 경우가 많아, 데이터가 많을 경우 불필요한 데이터까지 로드하여 메모리와 I/O 성능에 영향을 줄 수 있습니다.
    • 예: "고객ID와 이름을 가져오기" 위해서는 고객 데이터의 모든 컬럼을 로드해야 할 수 있습니다.

Row-oriented DBMS (source : clickhouse.com/docs)

 

  • 예시 데이터 비교 
    고객 정보를 포함한 데이터베이스를 예로 들어보겠습니다. 데이터는 다음과 같이 구성되어 있습니다.

컬럼 기반(Column Oriented) vs. 행 기반 (Row Oriented)

컬럼 기반 저장소에서는 각 컬럼이 별도로 저장됩니다. 데이터는 다음과 같이 구성될 수 있습니다:

고객ID 컬럼:
[1, 2, 3]

이름 컬럼:
["홍길동", "김철수", "이영희"]

주소 컬럼:
["서울시 강남구 123로", "부산시 해운대구 456로", "대구시 수성구 789로"]

전화번호 컬럼:
["010-1234-5678", "010-2345-6789", "010-3456-7890"]

이러한 저장 방식은 데이터 조회 시 특정 컬럼만 로드할 수 있어, 예를 들어 전화번호만 필요할 경우 전화번호 컬럼만 메모리에 로드하면 됩니다.

로우 기반 저장소에서 행 단위로 저장되게 됩니다.
[1,"홍길동", "서울시 강남구 123로", "010-1234-5678"]
[2,"김철수", "부산시 해운대구 456로", "010-2345-6789"]
[3,"이영희", "대구시 수성구 789로", "010-3456-7890"]

3. 성능

  • 컬럼 기반 저장소:
    • 대규모 데이터 집계 및 분석에 뛰어난 성능을 보입니다. 데이터가 컬럼 단위로 저장되어 있어, 같은 데이터 타입의 컬럼들끼리 압축률이 높습니다.
    • 쿼리 성능이 빠르며, OLAP(Online Analytical Processing) 환경에서 우수합니다.
  • 로우 기반 저장소:
    • 일반적으로 트랜잭션 처리가 빈번한 OLTP(Online Transaction Processing) 시스템에서 성능이 좋습니다. 모든 컬럼을 포함한 한 번의 레코드를 읽기 때문에 데이터 삽입 및 수정 시 효율적입니다.
    • 삽입, 수정, 삭제가 빈번한 환경에서 뛰어난 성능을 제공합니다.

4. 장단점

  • 컬럼 기반 저장소:
    • 장점:
      • 빠른 데이터 분석 및 집계 쿼리 성능.
      • 효율적인 데이터 압축과 I/O 절약.
      • OLAP 및 데이터 웨어하우스에 최적화.
    • 단점:
      • 데이터 삽입, 수정 시 성능 저하.
      • 메모리 소비가 클 수 있음.
      • 복잡한 쿼리 작성 필요.
  • 로우 기반 저장소:
    • 장점:
      • 데이터 삽입 및 수정이 용이하고 빠름.
      • 단순한 데이터 모델링과 쿼리 작성.
      • OLTP에 최적화되어 있음.
    • 단점:
      • 대량의 데이터 분석 시 성능 저하.
      • 비효율적인 데이터 압축.

5. 활용 사례

  • 컬럼 기반 저장소:
    • 대규모 데이터 분석, BI 보고서 작성, 데이터 웨어하우스, 실시간 분석 애플리케이션.
  • 로우 기반 저장소:
    • 트랜잭션 기반 애플리케이션, ERP 시스템, 웹 애플리케이션의 사용자 데이터 저장.
728x90

'Data Science > DB+SQL' 카테고리의 다른 글

[MySQL] 대량의 테스트 데이터 생성 SQL  (0) 2024.09.26
[OLAP] Open Source OLAP DBMS  (0) 2024.09.25
[DuckDB] DuckDB Installation  (0) 2024.09.24
[DuckDB] what is DuckDB  (0) 2024.09.24
[DBMS] Isolation Level  (0) 2024.09.21
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기
반응형