Database 선택 가이드

이번 포스팅에서는 RDB 부터 여러 DB들의 강점과 약점을 알아보고, 어떠한 경우에 각 DB들을 적용하면 좋을지 정리해 보자.

RDB (Relation Database)

관계형 데이터베이스로, 가장 오래되고 많이 알려져있다. Mysql, Oracle, PostgreSql등이 속해 있다. 여기서 관계(Relation)란 key와 value의 관계를 말하며 RDB에서는 이러한 관계들을 Shcema를 가지는 Table로 표현하여. 데이터들은 이 Schema를 통해 여러 개의 테이블에 분산되어진다. RDB는 아래와 같은 특징을 가진다.

강점

  • 데이터 타입과 Constraint를 통해 데이터 무결성을 보장함으로 데이터 품질을 향샹시킴
  • 정형화된 데이터 처리에 적합하며 ACID 트랜잭션을 지원한다.
  • 대부분의 생태계를 장악하고 있어, 엔진 지원 및 참고 자료들이 풍부하다.
  • 정규화, 튜닝등 성능향샹을 위한 여러가지 기능들을 제공한다.

약점

  • 비정형 데이터 처리에 한계가 있다.
  • 고정된 Schema에 대해 변경이 힘들다.
  • 구성과 확장에 많은 비용이 드는 경향이 있다.
    • 서버를 여러 개 더 추가하는 방식의 수평 확장(Scale Out)서버 하나에 자원을 더 추가하는 수직 확장(Scale Up)에 비해 더 빠르고 경제적인 경우가 대부분이다. 그러나 RDB에서는 정형화된 구조때문에 Scale Out 과정이 복잡하다. (샤딩이 있지만 제한이 있고 구현이 어렵다)

적합한 상황

​ 데이터의 완전성이 무엇보다 중요한 상황, 재무 응용프로그램, 방어 및 보안, 개인 건강 정보등이 대표적이다. 이 밖에도 고도로 정형화된 데이터, 내부 프로세스의 자동화 등에 적합하다.

Document DB

데이터를 JSON, BSON 또는 XML 문서에 저장하는 비관계형 데이터베이스로 유연한 스키마가 특징이다. 스키마를 지정하지 않고 데이터를 입력 할 수 있고, 정형화된 구조를 강요하지 않는다. Document 기반으로 RDB와 비교했을 때 큰 하나의 테이블을 사용한다고 생각 할 수 있다. 대표적인 예로 몽고DB, Couchbase 등이 있다.

강점

  • 매우 유연하여, 반정형 또는 비정형 데이터 처리에 적합하다.
  • 수평확장(Scale Out)에 용이하고 직관적이다.

약점

  • 유연성을 위해 ACID 준수를 희생 ( ex) 스키마가 유동적으로 변화함으로 저장된 데이터들의 일관성이 깨질 수 있다.)
  • 쿼리는 하나의 Document 내에서만 가능하며, 여러 Document에 걸친 쿼리는 불가능하다.

적합한 상황

데이터의 정확성보다 양이 중요한 빅데이터에 적합, 스키마를 작성하지 않고 시작이 가능하기에 빠른 프로토 타입등에 적합하다. 또한 비정형 데이터에 적합하다.

In Memory Store

각 값이 특정 키와 연관된 비 관계형 데이터베이스의 일종으로 디스크가 아닌 메인 메모리에 모든 데이터를 저장한다. 때문에 데이터 접근이 훨씬 빠른 것이 장점이나 그 크기의 한계와 휘발성이라는 단점을 가지고 있어 주로 캐시 저장소로 많이 사용된다. 대표적으로 Redis, Memcached등이 있다.

휘발성을 보완하기 위해, 메모리에 CRUD 된 값들을 모두 디스크에 로그로 기록하기도 하고, 재구동 될 때 디스크로부터 로그파일을 읽어와 메모리에 구조를 재 구축하기도 한다.

강점

  • 메모리에 데이터를 보관하기 때문에 데이터 접근이 매우 빠르다.
  • 코드를 다시 작성하지 않고도, 한 시스템에서 다른 시스템으로 옮길 수 있다.

약점

  • 가격이 비싸고, 데이터 안전성이 떨어진다.

적합한 곳

세션관리, 자주 접근하지만 자주 업데이트 되지 않는 데이터에 적합

Wide - Column Store

확장가능 기록 저장소라고도 한다. 동적인 Column 지향 비관계형 데이터베이스다. 일종의 Key - Value Store로 보는 경우도 있지만 전통적인 RDB의 속성도 함께 가지고 있다. Wide Column Store는 스키마 대신 keyspace 개념을 사용한다. 테이블과 비슷하지만 구조 면에서 더 유연하다. keyspaces는 칼럼 군을 포괄하고, 각 칼럼 군은 구별된 여러 개의 행이 들어 있다. 이 중 타임스탬프를 통해 가장 최근 버전의 데이터를 판별한다. 대표적인 예로 Cassandra, HBase 등이 있다.

강점

  • 다른 비관계형 DB보다 정형 데이터 및 반정형 데이터 처리에 성능이 좋다
  • 관계형 DB보다 Scale out이 쉽고 속도가 빠르다.
  • Column 기반 DB는 Row 기반 DB보다 압축이 더 잘되고, 대규모 데이터 집합을 간단하게 탐색 할 수 있다. 예를 들어 집계 질의에 성능이 뛰어나다.

약점

  • 소규모로 사용할 때 많은 비용이 든다.
  • 개별 기록을 업데이트하기 어렵다.
  • 트랜잭션 처리 시에 관계형 DB보다 느리다.

적합한 경우

속도가 중요한 빅데이터 분석, 빅데이터에 대한 웨어하우스 작업, 대규모 프로젝트에 적합 일반적인 트랜잭션 App에는 적합하지 않다.

Reference

http://www.ciokorea.com/news/38041