NoSQL 데이터베이스 구체적으로 알아보기
아래 대부분의 내용은 도서 빅데이터를 지탱하는 기술에서 발췌했습니다.
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대의 마스터가 전체를 관리, 마스터가 중지되면 아무도 읽고 쓸 수 없음
- 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