코딩못하는사람

NoSQL이란 본문

C.S 지식정리

NoSQL이란

공부절대안함 2021. 12. 22. 02:01

NoSQL이란?

정형 데이터가 아닌 반정형,비정형화 데이터가 빠르게 늘어나면서 빅데이터와 클라우드 환경에서 기존 RDBMS로 트래픽을 감당하기 어려워졌다. 그에 따라 스키마를 유연하게 만들고, 작업의 완전성을 보장해주는 ACID 기능을 희생하여 뛰어난 확장성이나 성능의 특성을 가진 비관계형,분산 데이터 베이스들을 보편적으로 NoSQL이라고 한다.

 

기존 RDBMS와의 차이점

1. 관계형 모델을 사용하지 않으며 테이블간의 조인 기능 없음

       -조인할 필요 없이 이미 모든 값을 가지고 저장된다.

2. 확장성, 가용성, 높은 성능

3. 대부분 여러 대의 데이터베이스 서버를 묶어서(클러스터링) 하나의 데이터베이스를 구성
4. 관계형 데이터베이스에서는 지원하는 Data처리 완결성(Transaction ACID 지원) 미보장
5. 데이터의 스키마와 속성들을 다양하게 수용 및 동적 정의 (Schema-less)
6. 데이터베이스의 중단 없는 서비스와 자동 복구 기능지원

       -클러스터링 된 노드 중 하나 이상의 노드가 실패(Fail)되더라도 정상적으로 요청을 처리할 수 있는 기능을 제공
7. 다수가 Open Source로 제공

8. 직접 프로그래밍을 하는 등의 비SQL 인터페이스를 통한 데이터 액세스

CAP이론

CAP 정리에 의하면 분산 컴퓨터 시스템은 일관성(Consistency), 가용성(Availablity), 분단 허용성(Partition torlerance) 세 가지 속성중에서, 두 가지만 가질 수 있다는 것이다.

https://ohjongsung.io/

  • 일관성(Consistency): 모든 노드가 같은 순간에 같은 데이터를 볼 수 있다.
  • 가용성(Availability): 모든 요청이 성공 또는 실패 결과를 반환할 수 있다. 하나의 노드에 장애가 생겨도 다른 노드로 서비스를 제공할 수 있어야 한다.
  • 분단 허용성(Partition tolerance): 클러스터가 여러 대 동작하고 있을 때, 해당 클러스터 사이에 접속이 단절되어 서로 통신을 할 수 없는 상황에서도 시스템이 잘 동작해야 한다는 것이다.

RDBMS는 CA의 특성을 가지고, NoSQL 데이터 베이스들은 CP 혹은 AP특성을 가지고 설계된다.

NoSQL의 종류

1. Document Database (MongoDB)

일반적으로 가장 많이 알려진  NoSQL이다

테이블이 스키마가 유동적이다. 즉 레코드마다 각각 다른 스키마를 가질 수 있습니다. XML, JSON과 같은 Document를 이용해 레코드를 저장. 트리형 구조로 레코드를 저장하거나 검색하는데 좋은 Database

 

2. Key Value Database (Redis)

기본적인 패턴으로 Key,value가 하나의 묶음으로 저장되는 구조로 단순한 구조이기에 속도가 빠르며 분산 저장 시 용이. Key 안에 (Column, Value) 형태로 된 여러개의 필드로 구성.

주로 Serverconfig, 세션정보 저장등에 사용되고 엑세스 속도는 빠르지만 범위 탐색에는 좋지 않다.

3. Wide Column Database(Cassandra, HBase)

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

대량의 데이터의 압축, 분산처리, 집계 쿼리 (SUM, COUNT, AVG 등)및 쿼리 동작 속도 그리고 확장성이 뛰어난 것이 그 대표적 특징.

4. Graph Database (Neo4j)

데이터를 노드로(그림4에서 파란, 녹색 원) 표현하며 노드 사이의 관계를 엣지(그림4에서 화살표)로 표현, RDBMS 보다 Performance가 좋고 유연하며 유지보수에 용이한 것이 특징. Social networks, Network diagrams 등에 사용할 수 있다.

 

NoSQL vs SQL

SQL의 장점

  • 명확하게 정의 된 스키마, 데이터 무결성 보장
  • 관계는 각 데이터를 중복없이 한번만 저장

NoSQL의 장점

  • 스키마가 없기 때문에 유연하다. 언제든지 저장된 데이터를 조정하고 새로운 "필드"를 추가 할 수 있다.
  • 데이터는 애플리케이션이 필요로 하는 형식으로 저장된다.
  • 수직 및 수평 확장이 가능하므로 데이터베이스가 애플리케이션에서 발생시키는 모든 읽기 / 쓰기 요청을 처리 할 수 있습니다.

SQL의 단점

  • 관계를 맺고 있기 때문에, JOIN문이 많은 매우 복잡한 쿼리가 만들어 질 수 있습니다.
  • 수평적 확장이 어렵고, 대체로 수직적 확장만 가능합니다. 한계점이 있다.

NoSQL의 단점

  • 데이터가 여러 컬렉션에 중복되어 있기 때문에, 중복된 데이터를 수정해야 하는 경우 해당 데이터를 가진 모든 노드에서 수정이 일어나야 한다.

SQL을 고려해야 할 때

  • 관계를 맺고 있는 데이터가 자주 변경(수정)되는 애플리케이션일 경우
  • 변경될 여지가 없고, 명확한 스키마가 사용자와 데이터에게 중요한 경우
  • 데이터의 완벽성이 중요한 경우

NoSQL을 고려해야 할 때

  • 정확한 데이터 구조를 알 수 없거나 변경 / 확장 될 수 있는 경우
  • 읽기(read)처리를 자주하지만, 데이터를 자주 변경(update)하지 않는 경우
  • 데이터베이스를 수평으로 확장해야 하는 경우

1차적으로 다음과 같이 고려한 후 데이터베이스 설계를 통해 단점을 완화할 수 있다.

 

 

공부한 곳

https://siyoon210.tistory.com/130

https://www.samsungsds.com/kr/insights/1232564_4627.html

http://www.incodom.kr/NoSQL_DB_%EC%9D%98_%EC%A2%85%EB%A5%98

'C.S 지식정리' 카테고리의 다른 글

헥사고날 아키텍처란  (0) 2023.02.13
nginx로 로드밸런싱 해보기  (0) 2021.09.10
Redis란? (우아한 Redis 강연)  (0) 2021.07.31
유스케이스 다이어그램  (2) 2021.04.29
[UML] 클래스 다이어그램  (0) 2021.04.29
Comments