아래 대부분의 내용은 도서 빅데이터를 지탱하는 기술에서 발췌했습니다.

ACID, CAP, NoSQL 데이터베이스의 종류와 예시에 대해 알아보자.

객체 스토리지

  • 임의의 파일을 저장할 수 있는 장점이 있지만, 객체 스토리지 상의 파일은 교체하기 어려움
  • 데이터베이스처럼 수시로 변경하는 용도로는 적합하지 않음
  • 쓰기 빈도가 높은 데이터는 별도 RDB에 저장하고 정기적으로 스냅샷을 하거나, 다른 분산 데이터베이스에 저장하도록 한다.


ACID

  • Atomicity: 원시성
  • Consitency: 일관성
  • Isolation: 독립성
  • Durability: 내구성
  • 일반적인 RDB는 이를 충족해 신뢰성 있는 트랜잭션 처리를 하고 있음


CAP 정리

  • ACID 특성의 한계에서 제창된 것
  • Consitency: 일관성
  • Availability: 가용성
  • Partition-Tolerance: 분단내성


NoSQL 데이터 베이스

  • 특정 용도에 최적화된 데이터 저장소
  • 애플리케이션에서 처음에 데이터를 기록하는 장소로 이용
  • 데이터를 집계하는 데는 적합하지 않고, 데이터를 분석하려면 데이터를 추출해야함
  • NoSQL 데이터 베이스 중 일부는 CAP 정리의 일관성이나 가용성 중 하나를 선택함
    • 일관성 우선 가용성 포기: 단시간의 장애 발생을 수용
    • 가용성 우선 일관성 포기: 오래된 데이터를 읽을 수 없음
  • NoSQL 데이터 베이스는 기존 RDB의 한계를 뛰어 넘기 위해 개발되어와서 ACID 특성을 부분적으로 포기하는 경우가 많다. 각 데이터베이스의 제약을 잘 이해두어야함
  • 결과 일관성(eventual consistency)
    • 써넣은 데이터를 바로 읽을 수 있다곤 말할 수 없음
    • 시간이 지나면 언젠가 최신 데이터를 읽을 수 있음을 보장하지만, 그것이 언제가 될지는 알 수 없음
    • Amazon DynamoDB, Amazon S3에서 도입되고 있음


분산 KVS

  • Distributed Key-Value Store
  • 모든 데이터를 키값 쌍으로 저장하도록 설계된 데이터 저장소
  • 몇 kb 정도의 데이터를 초당 수만번 읽고 쓰는 경우
  • 모든 데이터에 고유의 키를 지정하고 그것을 부하 분산을 위해 이용
  • 키가 정해지면 그 값을 클러스터의 어느 노드에 배치할 것인지 결정
  • 이 구조에 의해 노드 간에 부하를 균등하게 분산하고 노드를 증감하는 것만으로 클러스터의 성능을 변경할 수 있게 되어있음


분산 KVS 아키텍처
  1. 마스터/슬레이브 형
    • 1대의 마스터가 전체를 관리, 마스터가 중지되면 아무도 읽고 쓸 수 없음
  2. P2P 형
    • 모든 노드가 대등한 관계, 클라이언트는 어떤 노드에 연결해도 데이터를 읽고 쓸 수 있음


Amazon DynamoDB
  • 항상 안정된 읽기 쓰기 성능을 제공하도록 디자인된 분산형 NoSQL 데이터베이스
  • P2P형 분산 아키텍처
  • 미리 설정한 초 단위의 요청 수에 따라 노드가 증감된다.
  • 데이터의 읽기 및 쓰기에 지연이 발생하면 곤란한 애플리케이션에 유용
  • 데이터를 분석하려면, AWS 서비스인 Amazon EMR 및 Amazon Redshift 등과 결합해 Hive에 의한 배치 처리를 실행하거나 데이터 웨어하우스에 데이터를 전송하도록 한다.


와이드 컬럼 스토어

  • Wide-column store
  • 분산 KVS를 발전시켜 2개 이상의 임의의 키에 데이터를 저장할 수 있도록 한 것
  • Google Cloud Bigtable, Apache HBase, Apache Cassandra
  • 행만이 아니라 열도 계속 증가함
  • 키마다 컬럼과 값이 저장되는 중첩의 데이터 구조로 되어있음
  • 주로 성능 향상을 목표로 함


Apache Cassandra
  • 내부 데이터 저장소로 와이드 컬럼 스토어 이용
  • CQL이라 불리는 높은 수준의 쿼리 언어가 구현되어 있음
  • 테이블의 스키마를 결정할 필요가 있기 때문에 구조화 데이터만을 취급할 수 있음
  • P2P형 분산 아키텍처


도큐먼트 스토어

  • Document store
  • 주로 데이터 처리의 유연성을 목적으로 함
  • JSON처럼 복잡하게 뒤얽힌 스키마리스 데이터를 그대로의 형태로 저장하고 쿼리를 실행할 수 있도록 함
  • 스키마를 정하지 않고 데이터 처리를 할 수 있으므로 외부에서 들여온 데이터를 저장하는데 특히 적합
    • 참고 시스템의 데이터 및 로그 저장에 적합
  • 최근 MySQL, PostgreSQL과 같은 RDB에서도 도큐먼트 스토어의 기능이 포함됨


MongoDB
  • JS나 각종 프로그래밍 언어를 사용해 데이터를 읽고 쓸 수 있음
  • 성능을 우선하여 신뢰성을 희생한다는 비판에도 불구, 간편함 덕에 인기가 많음
  • 데이터 분석이 목적인 경우, 쿼리 엔진으로부터 접속하는 등 데이터를 추출할 필요가 있음


검색 엔진

  • 저장된 데이터를 독자적인 쿼리 언어로 찾아냄
  • 텍스트 데이터를 전문 검색하기 위해 inverted index를 만들어 키워드 검색을 고속화함
  • Elasticsearch, Splunk