NoSQL이란?

|

NoSQL이란?

  • NOT ONLY SQL, 대부분이 오픈소스며 Schema-less 데이터 베이스라고 부른다
  • 간단히 말하면 기존의 관계형 데이터베이스와는 다른 특징을 가진 데이터베이스를 말합니다.

특징

  • 대부분이 관계형 모델을 사용하지 않으며 테이블간 조인 기능없음
  • 대부분이 여러대의 데이터베이스 서버를 묶어서(클러스터링) 하나의 데이터베이스를 구성할 목적으로 만들어졌다
  • 관계형 데이터베이스에서 지원하는 ACID 트랜잭션 미보장 -> 몽고DB 4부터 지원한다고 함
  • 스키마를 정의할 필요 없음, 구조에 대한 정의없이 자유롭게 필드를 추가할 수 있다
  • 확장성, 가용성, 높은성능 Scale-out(수평확장)에 초점을 두고 있다
  • RDBMS에 비해 샤딩처리가 원활
    • 샤딩은 샤드키를 기준으로 하나의 테이블을 수평분할하여 서로 다른 클러스터에 분산저장하고 질의할 수 있는 기법이다

데이터베이스 모델 종류

  • Key-value
  • Document
  • Column-family
  • Graph
    • 그래프 모델을 제외하고 나머지 세 모델은 집합-지향모델이다

key-value 구조

  • 질의 속도가 굉장히 빠르고, 수평적 확장이 용이하다. 그렇지만 값의 내용을 사용한 쿼리가 불가능하다. 데이터를 가공하려면 어플리케이션단에서 키를 이용해서 값을 읽어들인뒤 적절히 처리해야한다.

  • 키-값 저장소는 데이터가 키와 값의 쌍으로 저장된다. 키는 값에 접근하기 위한 용도로 사용되며, 값은 어떠한 형태의 데이터라도 담을 수 있다. 심지어는 이미지나 비디오도 가능하다. 또한 간단한 API를 제공하는 만큼 질의의 속도가 굉장히 빠른 편이다.

  • 대표적인 예로는 Redis, Amazon Dynamo DB가 있다

Document 구조

  • 데이터는 키와 도큐먼트 구조로 저장된다. key-value 모델과는 다르게 value가 계층적인 형태로 저장됩니다. 객체지향에서의 객체와 유사하며, 하나의 단위로 취급되어 저장됩니다. 다시 말해 하나의 객체를 여러 개의 테이블에 나눠 저장할 필요가 없습니다.

  • 주요특징은 ORM과 같이 객체-관계 매핑이 필요없음, 또한 Document 모델에서는 도큐먼트 내의 item을 이용한 쿼리가 가능하다. 다만 이를 위해서는 Xquery나 다른 도큐먼트 질의 언어가 필요하다. 질의 언어가 SQL과 달라 사용에 익숙하기 까지 시간이 걸릴 수 있음.

  • 대표적인 예로는 MongoDB가 있다

집향지향 모델

  • 집합이란 연산의 한 단위로 취급되는 연관된 객체들의 집합이다. 하나의 집합에 대한 연산에서는 트랜잭션을 지원한다.

  • 집합 지향 데이터베이스는 여러 대의 클러스터로 이루어진 시스템에서 사용하기 적합하다. 다시 말해 수평적 확장이 용이하다는 것이다. 이는 관계형 데이터베이스와는 달리 연관된 데이터들이 함께 움직이기 때문이다.

  • 또한 메모리 내의 자료구조와 집합 간 데이터가 잘 일치하므로, 관계형 데이터베이스처럼 객체-관계 매핑 프레임워크가 필요하지 않다. 데이터의 검색도 아주 쉬운 편으로, 키나 ID를 사용하면 쉽게 집합 레코드를 찾아낼 수 있다.

  • 집합 지향 데이터베이스는 조인 연산이 불가능한데, 이를 보완하기 위해 MongoDB나 Cassandra등의 데이터베이스에서는 맵 리듀스(MapReduce) 기능을 제공함으로써 조인과 유사한 연산을 가능하도록 설계했다.

  • 이를 사용하여 데이터 분석도 가능하다. 하지만 사용법이 어렵고 Hadoop의 맵 리듀스에 비하면 속도도 매우 느리다

  • 맵리듀스란?

    • 맵리듀스(MapReduce)는 구글에서 정보 검색을 위한 데이터 가공(색인어 추출, 정렬 및 역 인덱스 생성)을 목적으로 개발된 분산 환경에서의 병렬 데이터 처리 기법이자 프로그래밍 모델이다

결과적 일관성

  • NoSQL에서는 응답시간, 일관성, 지속성의 균형을 위해 결과적 일관성을 구현한다.
  • 결과적 일관성이란, 서버가 여러 대인 분산시스템에서 데이터를 조회 했을 때 특정 서버는 변경 된 데이터가 조회되고 일부는 변경되지 않는 상태로 조회될 수 있다
  • 그 때 데이터 일관성을 위해서 모든 서버에 결과값을 질의하고 N개 이상의 같은 값을 반환할 때 사용자에게 해당 값을 보여주는 형태의 일관성이다

Comments