반응형
학습목표
1. 빅데이터 처리를 위한 Hadoop 플랫폼이란?
2. NoSQL DB의 개념과 그 사용목적은 무엇인가?
3. 기존 RDBMS와의 차이점은?
NoSQL의 탄생
1. 데이터 홍수 시대
- GPS, SNS, 이미지, 웹페이지 로그, 검색어 등 다양한 소스로부터 빠른 속도로 반정형(Semi-structured)/비정형(Unstructured) 데이터가 생성되고 있다.
- 기존의 RDBMS(관계형 데이터베이스)에서 처리할 수 없는 경우가 많아지면서 대량의 데이터를 어떤 효율적인 방식으로 수집/저장/처리할 것이고, 얼만큼의 저비용(low cost)을 달성할 수 있는지가 과제로 떠올랐다.
- 기업의 경쟁력은 HW에서 SW로, 다시 SW에서 Data로 이동하고 있기 때문에 데이터 저장 비용의 감소와 Cloud 기술의 도입을 고려하는 추세다.
2. Hadoop Introduction
Core Hadoop
- 데이터가 시스템에 처음 저장될 때 노드에 데이터를 분배하자는 아이디어에서 시작되었다. 분산된 서버의 CPU 및 Memory 자원을 활용한 분산처리(YARN)가 Hadoop의 핵심이다.
- 개별 노드는 해당 노드의 로컬 데이터를 처리하는 프로그램을 실행하고, 네트워크를 통한 데이터 전송을 최소화한다.
- DB의 물리적 가용성을 높이는 Scale-up 방식보다는 논리적으로 확장시키는, 즉 여러 DB로 병렬 처리하는 Scale-out 방식으로의 전환이 맞물리면서 Hadoop 파일 시스템(HDFS) 개념을 탄생시켰다.
- HDFS : 큰 사이즈 파일 처리에 적합한 구조로서 페타바이트 규모로 데이터를 처리하며 단일 장애(SPOF) 없는 고가용성을 지원
Hadoop Ecosystem
- 여러 데이터를 저장하고 실행하며 처리할 수 있는 Spark, HBase, hive가 있다. Hadoop을 사용하기 쉽게, 기능을 확장하는 오픈 소스들로 구성되어 있다.
- 예시 :
- Sqoop & Flume & Kafka : 외부 시스템에서 데이터를 수집하는 도구로, RDBMS에 보관되거나 생성되는 데이터를 Hadoop에 저장
- Hive & Impala : SQL과 유사한 언어를 사용하여 빅데이터 처리
- Spark : MapReduce의 대안으로, in-memory 방식을 통해 스트리밍 데이터를 처리하기에 좋음
- Sqoop & Flume & Kafka : 외부 시스템에서 데이터를 수집하는 도구로, RDBMS에 보관되거나 생성되는 데이터를 Hadoop에 저장
3. RDBMS -> NoSQL
NoSQL이란?
- "No SQL", "Not only SQL", "Non-relational Operational SQL" 등으로 해석해볼 수 있는 NoSQL은 1998년 논문에서 표준 SQL 인터페이스를 지원하지 않는 RDB로 처음 소개되었다. 2009년 Johan Oskarsson의 오픈 소스 기반의 분산 DB에서 사용되었다. 관계형 DB를 보완하며, 정형/반정형/비정형 데이터 모두를 저장하고 처리할 수 있는 유연한 DBMS다.
- 특징
- 기본적으로는 거대한 serialized object 저장소
- Join 연산을 지원하지 않는 등 복잡한 질의는 X
- 정규화를 하지 않아 Schema에 유연하게 대응
- 즉시 배포가 가능한 cloud-scale 설계
- ACID 원칙 고수 X
- 기본적으로는 거대한 serialized object 저장소
Relational Database | NoSQL | |
데이터 저장 | 행-열의 관계형 모델로 저장 | 다양한 모델 : Document, Key-value, Graph, ... |
Schema | - 각 레코드는 고정된 스키마를 따름 - 칼럼들을 미리 정의해야 함 - 빈 field에 Null 값이 입력됨 - 스키마는 변경이 어렵고, 변경 시 비용이 많이 발생함 |
- 가변적인 스키마 - 데이터 입력시 실시간으로 변경 - 빈 field는 저장 공간을 갖지 않음 |
확장성 | - Scale-up - 데이터 확장 시 더 크고 비싼 서버가 필요함 |
- Scale-out - 데이터 확장 시 일반적인 서버 수의 확대로 가능 |
ACID | Atomicity / Consistency / Isolation / Durability 호환 | 성능과 확장성을 위해 ACID 원칙 희생 |
데이터 type | Structured Data | Structured / Semi-structured / Unstructured Data |
예시 | MySQL, PostgreSQL, MSSQL | HBase, Cassandra, MongoDB |
DB 패러다임의 전환
- 관계형 DB는 테이블 관계를 통해 데이터 저장 및 검색이 가능하고 대표적인 DB로 MySQL, Oracle, MSSQL 등이 있다. NoSQL에 비해 관계형 DB가 갖는 장점으로는 데이터의 정규화(Normalization)와 무결성을 포함한 ACID 원칙을 잘 지킨다는 것이다.
- NoSQL은 복제가 간편하며 API를 지원해주고, 반정형 및 비정형 데이터를 포함한 빅데이터 및 실시간 시스템에 적합하다. 유연하게 스키마를 허용하는 등 다양한 데이터 구조를 지원하고, 선형적으로 확장할 수 있는 특징을 띠기 때문에 성능과 확장성을 위해 ACID 원칙을 희생한다. 다만 DB 종류에 따라 관리 방식이 제각각이고, 분석 및 BI 도구의 부족을 단점으로 꼽을 수 있다. 대표적으로 HBase, Cassandra, MongoDB가 있는데, 추후 포스팅에서 위 세 DB에 대해 살펴보도록 하자.
- 엄청난 데이터 크기와 대규모 Query를 처리할 수 있는 NoSQL로의 전환이 시작되었다. 여기서의 핵심은 파티션 허용(partition-tolerance)인데, 이를 위해서 가용성 또는 일관성을 포기해야 했다.
CAP Theorem
- CAP Theorem : 어떠한 분산 시스템도 일관성(Consistency) / 가용성(Availability) / 분할 허용(Partition tolerance) 세 가지 속성을 동시에 지원하지 못한다는 이론.
- 일관성 : 모든 노드들은 같은 시간에 동일한 항목에 대하여 같은 내용의 데이터를 제공한다.
- 가용성 : 모든 클라이언트는 항상 Read / Write 연산이 가능하다.
- 분할 허용 : 시스템은 물리적 네트워크 분할에도 동작한다. (메시지 전달 실패 또는 시스템 일부가 고장나더라도)
- 일관성 : 모든 노드들은 같은 시간에 동일한 항목에 대하여 같은 내용의 데이터를 제공한다.
- Case
- CP / A : 일관성 및 분할 허용 보장 (가용성 포기)
ex. MongoDB, HBase, Redis - AP / C : 가용성 및 분할 허용 보장 (일관성 포기)
ex. Cassandra, CouchDB
- CP / A : 일관성 및 분할 허용 보장 (가용성 포기)
NoSQL의 종류
- Key-Value Store
- 데이터를 key - value 형태의 hash 테이블로 저장하며, JSON, BLOB, 문자열 등으로 값을 저장한다.
- Unique Key에 하나의 Value가 1:1 매핑되는 구조
- ex. DynamoDB, Redis, Riak
- 데이터를 key - value 형태의 hash 테이블로 저장하며, JSON, BLOB, 문자열 등으로 값을 저장한다.
- Column Store
- Google의 Big Table 기반으로, 데이터를 열에서 쉽게 처리할 수 있어 집계 Query(SUM, COUNT, AVG, MIN 등)에 적합함
- ex. HBase, Cassandra, Big Table
- Google의 Big Table 기반으로, 데이터를 열에서 쉽게 처리할 수 있어 집계 Query(SUM, COUNT, AVG, MIN 등)에 적합함
- Document(XML/Object) Store
- key - value store의 확장된 형태로, 복잡한 query에는 부적합하다.
- value에 Document(XML, JSON)을 저장하는 구조로서 블로그 플랫폼, 실시간 분석, CMS 시스템에 적합하다.
- ex. MongoDB, CouchDB, ElasticSearch
- key - value store의 확장된 형태로, 복잡한 query에는 부적합하다.
- Graph Store
- Graph 구조에 node, edge 데이터 속성을 저장하며, SNS와 공간 데이터에 주로 사용된다.
- Neo4j, OrientDB
- Graph 구조에 node, edge 데이터 속성을 저장하며, SNS와 공간 데이터에 주로 사용된다.
Data Model | 성능 | 확장성 | 유연성 | 복잡성 | 기능성 |
Key - Value Store | High | High | High | None | Variable(None) |
Column Store | High | High | Moderate | Low | Minimal |
Document Store | High | Variable(High | High | Low | Variable(Low) |
Graph Store | variable | variable | High | High | Variable(None) |
Relational DB | variable | variable | Low | Moderate | Variable(None) |
참고문헌
- mySUNI : NoSQL 이해와 활용 (정진석 강사님)
반응형
'SQL > NoSQL' 카테고리의 다른 글
[데이터베이스/DB] NoSQL이란? (3-2) : 카산드라(Cassandra) DB의 구조 및 CQL 사용법 (1) | 2021.09.25 |
---|---|
[데이터베이스/DB] NoSQL이란? (3-1) : 카산드라(Cassandra) 개념 및 장단점 (0) | 2021.09.15 |
[데이터베이스 DB] NoSQL이란? (2-3) : HBase 사용법 (feat. Hive & Impala) (0) | 2021.09.03 |
[데이터베이스 DB] NoSQL이란? (2-2) : HBase 사용법(Shell, command) (0) | 2021.09.02 |
[데이터베이스 DB] NoSQL이란? (2-1) : HBase의 개념/특징/아키텍처 (0) | 2021.09.01 |
댓글