본문 바로가기

database

NoSQL이란?

NoSQL 

  • 무엇의 약자인지는 여러 의견들이 있지만, 현재 다수가 Not Only SQL란 의미로 사용하고 있다. 해석해보면 "SQL뿐만 아니라" 즉, 기존의 RDBMS가 갖고 있는 특성뿐만 아니라 다른 특성들도 부가적으로 지원한다는 의미이다   
  • 비정형 초고용량 데이터를 처리를 할 수 있는 비관계형 데이터 저장소
  • ACID는 제공하지 않지만, 뛰어난 확장성과 성능을 제공한다 
  • 테이블 간 관계를 정의하지 않아 Join이 불가능하다
  • 분산형 구조를 통해 데이터를 여러 서버에 분산 저장, 상호 복제해 서버 장애가 발생했을 때에도 데이터 유실이나 서비스 중지 없는 구조의 형태를 가진다 
  • 수평적 확장(scale-out)을 쉽게 할 수 있다 
  • 데이터 중복이 발생할 수 있다
  • 정확한 데이터 구조를 알 수 없고, 데이터가 변경/확장 될 수 있는 경우에 사용하는 것이 좋다 
SQL (Structed Query Language)
- DBMS를 조작하는데 사용하는 언어 

DBMS (DataBase Management System) 
- DB를 관리해주는 SW

RDBMS (Relational DataBase Management System) 
- 실제 세계의 데이터를 '관계'라는 개념을 사용해서 표현한 데이터 모델(=관계형 모델)을 기반으로 하는 DBMS 유형 

BASE 속성

  • 가용성과 성능을 중시하는 분산 시스템의 NoSQL 특성이다 

Basic Availability 

  • 분산 DB에서 몇개의 DB에 문제가 있다고 하더라도, 정상 동작하는 DB들이 있으므로 사용자는 계속 가용한 것으로 보임 

Soft-State 

  • 저장소는 작성 일관성(write-consistent)일 필요 없으며, replica 또한 상호 간에 항상 일관적일 필요가 없다 
  • 각 노드의 값들이 어느 정도 비일관적으로 유지될 수 있다 

Eventual Consistency

  • 분산 DB가 가지는, 통신에 따른 지연 시간으로 인해 비 일관적인 상태를 가질 수 있지만 결과적으로는 일관적이어야 한다 

데이터 모델

Key-Value Store

  • Dynamo Paper에서 유래되었다 
  • key-value 쌍으로 데이터가 저장된다
  • value에는 어떠한 형태의 데이터도 담을 수 있다 
  • 해시 테이블을 구현해 value에 대한 포인터와 key를 저장 
  • 간단한 데이터 모델이 있는 애플리케이션에 이상적이고 고속 READ/WRITE가 필요하다
  • 빈번한 업데이트 또는 복잡한 쿼리가 필요할 땐 적합하지 않다 
  • 질의어를 통한 검색은 불가능하다
  • 사용 사례) RDB에서 데이터 캐싱, 장바구니 같은 일시적인 속성, 세션 관리, 프로필 기본 설정 및 구성, 데이터 캐싱, 멀티미디어 파일 또는 큰 개체 저장 
  • ex) Redis, Riak, Amazon Dynamo DB ...

Wide Column Store

  • Big Table DB라고도 하며, Google의 BigTable Paper에서 유래되었다 
  • 하나의 Row는 여러 개의 Column이 모여서 이루어지며, 각각의 Row는 다른 Column을 가질 수 있다
  • Column-familiy는 개념적으로 Column의 집합체이고 각 Column은 키-값의 쌍으로 구성되어 있다. 컬렉션 구조를 가지며 하나의 행은 많은 열을 포함할 수 있다 
  • 대부분의 Column-familiy DB는 Column 값으로 Scalar type을 지원한다 
    • Scalar type : 데이터형으로 여러 값 사이에 순서가 존재한다. 기본적인 논리형, 정수형, 문자형을 포함하여 실수형 이산형을 포함한다
  • key에서 필드 값을 결정하며, 키는 Row(키 값)와 Column-familiy, Column-name을 가진다
  • 연관된 데이터들은 같은 Column-familiy 안에 속해 있으며 각자의 Column-name을 가진다     
  • 질의는 Row, Column-Familiy, Column-name을 통해 수행된다  
  • 사용 사례) 로깅 및 쓰기 작업이 많은 애플리케이션, 복제본 데이터가 단기적으로 불일치하더라도 큰 문제가 없는 애플리케이션, 동적 필드를 처리하는 애플리케이션  
  • ex) HBase, Cassandra, ScyllaDB...
데이터베이스 컬렉션 
- 여러 객체를 묶어서 관리하는 비정형 데이터 저장소 
- DB의 테이블과 같은 개념이지만 스키마가 정해져 있지 않다 

Document Store

출처 : http://www.dataversity.net

  • key와 계층적인 형태인 Document로 value를 저장한다 
  • Document는 필드의 컬렉션을 포함한 간단한 Entity이며 그룹화된 속성들의 집합체이다 
  • 관련 문서는 일반적으로 Name Space로 그룹화 되어져 있다 
  • 객체를 Document의 형태로 저장 가능하기 때문에 객체-관계 매핑이 필요하지 않다 
  • Document를 디자인 할 땐 다음 사항들을 고려해야 한다  
    • Document 속의 데이터와 컬렉션을 어떻게 분할하고, 데이터를 정규화 또는 비정규화 할 것인가?
    • 데이터가 어떻게 동적이며, 프로그램은 어떻게 많은 양의 생성/삭제/변경을 수행할 것인가?
  • JSON, XML과 같은 형식으로 저장된 데이터 구조
  • Document 내의 item을 이용한 쿼리가 가능하다. 이를 위해 Document 전용 질의 언어가 필요하다
  • 사용 사례) 대용량 데이터를 읽고 쓰는 애플리케이션, 다양한 속성이 있는 데이터 관리, 비정규화된 중첩 구조의 데이터를 사용하는 애플리케이션, JSON을 사용하는 미들웨어 애플리케이션
  • ex) MongoDB, CoughDB...

Graph Store

출처 : http://www.dataversity.net

  • Euler&Graph Theory에서 유래한 DB
  • 실제 세계의 데이터를 관계와 함께 표현하기 위해 그래프 구조를 사용한 DB
  • Node와 Relationship 또는 Vertex와 Edge 형태로 데이터를 표현하며, Node는 구별할 수 있는 식별자와 여러 가지 속성을 가지고 Relationship은 두 노드 간의 연결을 말하며 연결에 대한 속성을 포함한다 
  • 복잡한 형태의 데이터를 다루는 데 사용되어진다 
  • 개체의 관계를 그래프 형태로 표현한 것이므로 관계형 모델이라고 할 수 있고 데이터 간의 관계가 탐색의 키일 경우에 적합
  • 사용 사례) 위치 및 내비게이션 기반 서비스, 네트워크 및 IT 인프라, 사기 감지, 메타 데이터 관리 , sns, 교통망 
  • ex)  Neo4 J, OreientDB...

'database' 카테고리의 다른 글

트랜잭션 격리 수준 (Transaction Isolation Level)  (0) 2021.12.11
InnoDB란?  (0) 2021.12.04