회사에서 업무 도중 오픈 API 데이터를 긁어와서 저장해두었다가 특정 필드를 확인해서 서비스에 녹이고자 하였습니다.
그러던 중 간단하게 먼저 공부 겸 진행해보라고 하시면서 DB 는 NoSQL 을 사용해보라고 하였습니다.
이번 글에서는 기존 RDB 와 다른 NoSQL 에 대해 정리해보고자 합니다.
1. NoSQL(Not Only SQL)이란?
- NoSQL 은 비관계형 데이터베이스를 의미한다.
- 관계형 데이터 모델을 지양하며 대량의 분산된 데이터를 저장하고 조회하는데 특화되어있으며, 스키마 없이 사용 가능하거나 느슨한 스키마를 제공한다.
- 기존의 관계형 DBMS 가 갖고 있는 특성뿐만 아니라 다른 특성들을 부가적으로 지원한다.
2. NoSQL 특징
- NoSQL DB 는 기존의 관계형 데이터베이스(RDB)보다 더 융통성 있는 데이터 모델을 사용하여 데이터의 저장 및 검색을 위한 특화된 메커니즘을 제공한다.
- 단순 검색 및 추가작업에 있어서 매우 최적화된 키 저장 기법을 사용하여 응답속도나 처리효율 등에 있어 매우 뛰어난 성능을 제공한다.
- RDBMS 와 달리 데이터 간의 관계를 정의하지 않는다.
- RDBMS 는 데이터 관계를 외래키(ForeignKey) 등으로 정의하고 Join 연산을 수행할 수 있지만, NoSQL 은 불가능하다.
- RDBMS 에서 지원하는 데이터 처리 완결성(Transaction, ACID 지원)이 보장되지 않는다. - RDBMS 에 비해 대용량의 데이터를 저장할 수 있다.
- 페타바이트 급의 대용량 데이터를 저장할 수 있다. - 분산형 구조이다.
- 여러 곳의 서버에 데이터를 분산 저장해 특정 서버에 장애가 발생했을 대도 데이터 유실 혹은 서비스 중지가 발생하지 않도록 한다.
- 분산형 구조를 통해 데이터베이스의 중단 없는 서비스와 자동 복구 기능 지원한다. - 고정되지 않은 테이블 스키마를 가진다.
- RDBMS 와 달리 테이블의 스키마가 유동적이다.
- 데이터를 저장하는 컬럼은 각기 다른 이름과 다른 데이터 타입을 가질 수 있다. - 대부분 Open Source 로 제공한다.
- 대다수의 제품이 고확장성, 고가용성, 고성능을 가진다.
3. NoSQL 의 장단점
3-1. 장점
- 유연한 데이터 모델
- 유연한 스키마를 가짐으로써, 요구 사항이 변경되었을 대 데이터베이스를 쉽게 변경할 수 있다. - 수평적 화장
- RDB 의 경우에는 용량 초과 시 수직적 확장(비싼 서버)가 필요하지만, NoSQL 의 경우에는 수평적 화장이 가능하다.(제한은 있다) - 빠른 쿼리
- RDB 의 경우에는 여러 테이블을 Join 을 통해 데이터를 조회 쿼리를 사용하지만, NoSQL 의 경우 쿼리에 최적화되어 저장한다.
- Big Data 처리에 효과적이다. - 개발자에 친화적
- 데이터 구조를 일반적인 프로그래밍 언어의 데이터 구조에 매핑한다.
- 적은 코드를 작성하면서, 개발 시간을 단축하고 버그를 줄일 수 있다.
3-2. 단점
- 데이터 업데이트 중 장애가 발생하면 데이터 손실이 발생할 수 있다.
- 많은 인덱스를 사용하려면 충분한 메모리가 필요하다.(인덱스 구조가 메모리에 저장)
- 데이터 일관성이 항상 보장되지 않는다.(ACID 트랜잭션을 지원하지 않는다.)
4. NoSQL DataBase 종류 및 특징
- 대표적인 NoSQL 데이터베이스의 종류는 아래와 같습니다.
- Key-Value Database
- Document Database (Mongo DB, Couchbase DB)
- BigTable(=Wide Columnar) Database (Hbase, Casandra)
- Graph Database (Sones, AllegroGraph)
4-1. Key-Value Database
- 기본적인 패턴으로 Key-Value 가 하나의 쌍(Unique)으로 저장되는 구조이다.
- 단순하 구조이기 때문에 속도가 빠르며 분산 저장 시 용이하다.
- Key 에는 (Column, Value) 형태로 된 여러 개의 필드, Column Families 를 갖는다.
- 주로 Server Config, Session Clustering 등에 사용되고 엑세스 속도는 빠르지만, Scan 에는 용이하지 않다.
- DB 종류 : Riak, Redis, Voldmort, Oracle NoSQL Database
4-2. Document Database
- 테이블의 스키마가 유동적이다.
- 레코드마다 각각 다른 스키마를 가질 수 있다.
- Key-Value Database 와 마찬가지로 데이터 저장 시에는 Key-Value 타입을 사용하지만, 보통 XML/JSON과 같은 Document 형식의 데이터를 레코드에 저장한다.
- 트리형 구조로 레코드를 저장하거나 검색하는데 효과적이다.
- DB 종류 : MongoDB, Couch DB, Azure Cosmos DB
4-3. BigTable(=Wide-Column) Database
- 행마다 키와 해당 값을 저장할 때 각가 다른 값의 다른 수의 스키마를 가질 수 있다.
- 위 그림을 참고하면 Column Family 2 의 Column2의 Row key1에 해당하는 값에 스키마들이 각각 다름(t1,t2,t3)을 확인할 수 있다.
- 이러한 구조를 갖는 Wide Column Database 는 대량의 데이터의 압축, 분산처리, 집계 쿼리(Sum, Count, Avg 등) 및 쿼리 속도에 뛰어나다.
- DB 종류 : Hbase, Google BigTable, Vertica
4-4. Graph Database
- 데이터를 노드로(그림에선 원형 모양) 표현하며 노드 사이의 관계를 엣지(그림에선 화살표)로 표현한다.
- 일반적으로 RDBMS 보다 성능이 좋고 유연하며 유지보수에 용이하다.
- DB 종류 : Neo4j, BlazeGraph, OrientDB, Titan, AllegroGraph
5. RDB VS NoSQL
RDB | NoSQL | |
데이터모델 | 고정 행과 열이 있는 테이블 | Document-Json, Key Value, etc... |
DB 종류 | Oracle, MySQL, MSSQL, postgreSQL, etc... | MongoDB, Redis, HBase, Neo4j, etc... |
목적 | 범용 | 범용, 대량의 데이터 추출, 관계분석, 탐색 등 |
스키마 | 엄격 | 유연 |
확장성 | 수직 | 수평 |
ACID 트랜잭션 | 지원 | 대부분 지원하지 않음 |
ORM | ORM 필요 | 대부분 ORM 필요없음 |
참고
'BackEnd > DataBase' 카테고리의 다른 글
[DB] MySQL/MariaDB Pivot(피벗) 테이블 사용/만들기 (0) | 2022.12.01 |
---|---|
[DB] CouchBase 설치하기(With. Intel Mac) (2) | 2022.11.13 |
[MySQL] DATEDIFF, TIMESTAMPDIFF 함수를 통한 날짜 차이 계산하기 (2) | 2022.08.29 |
[MYSQL] IN, EXISTS 절 활용하기 (0) | 2022.08.27 |
[MySQL] abs 함수를 통한 절대값 구하기 (0) | 2022.08.26 |