Skip to content

Column, Row기반 DB

Row(행) 기반방식은 전통적인 데이터베이스에서 사용하는 레코드 단위 기반의 저장방식이다. 반면 Column(열) 기반방식은 대용량 데이터를 처리하는 데이터베이스에서 사용하는 열 단위 기반의 저장 방식이다. 그러면 이 두 가지 방식이 어떤 차이점이 있는지 자세히 살펴보자.

​아래와 같은 데이터가 들어있는 테이블이 있다고 가정했을 때에 전통적인 방식의 Row 기반방식은 각각의 행이 고유한 ID 값을 가지고 있게 된다. 데이터베이스가 특정 쿼리에 의해서 데이터를 조회하면 레코드 별로 부여되어 있는 고유한 ID를 찾고 그 레코드의 하나의 행에 종속되어 있는 모든 열의 데이터를 모두 불러온다. 그러면 정작 실제로는 필요하지 않은 열까지도 모두 읽게 되는 비효율적인 동작이 발생하는 것이다.

student_idnameclass_idgender
1홍길동1남자
2고양이1남자
3강아지2남자
4김은빈3여자
class_idclass_name
1맑음반
2햇살반
3구름반

그에 비해서 Column 기반 처리방식의 데이터베이스에서는 테이블의 각각의 열들이 모두 고유한 파일 안에 저장된다.

예를 들어서 학생 테이블 안에서 student_id 정보는 하나의 파일에 저장이 되고, 각각의 class_id는 또 다른 하나의 파일에 묶여서 저장이 되는 것이다.

이렇게 열별로 묶어서 데이터를 저장하게 되면, 대량의 테이블에 쿼리를 사용하게 될 때에 고유한 레코드 Id에 종속되어 있는 모든 열을 가져올 필요가 없고 쿼리에서 요구 되는 열들만 읽어들일 수 있기 때문에 Row 기반 처리 방식에 비해서 높은 성능을 발휘할 수 있다.

성능

각 방식의 성능상 특징을 살펴보면 다음과 같다.

Row기반 DB

  • 매일 발생하는 대량의 트랜잭션을 지연 없이 처리하기 위해 데이터 추가를 행 단위로 효율적으로 하는 구조이다.
  • 데이터 검색을 고속화하기 위해 인덱스(index)를 사용한다. 인덱스가 없다면 모든 데이터를 로드해야 원하는 레코드를 찾을 수 있기 때문에 테이블 풀스캔이 발생하여 성능이 저하될 수 있다.
  • 레코드 단위로 데이터가 저장되어 있기 때문에 필요 없는 열까지 디스크로부터 로드될 수 있다.

Column기반 DB

  • 칼럼 단위의 읽고 쓰기에 최적화되어 있다.
  • 열별로 데이터가 저장되어 있기 때문에, 데이터 분석시 필요한 열만을 로드 하여 디스크 I/O를 줄일 수 있다.
  • 같은 열에는 비교적 유사한 데이터가 반복되기 때문에, 매우 작은 용량으로 압축 할 수 있다.
  • 압축되지 않은 행 지향 DB와 비교하여 1/10 이하로 압축 가능하다.

데이터를 어떻게 사용하는지, 데이터의 양의 어느정도인지에 따라(레코드 수에 따라) 다른 DB를 쓰는게 좋다.

정확한 비교는 테이블 구조 및 트랜잭션 유형에 따라 다르겠지만, 통상적으로는 수천만개정도의 데이터가 있다면 RDB, 수억개 이상의 데이터가 있다면 MPP(Column 지향) DB를 쓰는게 더 좋다고 한다.