본문 바로가기
Quality control (Univ. Study)/Database Design

NoSQL

by 생각하는 이상훈 2023. 11. 28.
728x90

NoSQL

NoSQL은 Not only SQL이라고 불리는 비관계형 데이터베이스 유형이다. 전통적인 RDBMS는 관계형 데이터 모델이고 ERD를 이용하고 쿼리문을 통해 명령어를 입력한다. 그 외에도 스키마, 정규화, 데이터 무결성, 트랜잭션, ACID, Concurrency control, 2PLP, MVCC등의 다양한 특징이 있다. 그러나 전통적 DBMS에는 몇몇 문제가 존재한다.

- Scalability: 오라클을 10,000대에 설치/관리할 수 있나??

- Performance: 오라클에서 초당 만건 이상의 변경을 처리할 수 있나?

- Schema: 정형화된 스키마가 없으면?

- Reliability는 필요 없으니 더 빠를 수는 없나?

- Persistent는 필요 없으니 더 쉬울 수는 없나?

- 복잡한 데이터 모델은 필요 없으니 더 간단할 수 없나?

 

위의 문제들은 공통적으로 엄격한 규제를 통해 완벽한 DB가 아니라 실용적이고 빠른 DB가 필요할때 발생하는 문제이다. 이 지점을 해결한 NoSQL의 장단점은 다음과 같다.

 

ㅇ장점

- 유연한 스키마

- 쉽고 빠른 설치/관리

- Massive Scalability

- 완화된 일관성(eventual consistency) -> High Performance & Availability

 

ㅇ단점

- SQL 과 같은 표준 질의 언어 부족 -> 프로그래밍 모델 도입

- 완화된 일관성 -> ACID가 보장 안됨

 

ACID에 반한 개념으로 BASE라는 개념이 있다. 이는 Basically Availability, Soft state, Eventual consistency의 핵심 개념을 담은 것이다. '산'의 의미가 있는 ACID에 대응하여 '염기'의 의미가 있는 BASE를 핵심 개념으로 잡은 것으로 보인다.

 

NoSQL systems

ㅇBigTable

- Google’s proprietary NOSQL system

- Column-based or wide column store

 

ㅇDynamoDB (Amazon)

- Key-value data store

 

ㅇCassandra (Facebook)

- Uses concepts from both key-value store and column-based systems

 

ㅇMongoDB and CouchDB

- Document stores

 

ㅇNeo4J and GraphBase

- Graph-based NOSQL systems

 

ㅇOrientDB

- Combines several concepts

 

ㅇDatabase systems classified on the object model

- Or native XML model


CAP Theorem

CAP theorem 또는 Brewer Theorem이라고 불리는 정리는 아래의 세가지 조건을 모두 만족하는 분산 컴퓨터 시스템이 존재하지 않음을 증명한 정리이다.

 

• 일관성(Consistency): 모든 노드가 같은 순간에 같은 데이터를 볼 수 있다.

• 가용성(Availability): 모든 요청이 성공 또는 실패 결과를 반환할 수 있다.

• 분할내성(Partition tolerance): 메시지 전달이 실패하거나 시스템 일부가 망가져도 시스템이 계속동작할 수 있다.

 

위의 세가지 요소중 두가지를 선택하여 DBMS를 설계하는 것이다.


Sharding

빅데이터 환경은 수많은 데이터를 빠른 시간에 수집 및 저장할 수 있어야 한다. 때에 따라서는 분산, 집계하여 사용자가 원하는 통계 정보로 가공할 수도 있어야 한다. 이런 시스템 구축 환경을 구축하기 위해 효과적인 데이터 분산 저장 및 처리 기술이 필요한데 그것을 샤딩(Sharding) 시스템 이라고 한다.

위는 shard cluster의 구성이다.

 

MongoDB에서의 샤딩은 수평 분할 방식을 사용하여 문서들을 서로 겹치지 않는 여러 파티션(샤드)으로 나눈다. 이렇게 하면 필요에 따라 노드를 추가할 수 있다. 또한 Load balancing을 달성하기 위해 각 샤드는 서로 다른 노드에 저장되어 시스템의 부하를 분산시키는 역할을 한다. 

 

아래와 같은 특징이 있다.

 

Partitioning field(shard key): 샤딩 과정에서 각 문서에는 반드시 파티셔닝 필드, 즉 샤드 키가 존재해야 합니다. 이 필드는 해당 컬렉션의 모든 문서에 있어야 하며, 인덱스가 설정되어 있어야 합니다. 

 

Range partitioning: 샤드 키 값의 범위를 지정하여 '청크(chunk)'를 생성합니다. 이 방식은 범위 쿼리와 가장 잘 어울립니다. 

 

Hash partitioning: 각 샤드 키의 해시 값에 기반하여 파티셔닝을 합니다. 이는 샤드 키의 분포를 더 균일하게 만들어줍니다.


Wide Column Database

행마다 키와 해당값을 저장할 때마다 각각 다른값의 다른 수의 스키마를 가질 수 있음

 

Hbase Data Model and Versioning

Data organization concepts

 

Column-Oriented DBMS

컬럼 순서로 데이터를 저장한다.

이 방식은 컬럼 단위에 대한 분석에 용이하고 압축이 효과적이어서 메모리 기반 처리에 용이하다. 또한 병렬 처리에 유리하다. (SIMD: Single Instruction, Multiple Data)


 

728x90

'Quality control (Univ. Study) > Database Design' 카테고리의 다른 글

Big data  (2) 2023.12.06
Concurrency Control  (1) 2023.11.23
Transaction  (3) 2023.11.21
Query Optimization  (0) 2023.11.16
INDEX 실습  (0) 2023.11.14