NoSQL이란?
Non Relational Operation Database SQL의 줄임말로 관계형 데이터베이스가 아닌 SQL을 의미하였지만, SQL뿐만 아닌 여러 기능들도 부가적으로 지원한다는 Not Only SQL로 일반화되었다. 관계형 데이터베이스의 고정된 스키마 구조, 수평적 확장의 불가, 복잡한 조인 작업 등의 불편한 점들이 존재했다. 이러한 단점으로 인해 NoSQL이 등장하게 되었다. NoSQL 데이터베이스는 데이터 모델을 유연하게 변경할 수 있었고, 수평적 확장, 불필요한 Join을 최소화할 수 있다.
- 유연성 : 스키마 선언 없이 필드의 추가 및 삭제가 자유로운 Schema-less 구조
- 확장성 : Scale-Out에 의한 서버 확장 용이
- 고성능 : 빅데이터 처리에 특화. 대용량 데이터를 처리하는 성능이 뛰어남
- 가용성 : 여러 대의 백업 서버 구성 가능하여 장애발생 시에도 무중단 서비스 가능
NoSQL의 대표적인 4 종류
Key-Value 데이터베이스
- Key와 Value로 구성된 배열구조의 데이터베이스로 NoSQL 데이터베이스 중 가장 단순한 구조
- 빠른 읽기/쓰기 연산을 지원하며, 주로 캐싱, 세션 저장 등에 사용
- 값에 모든 데이터 타입을 허용하기에, 데이터 입력단계에 검증 로직 필요
- Redis, Memcahced, DynamoDB
Document 데이터베이스
- 필드-값 형태로 구성된 데이터를 문서 형태로 저장하며, JSON 또는 BSON형식을 사용
- 값을 저장하기 전에 schema를 별도로 정의하지 않고, 문서를 추가하면 그것이 schema
- 유연한 스키마를 가지고 있어 필드를 동적으로 추가하거나 변경할 수 있음
- MongoDB, CouchDB
Column-family 데이터베이스
- Column과 Row와 같이 RDB에서 사용하는 동일한 용어를 사용하여 스키마 정의
- 데이터를 테이블이 아닌 열(Column)로 저장하며, 각 열은 스키마를 가질 수 있음
- Column은 이름과 값으로 구성, Row는 각기 다른 칼럼으로 구성 가능
- 대용량 데이터, 읽기와 쓰기 성능, 고가용성을 위해 설계
Graph 데이터베이스
- 데이터를 Node와 Edge로 표현하는 그래프 형태로 저장
- 복잡한 관계와 네트워크 구조를 효과적으로 표현하고 쿼리 할 수 있음
- Neo4j
관계형 데이터베이스와 NoSQL 비교
항목 | Relational Database | NoSQL |
데이터 모델 | 테이블 기반 데이터 모델 - 테이블 간의 관계, 엔티티를 정의 - 정규화에 의한 설계를 기본으로 함 |
다양한 모델 지원(key-value, document) - 반정규화에 의한 설계를 기본으로 함 |
스키마 | - 고정된 스키마 사용 - 테이블 설계 단계에서 스키마를 설계하며, 이 후의 스키마 수정은 번거로움 |
- 동적인 스키마로 필요에 따라 데이터 모델을 동적으로 변경 가능 - 비정형화 스키마구조로 미리 스키마를 선언하지 않음 |
확장성 | Scale-Up | Scale-Out |
인터페이스 | SQL을 통해 데이터 CRUD 가능 | 쿼리 외 다양한 API를 통한 데이터 CRUD 가능 |
일관성 모델 | ACID 트랜잭션 | BASE 모델 |
용도 | - 정형화된 데이터와 트랜잭션 처리가 중요한 경우 - 복잡한 관계를 가진 데이터 처리 및 분석이 필요한 경우 |
- 대용량 및 실시간 데이터 처리가 필요한 경우 - 유연한 데이터 모델링이 필요한 경우 |
구조 | 단일 서버에서 운영되는 중앙집중형 구조 | 여러 서버 간에 데이터를 분산하여 처리 가능 |
ACID와 BASE
속성 | BASE | ACID |
적용분야 | NoSQL | RDBMS |
범위 | 시스템 전체에 대한 특성 | 트랜잭션에 한정 |
일관성측면 | 약한 일관성 | 강한 일관성 |
중점사항 | Availability | ‘Commit’에 집중 |
시스템측면 | 성능에 초점 | 엄격한 데이터관리 |
효율성 | 쿼리 디자인이 중요 | 테이블 디자인이 중요 |
ACID와 BASE는 데이터베이스가 데이터를 구성하고 조작하는 방법을 결정하는 데이터베이스 트랜잭션 모델이다. 데이터베이스가 높은 일관성과 높은 가용성 두 가지를 모두 충족할 수는 없다. 이것은 아키텍처의 차이 때문이라고 볼 수 있다. SQL 데이터베이스는 ACID 모델을 기반으로 구조화되는 반면, NoSQL 데이터베이스는 BASE 아키텍처를 사용한다. 가용성보다 일관성을 우선시하는 ACID 모델과 가용성을 우선시하는 BASE 모델을 비교해 보자.
ACID
데이터의 일관성, 신뢰성 및 예측 가능성이 요구되는 경우에 이상적이다.
Atomicity(원자성)
트랜잭션을 구성하는 연산들이 완벽히 실행되거나 하나도 실행되지 않아야 하는 all or nothing 방식을 의미. 트랜잭션이 하나의 단계라도 실패하면 전체 트랜잭션이 롤백되어야 함.
Consistency(일관성)
트랜잭션이 성공적으로 수행된 후에 데이터베이스가 항상 일관된 상태를 유지해야 함을 의미
Isolation(격리성)
현재 수행 중인 트랜잭션이 완료될 때까지 트랜잭션이 생성한 중간 연산결과에 다른 트랜잭션이 접근할 수 없음을 의미
Durability(지속성)
영속성이라고도 하며 트랜잭션이 성공적으로 완료된 후 데이터베이스에 반영한 수행 결과는 어떠한 경우에도 손실되지 않고 영구적이어야 함을 의미
BASE
가용성과 성능을 중시하는 데이터베이스 모델로 구조화되지 않은 대용량 데이터의 분석처리에 적합하다.
Basically Available(기본 가용성)
기본 가용성이란 사용자가 언제든 데이터베이스에 동시에 접근할 수 있음을 의미한다. Master 서버의 장애 발생에도 여러 Slave 서버가 있기 때문에 가용성을 보장할 수 있다.
Soft State(소프트 상태)
소프트 상태는 모든 노드가 항상 최신의 데이터를 유지하지 않을 수 있다는 개념이다. 대신 시스템의 상태는 외부 트리거나 입력이 없어도, 시간이 지남에 따라 변할 수 있는 일시적 또는 임시 상태를 가질 수 있다는 것을 의미한다.
Eventually Consistent(최종 일관성)
서버의 구조 상 모든 서버의 데이터가 동시에 일관성을 유지할 수 없다. 하지만 최종적으로는 모든 서버에 데이터가 복제되기에 결국은 일관성이 유지된다고 본다.
DBMS 선택 전략
참고한 사이트
'CS > 데이터베이스' 카테고리의 다른 글
[Database] MongoDB 이해하기 (1) | 2024.01.03 |
---|---|
[DATABASE] 인덱스란? (1) | 2023.10.26 |
Key of Database (0) | 2022.08.17 |
Transaction (0) | 2022.08.16 |