Redis) 이것이 레디스다 4 - NoSQL

NoSQL

마틴 파울러의 NoSQL: 빅 데이터 세상으로 떠나는 간결한 안내서에는 NoSQL을 아래 조건을 만족하는 데이터 저장소라고 기술되어 있다.

  • 대용량 웹 서비스를 위하여 만들어진 데이터 저장소
  • 관계형 데이터 모델을 지양하며 대량의 분산된 데이터를 저장하고 조회하는데 특화된 저장소
  • 스키마 없이 사용 가능하거나 느슨한 스키마를 제공하는 저장소

일반적으로 NoSQL은 관계형 데이터베이스에 비하여 쓰기와 읽기 성능이 월등히 빠르다.

일반적으로 관계형 데이터베이스는 저장된 데이터의 양이 많아질수록 읽기/쓰기 성능의 저하가 일어난다. 특히 인덱스 처리 방법인 B트리의 한계로 인해 쓰기 성능의 저하가 심하다.
또한 RDBMS는 단일 하드웨어의 성능에 따라 전체 시스템의 성능이 결정된다.

NoSQL은 분산 환경에서 대량의 데이터를 빠르게 처리하기 위해서 한,두 가지 단점을 가진 채로 개발됐다.

  • RDBMS에서 제공하는 쿼리와 트랜잭션 같은 편의 기능을 제공하지 않으며, 제공하는 데이터의 일관성 레벨도 NoSQL 별로 다르다.
  • 솔루션을 도입하기 위해서는 해당 NoSQL의 설계 사상, 내부 구조를 파악해야한다.

그럼에도 NoSQL을 선택하는 이유는 하드웨어 추가에 따른 성능의 선형 증가를 얻을 수 있다는 장점 때문이다.
새로 도입하는 NoSQL 솔루션이라면 서비스에 필요한 기능을 제공하는지 뿐만 아니라 반드시 해당 NoSQL의 설계 사상과 내부구조를 파악하는 작업이 선행되어야 한다.


CAP 정리

이론 컴퓨터 과학 분야에서 분산 컴퓨터 시스템을 설명하는데 사용되는 이론이다.
일관성(Consistency), 가용성(Availability), 분할 허용성(Partition Tolerance) 모두를 동시에 지원하는 분산 컴퓨터 시스템은 없다.

분산 컴퓨팅 : 다중 시스템 환경에서 소프트웨어가 작동하는 것

  • 일관성

다중 클라이언트에서 같은 시간에 조회하는 데이터는 항상 동일한 데이터임을 보증하는 것
RDBMS에서 지원하는 가장 기본적인 기능이지만 NoSQL에서는 빠른 분산처리를 위하여 일관성을 희생하기도 한다.

시간이 지나 결과적으로 일관성이 보장되는 상황을 최종 일관성(Eventual Consistency) 또는 궁극적인 일관성이라고 한다.

NoSQL의 분산 노드간의 데이터 동기화를 위해 두 가지 방법을 사용한다.

  1. 클라이언트에 응답하기 전에 모든 노드에 데이터를 저장하는 동기식 방법
    • 느리지만 강한 데이터의 정합성을 가짐
  2. 먼저 클라이언트에게 응답한 다음 노드로 데이터를 동기화하는 비동기식 방법
    • 빠른 응답이 가능하지만 쓰기 노드에 장애 발생 시 데이터 손실이 생길 수 있다.
  • 가용성

모든 클라이언트의 읽기와 쓰기 요청에 대하여 항상 응답이 가능해야 함을 보증하는 것
가용성을 가질 경우 클러스터 내에서 몇 개의 노드가 망가지더라도 정상적인 서비스가 가능하다.

가용성을 위한 데이터 중복 저장 방법

  1. 동일한 데이터를 가진 저장소를 하나 더 생성하는 마스터-슬레이브 복제 방법
  2. 데이터 단위로 중복 저장하는 피어-투-피어 복제 방법

단일 고장점 (Single Point Of Failure) : 시스템을 구성하는 개별 요소중에서 하나의 요소가 망가졌을 때 시스템 전체를 멈추게 만드는 요소

  • 네트워크 분할 허용성

지역적으로 분할된 네트워크 환경에서 동작하는 시스템에서 두 지역 간의 네트워트가 단절되거나 네트워크 데이터의 유실이 일어나더라도 각 지역 내의 시스템은 정상적으로 동작해야 함을 의미한다.


NoSQL의 분류

  • 키-값 모델
    • 적절한 사용처 : 단일 연산에 의하여 처리를 완료하거나 취소할 수 있는 곳
      • 사용자의 프로필 정보
      • 웹 서버 클러스터링을 위한 세션 정보
      • 장바구니 정보
      • URL 단축 정보
  • 문서 모델
    • 하나의 키에 하나의 구조화된 문서(JSON, XML, …)를 저장하고 조회
    • B트리 인덱스를 사용하여 2차 인덱스를 생성하는 NoSQL의 경우 읽기와 쓰기의 비율에서 읽기가 70% 이상일 때가 가장 좋은 성능을 보인다.
    • 적절한 사용처 : 자주 변하지 않는 정보를 저장하고 조회하는데 적합하다.
      • 중앙 집중식 로그 저장
      • 타임라인 저장
      • 통계 정보 저장
  • 컬럼 모델
    • 하나의 키에 여러 컬럼 이름과 컬럼 값의 쌍으로 이뤄진 데이터를 저장하고 조회한다.
    • 읽기와 쓰기 중 쓰기에 더 특화되어있다.
    • 적절한 사용처
      • 채팅 내용 저장
      • 메일 저장소
      • 알림 내용 저장
      • 실시간 데이터 저장소
  • 그래프 모델
    • 노드와 관계(or 버텍스 or 엣지)를 사용하여 데이터를 저장하고 조회한다.
    • 적절한 사용처 : 연관검색을 위한 정보를 저장하고 조회하는데 적합하다.

언제 NoSQL을 사용해야 하는가

대량의 단순 정보를 빠르게 저장하고 조회할 때, RDBMS가 처리하지 못하는 대량의 데이터를 입력할 때 (RDBMS 특성상 제공 가능한 성능(하드웨어)의 한계가 있다.), 스키마가 고정되지 않은 데이터를 저장하고 조회할 때 등…

RDBMS -> NoSQL 할 때 가장 먼저 고려해야할 사항 : 일관성 모델

NoSQL을 선택할 때 고려할 사항

  • 일관성 모델 : 어느 정도 일관성이 필요한지
  • 데이터 모델
  • 읽기 쓰기 성능
  • 단일 고장점
  • 원자성 지원 : 트랜잭션 지원 여부 및 어느 쪽(서버/클라이언트)에서 지원하는지
  • 하드웨어 구성
  • 무중단 시스템
Share