NoSQL

본 글은 기존 Notion에서 이전 후 수정한 게시글입니다.


1. NoSQL 데이터베이스

1.1. 정의

  • 특정 데이터 모델에 대해 특정 목적에 맞추어 구축되는 데이터베이스
    • 개발의 용이성, 기능성 및 확장성을 널리 인정받고 있음
  • “non SQL(비 SQL)” 혹은 “not only SQL(SQL만을 사용하지 않는)”로 지칭함
    • 어떤 경우든 관계형 데이터베이스 이외의 형식으로 저장하는 데이터베이스라는 뜻

1.2. 등장 배경

  • 2000년대 말에 스토리지 비용이 크게 하락하면서 등장
    • 단순히 데이터 중복 감소를 목적으로 복잡하고 관리가 어려운 데이터 모델을 생성해야 하던 시절은 지났음
    • 스토리지가 아닌, 개발자들이 소프트웨어의 개발의 1차 비용이 되었기 때문에 NoSQL 데이터베이스는 개발자 생산성에 맞게 최적화 되었음

1.3. 작동 방식

  • 표 형식이 아닌, 관계형 데이터베이스와는 다른 방식으로 데이터를 저장
  • 데이터 모델에 따라 유형이 다양함 ⇒ 각각의 장단점이 명확함
  • 현대적인 애플리케이션 구축을 위한 유연한 스키마를 갖추고 있음
  • 대량의 데이터와 높은 사용자 부하에서도 손쉬운 확장이 가능

1.4. 주요 유형

  • 문서
  • 키 값
  • 와이드 컬럼
  • 그래프

1.5. 특징

  • NoSQL 데이터베이스는 관계형 데이터베이스와 방식은 다르지만 관계 데이터를 저장할 수 있음
  • NoSQL 데이터베이스에 있는 관련 데이터를 모델링하는 것이 SQL 데이터베이스보다 쉬움
    • 관련 데이터를 테이블 간에 분할할 필요가 없기 때문
    • 관련 데이터를 단일 데이터 구조 내에 중첩시킬 수 있음

2. SQL vs NoSQL

2.1. SQL의 장단점

2.1.1. SQL의 장점

  • 명확하게 정의된 스키마, 데이터 무결성 보장
  • 관계는 각 데이터를 중복없이 한번만 저장됨

2.1.2. SQL의 단점

  • 상대적으로 덜 유연함, 데이터 스키마는 사전에 계획되고 알려져야 함
    • 나중에 수정하기가 번거롭고, 불가능할 수도 있음
  • 관계를 맺고 있기 때문에, JOIN문이 많은 매우 복잡한 쿼리가 만들어질 수 있음
  • 수평적 확장(컬럼의 확장으로 추정)이 어렵고, 대체로 수직적 확장(로우의 확장으로 추정)만 가능
    • 어떤 시점(처리할 수 있는 처리량과 관련하여)에서 성장 한계에 직면하게 됨

2.2. 단점

2.2.1. NoSQL의 장점

  • 스키마가 없기 때문에, 훨씬 유연함
    • 언제든지 저장된 데이터를 조정하고 새로운 필드를 추가할 수 있음
  • 데이터는 애플리케이션이 필요로 하는 형식으로 저장됨
    • 데이터를 읽어오는 속도가 빨라짐
  • 수직 및 수평 확장이 가능
    • 데이터가 애플리케이션에서 발생시키는 모든 읽기/쓰기 요청을 처리할 수 있음

2.2.2. NoSQL의 단점

  • 유연성 때문에, 구조 결정을 하지 못하고 미루게 될 수 있음
  • 데이터 중복은 여러 여러 컬렉션과 문서가 여러 개의 레코드가 변경된 경우 업데이트를 해야 함
    • SQL 세계에서처럼 하나의 테이블에 하나의 레코드가 아님
  • 데이터가 여러 컬레션에 중복되어 있기 때문에, 수정(update)를 해야하는 경우 모든 컬렉션에서 수정해야 함을 의미함
    • SQL 세계에서는 중복된 데이터가 없기 때문에 한번만 수행하면 됨

2.3. 사용 용도

2.3.1. SQL

  • 관계를 맵고 있는 데이터가 자주 변경(수정)되는 애플리케이션일 경우
    • NoSQL에서는 여러 컬렉션을 모두 수정해줘야 하기 때문
  • 변경될 여지가 없고, 명확한 스키마가 사용자와 데이터에게 중요한 경우

2.3.2. NoSQL

  • 정확한 데이터 구조를 알 수 없거나 변경/확장될 수 있는 경우
  • 읽기(read)처리를 자주 하지만, 데이터를 자주 변경(update)하지 않는 경우
    • 즉, 한번의 변경으로 수십개의 문서를 업데이트 할 필요가 없는 경우
  • 데이터베이스를 수평으로 확장해야 하는 경우
    • 즉, 막대한 양의 데이터를 다뤄야 하는 경우

3. NoSQL의 종류

image

3.1. key-value

  • 키와 값으로 이루어진, 저장과 조회라는 가장 간단한 원칙에 충실한 데이터베이스 image
  • 특징
    • 기본적인 패턴으로 key, value가 하나의 묶음으로 저장되는 구조로 단순한 구조이기에 속도가 빠르며 분산 저장이 용이
    • key 안에 (Column, Value) 형태로 여러개의 필드를 가짐
      • key는 unique한 고유값으로 유지
    • 값에 모든 데이터 타입을 허용
      • 개발자들이 데이터 입력 단계에서 검증 로직을 제대로 구현하는 것이 중요
      • 테이블간 조인을 고려하지 않음
        • RDB에서 관리하는 외부키나 컬럼별 constraints 등이 필요 없음
  • 사용할 때
    1. 성능 향상을 위해 관계형 데이터베이스에서 데이터 캐싱
    2. 장바구니 같은 웹 애플리케이션에서 일시적인 속성 추적
    3. 모바일 애플리케이션용 사용자 데이터 정보와 구성 정보 저장
  • 종류
    • Redis
    • Riak
    • Oracle Berkely
    • AWWS Dynamo DB

3.2. Document

image

  • 특징
    • XML, JSON, BSON - 계층적 트리 데이터 방식으로 저장
    • _id : PK, RowID를 가짐
    • 집합적 데이터 모델 : 관계형 DB에서의 여러개 테이블 데이터를 하나의 Document에 모아둘 수 있음
      • 조회 시 한번의 조회로 필요한 데이터 획득
        • join 기능을 대체
    • 컬럼 없음 → Schema 없음
    • Document 내에 필드를 정의함 (Key: Value)
      • Key에 대한 값은 Document가 될 수 있음 (Embedded Document)
    • key-value Type과의 차이는 Database에 값을 문서로 저장한다는 점
    • 트랜지션이 원자적으로 이루어짐
    • 데이터를 여러 서버로 분산 저장이 가능하고 복제와 회복이 가능한 형태
      • 장애가 발생하더라도 대응에 유리
  • 사용할 때
    1. 대용량 데이터를 읽고 쓰는 웹 사이트용 백엔드 지원
    2. 제품처럼 다양한 속성이 있는 데이터 관리
    3. 다양한 유형의 메타데이터 추적
    4. JSON 데이터 구조를 사용하는 애플리케이션
    5. 비정규화된 중첩 구조의 데이터를 사용하는 애플리케이션 image
  • 종류
    • MongoDB
    • Azure Cosmos DB
    • CouchDB
    • MarkLogic
    • OrientDB

3.3. Wide Column

image

  • 특징
    • 행마다 키와 해당값을 저장할 때마다 각각 다른값의 다른 수의 스키마를 가질 수 있음
      • 사용자 이름(Key)에 해당하는 값에 스키마들이 각각 다름
  • 장점
    • 대량의 데이터의 압축, 분산처리, 집계 처리(sum, count, avg 등) 및 쿼리 동작 속도 그리고 확장성이 뛰어남

종류

  • Cassandra
  • HBase
  • Google BigTable
  • Vertica
  • Druid
  • Accumulo
  • HyperTable

3.4. graph

image

  • 특징
    • 데이터를 노드로 표현하며, 노드 사이의 관계를 엣지로 표현
    • RDBMS 보다 Performance가 좋고 유연하며 유지보수에 용이한것이 특징
    • Social networks, Network diagrams 등에 사용
  • 종류
    • Neo4j
    • Blazegraph
    • OrientDB
    • AgensGraph(국내솔루션)

4. NoSQL 도입 사례

NoSQL 올라탄 라인 “보고 있나, 카카오톡”

Reference

[NoSQL이란?비관계형 데이터베이스, 유연한 스키마 데이터 모델AWS](https://aws.amazon.com/ko/nosql/)

NoSQL이란 무엇입니까? NoSQL Databases 설명

NoSQL 의 종류별 특징