프로그래밍 입문

데이터베이스 분류2

토픽 프로그래밍 입문 > IT 일반

관계형(Relational)

데이터베이스계의 주류. 아직도 주류의 자리에서 내려오지 않고 있다. 데이터를 컬럼(Column)과 로우(Row)라는 일종의 표 형태로 저장한다. 데이터의 종속성은 관계(Relation)으로 표현한다.
한 테이블에 있는 모든 로우는 같은 길이의 컬럼을 가지고 있으며 이 컬럼의 구조와 데이터의 관계가 테이블 스키마(Schema)로 사전 정의된다.
역사가 오래된 만큼 가장 신뢰성이 높고 데이터의 분류, 정렬, 탐색 속도가 빠르다. SQL이라는 고도로 정교한 검색 쿼리를 제공하며 상상하는 거의 모든 방식으로 데이터를 다룰 수 있게 해 준다. 또한 트랜젝션(Transaction) 지원이 매우 강력하여 신경만 제대로 써주면 데이터가 안 들어가는 경우는 있어도 잘못 들어가는 경우는 없다.

예를 들어 금융거래시 구매자 통장에서 돈이 빠져나가고 뒤이어 판매자 통장에 돈이 들어와야 거래가 정상적으로 끝나게 되는데 만약 판매자 통장을 관리하던 컴퓨터가 맛이 갔다고 한다면 RDBMS는 트랜젝션 롤백을 통해 구매자 통장의 잔금을 원상복구 시키면서 거래를 취소한다. 여기선 간단하게 설명했지만 현실에서는 네트워크 이상, 데이터 비트 오염, 하드디스크 이상, 동시성 문제 등 데이터 무결성을 보장하기 위해 넘어야 할 산이 많다. 근데 이 모든 상황을 다 고려해서 그 어떤 상황에서도 데이터 무결성을 '보장'하는 게 RDBMS의 특징이다. 다른 타입의 DBMS는 이정도의 데이터 무결성을 보장하지 못한다! 
그러나 스키마를 수정하기가 어렵고, 데이터가 2차원 표형태로만 출력되기 때문에 트리 구조로 조직화되는 '객체'들과 궁합이 잘 안맞는 게 문제다.  

키-값형(KV store)

모든 데이터를 키(Key)와 값(Value)의 쌍으로 매핑한다. Key를 어떻게 인덱싱했느냐에 따라 다르지만 보통 특정 값 하나를 찾아내는 데에는 가장 뛰어난 성능을 보인다. 하지만 데이터를 그룹화하고 정렬하는 기능은 없다시피하다. 대신 RDBMS에 비해 가볍고, 빠르고, 다루기 쉽다.
웹 캐시나 세션 데이터, 쇼핑몰의 장바구니 데이터 등을 담는 데에 최적인 DB여서 이쪽으로 활용을 많이 한다. 그 외에 KV store는 데이터베이스의 크기가 상대적으로 작아 메모리에 통째로 올려놓고 구동하는 것도 쉽기 때문에 인-메모리 데이터베이스로 많이 사용된다. 인-메모리 데이터베이스는 그 특성상 매우 고속으로 동작하는 대신 데이터의 안정성을 전혀 보장하지 않는데 장바구니 같은 건 날아가도 상관없는 데이터이면서 반응이 즉시 와야 하는 성격이라 주로 선택된다. 

객체형(Object)

프로그래밍 언어에서 객체지향의 개념이 포함되었듯이, 관계형 데이터베이스 이후, 데이터베이스에서도 객체지향을 구현한 것이 바로 객체형 데이터베이스이다. 이러한 DBMS를 ODBMS라고 한다.
다만, 데이터베이스 분야에서는 ODBMS가 주류가 되지는 못했는데, 이유는 쿼리 사용이 복잡해지기 때문이다. 

문서형(Document)

MongoDB의 방식. 위의 객체형과 비슷하다. 문서의 구조를 나타내는 스키마가 필수가 아닌 것이 특징이다.
스키마가 없기 때문에 필드를 마음대로 넣거나 뺄 수 있다. 기존 데이터에 해당 필드가 있든 없든 상관없고 그런 데이터를 상대로도 조회, 그룹핑 등의 작업이 가능하다.
객체 지향 프로그래밍이 주류인 현재, 데이터를 따로 매핑할 필요 없이 그냥 집어넣으면 알아서 잘 저장되는 객체형, 문서형 데이터베이스가 주목받고 있다.
그러나 저장한 상태 그대로의 문서를 뽑아내는 게 아니라 뭔가 데이터를 가공하려고 하면 잘 되지 않는다. 이런 건 RDBMS가 가장 잘 하는 분야.

컬럼형(Column)

Map/reduce에 특화된 DB. Hadoop이 컬럼형 DB이다.
디스크에조차 다 담지 못할 정도의 거대한 데이터를 다루는 게 특기이다. 
NoSQL의 범람을 알리는 신호탄 같은 역할을 했기에 초반에 반짝 유행을 탔으나 이놈은 사용하기가 더럽게 어렵다. 일단 설계 사상 자체가 초대형 빅 데이터를 다루는 데 치중해있어서 최소 12대 이상의 컴퓨터로 클러스터 머신을 구성해야 하고, 그걸 관리하기 위해서는 데이터베이스 뿐만 아니라 네트워크와 하드웨어에 대한 심도깊은 이해가 필요하다. 디스크 하나에 다 못담을만큼 대용량 데이터면 적어도 테라바이트급 데이터라는건데 그만한 데이터를 처리할 만큼 거대한 조직은 은행이나 대형 쇼핑몰(아마존등), 검색엔진 회사(구글등) 정도를 제외하면 거의 없다. 저 Hadoop이라는 놈도 태생은 구글의 빅테이블이다.
 

댓글

댓글 본문
  1. Hyunwoo Jung
    "스키마"에 대한 링크가 잘못되어 있습니다! 누르니 무슨 이상한 애니 캐릭터가 나오네요https://namu.wiki/w/%EC%95%BC%EC%BF%A0%EB%AA%A8%20%EC%9C%A0%EC%B9%B4%EB%A6%AC