CS

[CS] - 열 기반 데이터베이스 VS 행 기반 데이터베이스

jyu_seo_ 2026. 1. 6. 14:56

행 기반 데이터베이스(Row Oriented Database)

행 지향 데이터베이스라고도 부른다.

일반적으로 우리가 사용하는 Oracle, MySQL, PostgreSQL와 같은 일반적인 데이터베이스가 행 기반 데이터베이스에 해당된다.

데이터를 행 단위로 추가하는것을 의미하며, 레코드 단위의 읽고 쓰기에 최적화 되어있다.

데이터 검색을 고속화하기 위해 인덱스를 사용한다.

인덱스가 없다면 모든데이터를 로드해야 원하는 데이터를 찾을 수 있어서 데이터 I/O가 많이 발생하고 성능이 저하된다.

레코드 단위로 데이터가 저장되어 있기 때문에 필요없는 열까지 디스크로부터 로드된다.

 

행 기반 데이터베이스1

위 그림과 같이 행 기반 데이터베이스는 화살표처럼 디스크에 한행씩 저장되는 형태이다

데이터를 추가하면

행 기반 데이터베이스2

 

위 그림과 같이 한 행씩 끝에 추가되는 형태이다.

추가된 행을 디스크에 추가하려면 원본 데이터의 끝에 추가하면 된다.

 

테이블에서 모든 사람의 평균 연령을 얻고 싶다고 가정했을 때, 전체 행에 접근하게 된다.

디스크가 너무 작아서 하나의 디스크에 하나의 행만 저장할 수 있다고 가정했을 때는 상황이 더욱 악화된다.

모든 단일 디스크에 접근을 해야하기 때문이다.

또한 우리가 필요한 열은 Age 뿐인데 행 기반 데이터베이스는 행 단위로 불러오므로 Name, City와 같이 필요없는 열 또한 불러오게 된다.

이로인해, 디스크 I/O에서 많은 부하가 발생하고, 성능 또한 낮아질수 밖에 없다. 

열 기반 데이터베이스(Column Oriented Database)

열 지향 데이터베이스라고도 한다.

Amazon Redshift, Google Bigquery, Teradata, Snoflake, Cassandra, HBase등이 있다.

Column(열)을 기반으로 하기 때문에 필요한 열만 로드하므로 디스크 I/O를 줄이고, 높은 성능을 가지고 있다.

또한, 같은 열에는 유사한 데이터가 반복되기 때문에, 행 기반 데이터베이스보다 훨씬 작게 압축할 수 있다.

열 기반 데이터베이스 1

 

위 그림과 같이 열기반 데이터베이스는 앞쪽에 Name 열, 중간에는 City 열, 끝쪽에는 Age 별로 나누어 저장하게 된다.

열 기반 데이터베이스 2

 

열 기반 데이터베이스는 각 Column 별로 추가되어야 할 자리를 찾는 과정이 필요하다.

따라서 조회작업의 성능은 행 기반 데이터베이스에 비해 높은 반면에 값을 삽입,수정,삭제하는 과정에서는 레코드의 수도 많고,

이에 따라 인덱스가 리빌드 되어야 하는 과정이 포함되어 있어 성능이 현저하게 낮다.

이 경우에는 행 기반 데이터베이스가 더욱 성능이 뛰어날 뿐만 아니라, 완전성 측면에서 안전하다.

열 기반 데이터베이스 3

 

같은 데이터를 열 기반 데이터베이스에 저장할 경우 평균 연령 데이터를 구하기 위해서는 Disk 3에만 접근을 하면 되므로 확실히 접근해야 하는 디스크 수가 적은것을 알수 있다.

 

정리

Row Oriented Database

기간계 시스템이라고 부르는 OLTP 환경(Insert, Update, Delete 작업이 빈번한 환경)에서 유리하게 작용한다.

 

장점

  • row 삽입, 수정, 삭제 시 매우 간편하다.
  • 행 단위로 데이터를 조회할 경우 성능을 보장한다.

단점

  • 특정 필드(열) 데이터 집합을 조회할 때 성능이 떨어진다.

Column Oriented Database

분석계 시스템이라고 부르는 OLAP환경(Select 작업이 빈번한 환경)에서 유리하게 작용한다.

 

장점

  • 특정 필드 데이터 집합을 조회할 때 성능이 뛰어나며, 추가 메모리 할당없이 작업을 수행할수 있다.
    • 추가메모리 할당이 없다: 하나의 테이블에 모든 데이터가 들어있어 다수의 테이블을 키로 연결하는 JOIN 구문을 사용하지 않고 하나의 대상 테이블에 단일 쿼리를 사용하여 데이터를 가져온다.

단점

  • 데이터 추가 작업을 수행할때, 각 데이터의 마지막 위치를 확인하는 작업이 필요하며, 데이터 삽입, 수정, 삭제시 성능이 떨어진다.