그동안 프로젝트나 공부를 관계형 데이터베이스(RDBMS)에 관해서만 진행하다 보니 NoSQL이 관계형 모델을 사용하지 않기 때문에 테이블간의 조인을 사용하지 않으며 확장성과 성능이 높다는것만 알고 있었습니다.

좀더 세부적으로 알기위해 정리하였습니다.

NoSQL의 정의

통상적으로 Not Only SQL의 줄임말로 사용되어지고 있는 NoSQL은 데이터의 엑세스 및 관리를 위해 다양한 데이터 모델을 사용하고 있습니다. 이러한 데이터베이스 유형은 데이터베이스의 데이터 일관성 제약 일부를 완화하여 큰 데이터 볼륨, 짧은 지연 시간과 유연한 모델이 필요한 애플리케이션에 최적화 되었습니다.

관계형 데이터베이스와의 차이점

  • 관계형 모델을 사용하지 않으며 테이블간의 조인 기능 없음
  • 직접 프로그래밍을 하는 등의 비SQL 인터페이스를 통한 데이터 액세스
  • 대부분 여러 대의 데이터베이스 서버를 묶어서(클러스터링) 하나의 데이터베이스를 구성 (확장성)
  • 관계형 데이터베이스에서는 지원하는 Data처리 완결성(Transaction ACID 지원) 미보장
    • NoSQL 데이터베이스는 흔히 수평으로 확장할수 있는 보다 유연한 데이터 모델을 위해 관계형 데이터베이스의 일부 ACID 속성(atomicity, consistency, isolation, durability)을 완화함으로써 조정합니다. 그러므로 수평으로 확장해야하는 사례에서는 높은 처리량, 낮은 지연시간을 위해 NoSQL을 사용하는게 좋습니다.
  • 데이터의 스키마와 속성들을 다양하게 수용 및 동적 정의 (Schema-less) (유연성)
  • 데이터베이스의 중단 없는 서비스와 자동 복구 기능지원
  • 다수가 Open Source로 제공
  • 확장성, 가용성, 높은 성능

NoSQL의 종류

NoSQL은 관계형 모델을 사용하지 않으며 다양한 모델을 사용하여 아래와 같은 종류로 나눌수 있습니다.

  • Key-value : Key와 Value가 쌍으로 데이터가 저장되는 단순한 형태로써 속도가 빠르며 분산저장이 용이합니다. 또한 단순한 객체에서 복잡한 집합체까지 어떠한 형태의 데이터라도 담을수 있습니다.
    • Memcached, Riak, Redis, Amazon Dynamo DB, LevelDB 제품이 있습니다.
  • Wide Columnar Store : Key Value에서 발전된 형태의 Column Family 데이터 모델을 사용하고 있습니다. (2차원 key-Value)
    • HBase, Cassandra, ScyllaDB 제품이 있습니다.
  • Document : 데이터는 키와 도큐먼트(documnet)의 형태로 저장되며 도큐먼트 형태는 객체지향에서의 객체와 유사하여 객체를 도큐먼트 형태로 바로 저장이 가능합니다.
    • MongoDB, CoughDB 제품이 있습니다.
  • Graph : 실제 세계의 데이터를 관계와 함께 표현하기 위해 디자인된 모델로써 데이터는 노드, 관계, 특성의 형태로 저장됩니다. 주로 상호 연결된 데이터(소셜 네트워크를 사용하는 사용자들 간의 관계)를 표현하고 복잡한 관계를 간단하게 저장하고 볼수 있게 됩니다.
    • Neo4J, OreientDB 제품이 있습니다.

데이터 모델별 특성

NoSQL Feature.png reference by Wekipedia

Reference