읽記 (데이터 과학, IT 분야)/빅데이터 시스템 구축 가이드

[빅데이터] 5. 빅데이터 처리와 저장의 핵심 기술, 하둡과 NoSQL (3)

Light Pillar 2019. 12. 20. 14:22

챕터의 제목 처럼 빅데이터의 처리와 저장에 있어서의 핵심 기술인 하둡, 그리고 NoSQL에 대해서 알아가고 있는 중이다. 이 책에서는 하나의 챕처를 통해 개념정리 수준에서 설명을 하고 있다. 하지만 이 와 관련된 기술들은 하루가 다르게 발전하고 있고, 각각의 기술들은 어느정도 활용이 가능한 수준으로 파악하려면 시간을 들여 별도로 공부를 해야할 듯 하다. 역시 전문가의 길은 멀고도 지난한 것 같다.

 


3. NoSQL이란 무엇인가?

현재 가장 많이 사용되고 있는 데이터베이스는 RDB라는 것은 어느 누구도 이견이 없을 듯 하다. 하지만 SNS의 폭발적 성장, 4차 산업혁명이라 일컬어지는 ICT 융합, IoT 등 데이터 양 자체의 어마어마한 증가 뿐만아니라 데이터의 형식 또한 반정형 또는 비정형 데이터가 빠른 속도로 증가하고 있다. 이런 실시간 대량의 데이터를 안정적으로 빠르게 처리하기 위해서는 기존 RDB로는 비용과 장비적인 측면에서 너무 비효율적이기에 그 대안으로 등장한 것이 NoSQL이다. NoSQL은 오픈소스로 저가 클러스터 환경 구성이 가능하며 비정형 데이터 처리에 비용 효과적이다.

일반 시스템에서는 오히려 RDB가 훨씬 성능이 우수하다. 단지 NoSQL은 RDB보다 더 효과적으로 비정형의 대용량 데이터를 처리한다는 점이 다르다.

ACID(원자성, 일관성, 고립성, 지속성) 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기위한 성질을 가리키는 약어이다.
  - 원자성(Atomicity) 트랜잭션과 관련된 작업들이 모두 수행되었는지 아닌지를 보장하는 능력
  - 일관성(Consistency) 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것
  - 고립성(Isolation) 트랜잭션을 수행할 때 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것
  - 지속성(Durability) 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미

 

데이터 관리 시스템을 선택하는 기준은 크게 Consistency, Availability, Partition tolerance의 3가지가 있다.(CAP이론)

구분 내용
Consistency 각각의 데이터 이용자는 같은 데이터를 보고 있어야 한다
Availability 모든 사용자는 항상 데이터의 읽고 쓰기가 가능해야 한다
Partition tolerance 시스템은 일부 물리적 네트워크 장애로 인한 메시지 손실에도 정상 작동을 해야 한다

 

NoSQL은 제품이라기보다 기존 RDB와는 다른 데이터 저장 및 검색 메커니즘이다.

NoSQL의 구조

NoSQL의 기술적 특징

구분 내용
수평적 확장성 무한의 확장성 보장, 페타바이트 수준의 데이터 처리
Simple DB 고정 스키마가 없기에 Join이 없고 무결성과 정합성을 보장하지 않음
저렴한 클러스터링 PC 수준의 하드웨어 사용
단순한 검색 RESTFul API를 통한 데이터 접근, Key-Value, Graph, Document 구조
오픈소스 기반 자생적 흐름으로 여러 오픈소스와 연계 (Hadoop Architecture)

 

NoSQL 기반 데이터 모델

구분 내용 유형
Key-Value 저장 KV라 불리는 이 모델은 NoSQL의 가장 단순한 형태로 유니크 키를 통해 특정한 값을 지정한다. (Hash Table, Map) Redis, Riak, DynamoDB
Column 기반 저장 컬럼 기반 저장은 Column Family라는 컬럼들의 집합을 통해 Key-Value 형태로 저장한다. HBase, Cassandra
Document 저장 Document 저장은 Key에 대응하는 값이 반정형 데이터(JSON, XML, BSON 등)인 저장 구조이다. MongoDB, CouchDB
Graph 저장 그래프는 노드와 노드 간의 관계를 명시함으로써 그래프 형태로 저장한다. Neo4j, AllegoGraph

 

 

4. NoSQL의 구성 요소와 적용 방안

NoSQL의 주요 데이터베이스로는 기본적인 모델로 Key_Value, Column 기반, Document, Graph가 있다.

 

Redis

Redis는 Key-Value 기반의 인 메모리 데이터베이스이다. 5가지 타입을 키와 맵핑하여 빠른 성능을 보장한다.

Redis의 5가지 타입

타입 설명 명령어
String Stirng, Integer, Floating 지원 DET, SET, DEL
List Linked list of String의 배열 LPUSH, RPUSH, LPOP, RPOP, LINDEX, LRANGE
Set 정렬이 안된(Unordered) 유니크 스티림의 집합 List와 비슷하지만, 중복이 안 되는 유니크 스트링만 취급함 SADD, SMEMBERS, SISMEMBERS, SREM
Hash String 필드와 String 값 사이의 Map HSET, HGET, HGETALL, HDEL
Stored set Member라 불리는 유니크 Key와 Score라 불리는 Value의 쌍으로 Score 기반 Sorting을 제공 SADD, SMEMBERS, SISMMEMBER, SREM

 

Cassandra

Cassandra는 HBase와 더불어 칼럼 기반 DB로 가장 잘 알려졌다. 카산드라의 특징은 분산 형태의 비중앙 구조다. 카산드라는 다른 NoSQL과 같이 여러 머신에서 구도하면서 대용량 데이터를 처리한다. 

 

카산드라의 Column은 RDB의 사전 정의된 칼럼에 데이터를 쓰는 구조가 아닌 Keyspace에 Column Family만 정의되면 사용자에 의한 칼럼 생성이 가능하다. 카산드라의 System Keyspace에서는 메타 데이터를 통해 노드 정보, 클러스터 네임, 키스페이스 및 스키마 정의 등을 저장한다.

 

카산드라는 링 형태의 구조를 통해 데이터를 복제하며 peer-to-peer 프로토콜로 통신하다. 이는 기존 중앙 집중식의 Master / Slave에서 벗어나 노드 간 같은 관계를 유지하며, 장애에 대해 안정적이다. 또한, 쉬운 노드 구별과 환경설정으로 구축이 쉽다.

 

 

MongoDB

MongoDB는 Document 기반의 데이터베이스다. 다른 NoSQL 데이터베이스와 같이 몽고 DB는 확장이 쉽고 상황에 맞는 스키마 추가와 삭제가 쉽다. 몽고 DB는 Document의 키와 값의 타입, 크기가 고정적이지 않으며, 목적에 따라 쉽게 데이터 모델을 적용할 수 있다.

 

RDB와 MongoDB의 특징 비교

RDBMS MongoDB
Table, View Collection
Row JSON Document
Index Index
Join Embedded & Linking across Document
Partition Shard
Partition Key Shard Key
Primary Key _ID 필드

Document는 몽고 DB가 지원하는 가장 기본인 데이터 단위다. 카와 값의 쌍조합으로 BSON(Binary JSON)으로 저장된다.

Collection은 Document 집합이며, RDB에서 Document가 행이라면 Collection은 테이블에 비유된다. 몽고 DB는 스키마가 필요 없는 데이터 모델이다.

몽고 DB는 기본적으로 수평적 확장을 제공하며, Javascript 셸을 지원한다.

 

 

Neo4j

Neo4j는 그래프 데이터베이스로 노드와 화살표를 사용하여 관계를 나타낸다. 그래프 DB의 장점은 직관적 이해로 관계 분석이 쉽다.

Neo4j는 다른 NoSQL DB처럼 확장성이나 대량의 데이터 처리에는 맞지 않지만, 직관적 그래프 구조를 통해 데이터 간 상호 관계를 쉽게 찾을 수 있어 시각화가 중요한 빅데이터에서 Neo4j는 이해하기 쉬운 데이터베이스다.

 

 

 

[빅데이터] 0. 목차