RDB와 NoSQL

qkrrnjswo·2023년 8월 1일
0

공부 정리

목록 보기
21/24

1. RDB

관계형 데이타 모델에 기초를 둔 데이타베이스이다.
관계형 데이타 모델이란 데이타를 구성하는데 필요한 방법 중 하나로
모든 데이타를 2차원의 테이블 형태로 표현하는 모델을 말한다.


2. NoSQL

Not Only SQL의 약자로 기존 RDB 형태의 관계형 데이터베이스가 아닌 다른 형태의 데이터 저장 기술을 의미한다.

SQLNoSQL
규격이 정해져 있다.정해진 규격이 없다.
Join이 가능하다.Join이라는 개념 자체가 없다.
트랜잭션을 사용한다.트랜잭션이 없다. → MongoDB 어느정도 가능
분산처리가 어렵다.분산처리가 쉽다.
ACID를 구현한다.ACID를 완벽히 구현하지 않고 "Eventual consistency" 개념이 도입되었다.

3. CAP

분산 데이터베이스는 방대한 데이터를 다루기에 유용한 시스템이다. 분산 데이터베이스는 수평 확장할 수 있기 때문에 트래픽이 증가하더라도 낮은 지연 시간을 유지할 수 있고, 일부 노드 장애에 적절히 대응할 수 있다. NoSQL 데이터베이스는 대표적인 분산 데이터베이스이며, 유연하게 데이터를 다룰 수 있다는 장점이 있다.

분산시스템과 CAP 이해

분산형 구조는 일관성(Consistency), 가용성(Availability), 분산 허용(Partitioning Tolerance)의 3가지 특징을 가지고 있다. CAP이론은 이 중 2가지만 만족할 수 있다는 이론인데, NoSQL은 대부분 이 CAP이론을 따른다.

3.1 일관성(Consistency)

  • 데이터는 항상 일관성 있는 상태를 유지해야 하고 데이터의 조작 후에도 무결성을 해치지 말아야 한다는 속성이다.
  • 쓰기 동작이 완료된 후 발생하는 읽기 동작은 마지막으로 쓰여진 데이터를 리턴해야 한다
  • 일관성은 동시성 또는 동일성이라고도 하며 다중 클라이언트에서 같은 시간에 조회하는 데이터항상 동일한 데이터임을 보증하는 것을 의미한다.
  • 이것은 관계형 데이터베이스가 지원하는 가장 기본적인 기능이지만 일관성을 지원하지 않는 NoSQL을 사용한다면 데이터의 일관성이 느슨하게 처리되어 동일한 데이터가 나타나지 않을 수 있다.
  • 느슨하게 처리된다는 것은 데이터의 변경을 시간의 흐름에 따라 여러 노드에 전파하는 것을 말한다.
  • 이러한 방법을 최종적으로 일관성이 유지된다고 하여 최종 일관성 또는 궁극적 일관성을 지원한다고 한다.
  • 각 NoSQL들은 분산 노드 간의 데이터 동기화를 위해서 두 가지 방법을 사용한다.
  1. 첫번째로 데이터의 저장 결과를 클라이언트로 응답하기 전에 모든 노드에 데이터를 저장하는 동기식 방법이 있다. 그만큼 느린 응답시간을 보이지만 데이터의 정합성을 보장한다.
  2. 두번째로 메모리나 임시 파일에 기록하고 클라이언트에 먼저 응답한 다음 특정 이벤트 또는 프로세스를 사용하여 노드로 데이터를 동기화하는 비동기식 방법이 있다. 빠른 응답시간을 보인다는 장점이 있지만, 쓰기 노드에 장애가 발생하였을 경우 데이터가 손실될 수 있다.
  • 분산 시스템에서 일관성을 유지하기 위해서는 희생이 따른다.
  • 가용성과 분할 허용성을 지원하는 카산드라(Cassandra DB)는 최종 일관성을 지원한다.
  • 또한 설정값을 조절하여 강한 일관성을 지원할 수 있다.
  • 많은 NoSQL 솔루션은 읽기와 쓰기의 성능 향상을 위해 데이터를 메모리에 임시로 기록한 다음 클라이언트에 응답하고 백그라운드 쓰레드(혹은 프로세스)로 해당 데이터를 디스크에 기록한다.
  • 방금 전에 언급했듯이 이 경우에는 데이터 손실의 위험이 존재하게 되는데 카산드라와 HBase에서는 이러한 손실을 방지하기 위해 메모리에 저장하기 에 커밋로그 및 WAL파일에 먼저 정보를 기록하는 방법을 사용하고 있다. Redis에도 AOF(Append Only File)라는 기능이 존재한다.

3.2 가용성(Availability)

  • 특정 노드가 장애가 나도 서비스가 가능해야 한다라는 의미를 가진다.
  • 데이터 저장소에 대한 모든 동작(read, write 등)은 항상 성공적으로 리턴되어야 한다.
  • 명확해 보이는 단어이기는 하지만 분산 시스템에서의 특징을 말하는 것이기 때문에 서비스가 가능하다와 성공적으로 리턴이라는 표현이 애매하다.
  • 얼마동안 기다리는 것 까지를 성공적이라고 할 수 있느냐에 대한 문제가 남아있다.
  • 20시간정도 기다렸더니 리턴이 왔어! Availability가 있는 시스템이야! 라고 할 수 없기 때문이다.
  • 다시한번 성공적으로 리턴 에 대해서 보면 모든 동작에 대해서 시스템이 Fail 이라는 리턴을 성공적으로 보내준다면 그것을 Availability가 있다고 해야 하느냐에 대해서도 애매하다.
  • CAP를 설명하는 문서들 중 Fail 이라고 리턴을 하는 경우도 성공적인 리턴 이라고 설명하는 것을 보았다.
  • NoSQL은 클러스터 내에서 몇 개의 노드가 망가지더라도 정상적인 서비스가 가능하다.
  • 몇몇 NoSQL은 가용성을 보장하기 위해 데이터 복제(Replication)을 사용한다.
  • 동일한 데이터를 다중 노드에 중복 저장하여 그 중 몇 대의 노드가 고장나도 데이터가 유실되지 않도록 하는 방법이다.
  • 데이터 중복 저장 방법에는 동일한 데이터를 가진 저장소를 하나 더 생성하는 Master-Slave 복제 방법데이터 단위로 중복 저장하는 Peer-to-Peer 복제 방법이 있다.

3.3 분산 허용(Partitioning Tolerance)

  • 분할 허용성이란 지역적으로 분할된 네트워크 환경에서 동작하는 시스템에서 두 지역 간의 네트워크가 단절되거나 네트워크 데이터의 유실이 일어나더라도 각 지역 내의 시스템은 정상적으로 동작해야 함을 의미한다.
  • Availablity와의 차이점은 Availability는 특정 노드가 장애가 발생한 상황에 대한 것이고
  • Tolerance to network Partitions는 노드의 상태는 정상이지만 네트워크 등의 문제로 서로 간의 연결이 끊어진 상황에 대한 것이다.

참고

https://jwprogramming.tistory.com/52

1개의 댓글

comment-user-thumbnail
2023년 8월 1일

좋은 글이네요. 공유해주셔서 감사합니다.

답글 달기