JaeWon's Devlog
article thumbnail
Published 2022. 11. 12. 16:13
[DB] NoSQL DataBase 정리 BackEnd/DataBase
반응형

회사에서 업무 도중 오픈 API 데이터를 긁어와서 저장해두었다가 특정 필드를 확인해서 서비스에 녹이고자 하였습니다.

그러던 중 간단하게 먼저 공부 겸 진행해보라고 하시면서 DB 는 NoSQL 을 사용해보라고 하였습니다.

이번 글에서는 기존 RDB 와 다른 NoSQL 에 대해 정리해보고자 합니다.


1. NoSQL(Not Only SQL)이란?

- NoSQL 은 비관계형 데이터베이스를 의미한다.

- 관계형 데이터 모델을 지양하며 대량의 분산된 데이터를 저장하고 조회하는데 특화되어있으며, 스키마 없이 사용 가능하거나 느슨한 스키마를 제공한다.

- 기존의 관계형 DBMS 가 갖고 있는 특성뿐만 아니라 다른 특성들을 부가적으로 지원한다.

2. NoSQL 특징

- NoSQL DB 는 기존의 관계형 데이터베이스(RDB)보다 더 융통성 있는 데이터 모델을 사용하여 데이터의 저장 및 검색을 위한 특화된 메커니즘을 제공한다.

- 단순 검색 및 추가작업에 있어서 매우 최적화된 키 저장 기법을 사용하여 응답속도나 처리효율 등에 있어 매우 뛰어난 성능을 제공한다.

  1. RDBMS 와 달리 데이터 간의 관계를 정의하지 않는다.
    - RDBMS 는 데이터 관계를 외래키(ForeignKey) 등으로 정의하고 Join 연산을 수행할 수 있지만, NoSQL 은 불가능하다.
    - RDBMS 에서 지원하는 데이터 처리 완결성(Transaction, ACID 지원)이 보장되지 않는다.
  2. RDBMS 에 비해 대용량의 데이터를 저장할 수 있다.
    - 페타바이트 급의 대용량 데이터를 저장할 수 있다.
  3. 분산형 구조이다.
    - 여러 곳의 서버에 데이터를 분산 저장해 특정 서버에 장애가 발생했을 대도 데이터 유실 혹은 서비스 중지가 발생하지 않도록 한다.
    - 분산형 구조를 통해 데이터베이스의 중단 없는 서비스와 자동 복구 기능 지원한다.
  4. 고정되지 않은 테이블 스키마를 가진다.
    - RDBMS 와 달리 테이블의 스키마가 유동적이다.
    - 데이터를 저장하는 컬럼은 각기 다른 이름과 다른 데이터 타입을 가질 수 있다.
  5. 대부분 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

https://en.wikipedia.org/wiki/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

https://inyl.github.io/programming/2017/05/09/database.html

- 테이블의 스키마가 유동적이다.

- 레코드마다 각각 다른 스키마를 가질 수 있다.

- Key-Value Database 와 마찬가지로 데이터 저장 시에는 Key-Value 타입을 사용하지만, 보통 XML/JSON과 같은 Document 형식의 데이터를 레코드에 저장한다.

- 트리형 구조로 레코드를 저장하거나 검색하는데 효과적이다.

- DB 종류 : MongoDB, Couch DB, Azure Cosmos DB

4-3. BigTable(=Wide-Column) Database

https://cloud.google.com/bigtable/docs/overview?hl=ko

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

- 위 그림을 참고하면 Column Family 2 의 Column2의 Row key1에 해당하는 값에 스키마들이 각각 다름(t1,t2,t3)을 확인할 수 있다.

- 이러한 구조를 갖는 Wide Column Database 는 대량의 데이터의 압축, 분산처리, 집계 쿼리(Sum, Count, Avg 등) 및 쿼리 속도에 뛰어나다.

- DB 종류 : Hbase, Google BigTable, Vertica

4-4. Graph Database

https://ko.wikipedia.org/wiki/%EA%B7%B8%EB%9E%98%ED%94%84_%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4

- 데이터를 노드로(그림에선 원형 모양) 표현하며 노드 사이의 관계를 엣지(그림에선 화살표)로 표현한다.

- 일반적으로 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 필요없음

참고

- https://code-lab1.tistory.com/53

- https://azderica.github.io/00-db-nosql/ 

반응형
profile

JaeWon's Devlog

@Wonol

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!