관계형DB vs 컬럼형DB
관계형DB vs 컬럼형DB

관계형DB vs 컬럼형DB

설명
관계형DB와 컬럼형DB에 대해 알아보자. 근데 이제 PostgreSQL과 cassandra를 곁들인
Last Updated
Last updated March 25, 2023
태그
DE
Data Engineering
PostgreSQL
Apach Cassandra

관계형DB

  • 집합 이론을 기반으로 하는 시스템인 관계형 데이터베이스 관리 시스템 (RDBMS)
  • row를 기준으로 데이터를 추가하고 처리됨
  • row-oriented 데이터베이스
 
  • 역사가 가장 오래됨
  • 방대한 툴킷(트리거, 저장프로시저, 진보된 인덱스)
 
  • ACID(Atomic: 원자성, Consistent: 일관성, Isolated:독립성, Durable:지속성)준수에 따른 데이터 안정성
  • 데이터의 무결성을 완벽하게 보장 → 데이터가 유실되거나 중복되면 안되는 금융쪽에선 무조건사용
 
  • 뛰어난 쿼리처리 능력. 다른 데이터 스토어와 다르게 저장된 데이터를 사용하기 위한 계획을 알 필요가 없다. 우리가 필요한 것이 무엇인지만 알려주면 된다.
  • 강력한 인덱스 기능, 트렌젝션 기능을 통해 데이터의 분류, 정렬, 탐색속도가 빠르다
  • 관계 스키마가 잘 정규화되어있다면, 쿼리의 유연성이 좋아진다.
 
  • 데이터를 명확하게 처리할수있고, 이해하기 쉽다. → 많은 기업들에서 사용.. 거의 모든 IT 기업
  • ex) mysql, oracle, PostgreSQL
 
  • 컬럼을 미리 정의하고, 각 컬럼에 대응한 값들을 열로 나열하여 저장
      1. 스키마를 통해 컬럼들을 지정 (create table)
      1. 값들을 row단위로 insert함 (insert)

PostgreSQL

  • 가장 오래되고 실무에 제일 많이 사용된 데이터베이스이다.
  • 자연어 분석 플러그인, 다차원 인덱싱, 지리적 쿼리, 커스텀 데이터 타입 및 그외의 더 많은 특성과 기능들을 가지고 있다.
  • 정교한 트랜잭션 처리
  • 여러 언어를 위한 저장 프로시저 기능
  • 다양한 플랫폼에서 실행
  • 유니코드 지원
  • 시퀀스와 테이블 상속 및 서브 쿼리 기능
  • ANSI SQL(American National Standards Institute)을 가장 잘 준수
 

문제점

  • 대부분의 관계형 DB는 부하를 분석하기 어렵다
  • 선형적인 확장이 불가능함
→ 빅데이터를 처리하기에 비효율적
 

컬럼형DB

  • amazon redshift, cassandra
  • 관계형 DB의 한계인 대용량 데이터 처리와 확장성을 고려한DB
 
  • 컬럼형으로 데이터를 저장한다는 특징
    • 선형확장 가능
    • 빅데이터 처리에 유리함
    • → 대용량 처리가 필요한 경우 많은 기업들이 활용 중이다
       

아파치 카산드라

  • 컬럼 패밀리 데이터베이스
  • 컬럼 패밀리라고 불리는 특정 몇개의 컬럼들을 기준으로, 파티션 키를 지정
  • 해당 파티션 키 아래에 데이터들이 저장
 
  • Cassandra query lanaguage에서 컬럼패밀리를 사용하여 테이블을 생성하고 insert 할수있다.
 
  • 테이블의 생성은 일반적인 관계형 DB와 비슷하다. 중요한 점은 파티션 키를 설정해야한다는 점
  • 파티션 키로 설정된 컬럼은 카산드러의 클러스터 노드 중 특정 노드에 저장되도록 설정된다
  • 클라이언트가 데이터를 불러올때는 반드시 파티션키를 사용해야한다.
→ 파티션 키를 통해 어느 노드에 데이터가 들어있는지 확인할 수 있기 때문이다. 파티션키를 통해 key value와 유사한 느낌으로 node를 찾기 수월해진다.
 
notion image

장점

  • 파티션 key를 통해 insert와 select를 수행함
    • 데이터를 분산저장
    • 데이터 양에 따라 노드를 수백개로 늘려서 선형으로 scale out이 가능하게 된다.
    •  

단점

  • 이미 생성된 파티션키를 수정할 수 없다
    • 테이블 설계가 잘못되어 수정할땐 테이블을 삭제하고 다시 만들 수 밖에 없다.
  • 파티션 키가 아닌 데이터를 where 절로 필터링이 어렵다
    • secondry index를 사용하면, 파티션 키가 아닌 데이터에 대해 제한적인 필터링을 제공하지만...
    • 전체 데이터를 스켄하기에 성능이슈가 있어, 서비스에 활용하긴 어렵다...
    •  
       

참고자료