RDB vs NoSQL

SOL·2023년 4월 6일
0

db

목록 보기
2/4

RDB

  • 관계형 데이터베이스로, 데이터를 테이블 형태로 구성하고 테이블 간의 관계를 이용해 데이터를 저장하고 관리하는 방식.
  • SQL을 이용해 데이터를 조작하며, 데이터의 일관성과 무결성을 보장한다.
  • ACID (Atomicity, Consistency, Isolation, Durability) 특성을 가지고 있어 데이터의 일관성과 안전성을 보장한다.
    - Atomicity(원자성) : 트랜잭션을 전부 실행 하거나 전부 실행하지 않음의 두 가지 결과만 가질 수 있다.
    - Consistency(일관성) : 트랜잭션이 실행된 후에도 데이터베이스의 제약 조건이나 규칙 등이 만족되어야 한다.
    - Isolation(고립성) : 한 트랜잭션이 수행 중인 동안 다른 트랜잭션이 영향을 미치지 않는다.
    • Durability(지속성) : 시스템에 문제가 발생해도 트랜잭션 처리 결과는 보존되어야 한다.

 

NoSQL

  • 비관계형 데이터베이스로, 데이터를 테이블 형태로 구성하지 않고, key-value, document, graph, column 등 다양한 데이터 모델ㅇ르 사용하여 데이터를 저장하고 관리한다.
  • BASE (Basically Available, Soft state, Eventually consistent) 특성을 가지며, 일관성을 포기하고 가용성과 성능을 높이는 것이 목적이다.
    - Basically Available : 시스템의 가용성을 보장하는 것을 의미
    - Soft State : 시스템의 상태가 일시적으로 유연하게 변경될 수 있다는 것을 의미(데이터베이스에서 변경되는 데이터가 일관성 있는 상태로 유지되는 것보다는 다양한 클라이언트들이 동시에 접근할 수 있는 유연성을 중요시)
    - Eventual Consistency : 데이터베이스에서 변경이 발생할 때, 시스템 내 모든 복제본 간의 데이터 일관성이 즉시 유지되는 것이 아니라, 일정 시간 내에 최종적으로 일관성을 유지한다는 것을 의미

대용량 데이터 처리와 분산형 데이터 처리에 효과적인 이유

  • 수평적인 확장에 적합
    * NoSQL은 데이터를 분산시켜 여러 대의 서버에서 처리할 수 있음. 이를 위해 데이터를 샤팅하여 여러 서버에 분산시키며, 각 서버는 데이터 일부를 저장하고 처리한다. 이렇게 분산된 데이터는 병렬적으로 처리되어 처리 속도가 빠름
  • NoSQL은 다양한 데이터 모델을 제공한다. 이를 통해 데이터 구조와 처리 방식을 최적화하여 대용량 데이터 처리를 효과적으로 수행할 수 있다.
  • 일관성을 포기하고 가용성과 성능을 높이는 BASE 특성을 가진다. 이를 통해 대용량 데이터 처리에 효과적인 분산 시스템을 구축할 수 있다.

 

데이터 샤딩(Sharding)

  • 대규모 데이터를 처리하기 위해 사용하는 기술 중 하나로, 데이터를 여러 조각으로 나누어 각각 다른 서버에 분산 저장하는 것을 의미한다.
  • 데이터베이스의 테이블을 여러 파티션으로 분할하여 각각 다른 서버에 저장한다. 이 때, 파티션의 기준은 주로 hashrange 등의 방법으로 결정된다.
  • 데이터 샤딩은 데이터 일관성과 관련된 문제를 발생시킬 수 있으며, 복잡한 구조를 가지고 있어서 관리가 어려울 수 있다. 이러한 문제점을 해결하기 위해, 분산형 데이터베이스 시스템은 다양한 기술과 알고리즘을 사용하여 데이터 일관성을 유지하고 관리를 용이하게 한다.

 

필요한 데이터가 어느 서버에 있는지 어떻게 알까?

일반적으로 NoSQL 데이터베이스는 클러스터링(Clustering)을 지원하며, 클러스터 내의 모든 서버는 동일한 데이터를 저장하는 것이 아니라, 서로 다른 샤드(Shard)에 데이터를 저장
-> 데이터를 요청하는 클라이언트는 어느 서버에 요청을 보내야 하는지를 알아내야 함

이를 위해 NoSQL 데이터베이스는 분산 네임스페이스(Distributed Namespace)와 분산 라우터(Distributed Router)를 사용한다.

분산 네임스페이스

각 서버가 어떤 데이터를 담당하고 있는지를 기록하는 데이터베이스의 메타데이터 정보
-> 이 정보를 이용하여 클라이언트는 데이터를 요청할 때 분산 라우터에게 어느 서버에서 데이터를 가져와야 하는지를 요청하면, 분산 라우터는 적절한 서버를 찾아 응답합니다.

예를 들어, MongoDB에서는 분산 네임스페이스를 config 데이터베이스의 chunks 컬렉션에 저장하고, 분산 라우터로는 mongos 프로세스를 사용합니다. 클라이언트는 mongos 프로세스에 요청을 보내면, mongos는 분산 네임스페이스를 조회하여 어느 서버에 요청을 보내야 하는지를 결정하고, 요청을 처리하는 서버에 전달합니다.

NoSQL은 언제 사용하는 게 좋을까?

  • 정확한 데이터 구조가 정해지지 않은 경우
  • 데이터 update가 자주 일어나지 않고 조회가 많은 경우
  • scale out 이 가능하므로 데이터 양이 매우 많은 경우

데이터 update가 자주 일어나는 경우에는 왜 적합하지 않을까?

NoSQL은 대체로 분산형 아키텍쳐를 사용하고, 이에 따라 데이터 일관성 유지를 위한 추가적인 처리 비용이 발생한다. 또, NoSQL은 일반적으로 eventual consistency 모델을 사용하는데, 이는 데이터의 일관성을 보장하는 대신, 업데이트된 데이터가 다른 노드에 도달하는 시간이 지연될 수 있다는 것을 의미한다. 따라서, NoSQL은 일관성보다는 가용성과 분산성에 중점을 둔 시스템으로, 데이터 일관성이 매우 중요한 경우에는 RDBMS보다는 부적합할 수 있다. 하지만, 데이터 업데이트가 매우 빈번하지 않거나, 빠른 읽기 속도가 필요한 경우에는 NoSQL이 적합할 수 있다.

NoSQL이 읽기 속도가 빠른 이유

데이터를 여러 노드에 분산해서 저장하고 처리하기 때문에, 병렬 처리를 이용하여 높은 읽기 처리량을 달성할 수 있다. 또한, 스키마가 유연하고, 복잡한 JOIN 연산이 필요하지 않기 때문에 읽기 쿼리가 간단하고 빠르다. 일부 NoSQL DB는 인덱싱이 매우 빠르게 처리되기 때문에 대량의 데이터에서도 빠른 검색 속도를 보장할 수 있다.

 

RDB는 언제 사용하는 게 좋을까?

  • 데이터 구조가 정확하여 변경될 여지가 없는 경우
  • 데이터 update가 잦은 경우

 

정리

  1. 데이터 모델에서의 차이점
    RDB는 정형화된 데이터 모델을 사용하고, NoSQL은 비정형화된 데이터 모델을 사용합니다. RDB는 관계형 스키마에 따라 테이블에 저장되며, 각 테이블은 관계로 연결됩니다. NoSQL에서는 데이터를 Document, Key-Value, Column-Family, Graph 등 다양한 형태의 모델에 따라 저장됩니다.
  2. 확장성
    RDB는 기본적으로 수직적 확장에 적합한 반면, NoSQL은 수평적 확장에 적합합니다. 수직적 확장이란, 더 많은 데이터를 처리하기 위해 더 많은 CPU, 메모리, 디스크 등의 자원을 추가하는 것을 말합니다. 즉, RDB에서는 단일 서버에 많은 자우너을 투입하여 성능을 개선하는 방식이 일반적입니다. 수평적 확장이란, 더 많은 데이터를 처리하기 위해 여러 대의 서버를 추가하는 것을 말합니다. NoSQL에서는 데이터를 여러 서버에 분산하여 처리하므로, 서버를 추가하면서 더 많은 데이터를 저장하고 처리할 수 있습니다.
  3. ACID vs BASE (DB 시스템의 트랜잭션 처리 방식에 대한 차이점)
    ACIDatomicity(원자성), consistency(일관성), isolation(고립성), durability(지속성)의 약어로 데이터베이스 트랜잭션 처리의 안정성과 일관성을 보장합니다. 이는 모든 트랜잭션이 완료될 때까지 다른 트랜잭션에 영향을 주지 않고, 데이터 일관성을 유지하기 위해 사용됩니다. 예를 들어, 은행에서 계좌 이체를 하기 위해 사용되는 트랜잭션은 완료되기 전에 다른 트랜잭션에서 계좌 정보를 변경할 수 없습니다.
    BASEBasically Available, Soft state, Eventual consistency의 약어로 ACID와 반대로 일관성 보다는 가용성을 중시합니다. NoSQL에서는 모든 서버가 동일한 데이터를 가지고 있지 않을 수 있으며, 일부 서버에서는 데이터가 더 이상 최신 상태가 아닌 경우가 있을 수 있습니다. 이를 해결하기 위해 NoSQL은 일관성을 보장하느 ㄴ것이 아니라, 최종적으로 일관성을 유지하는 것을 목표로 합니다. 예를 들어, 소셜 네트워크에서 사용되는 NoSQL 시스템에서는 최신글이나 댓글을 모든 서버에서 즉시 사용할 필요가 없으며, 일부 서버에서는 조금 더 오래된 데이터를 제공해도 문제가 없습니다.
  4. 쿼리
    RDB에서는 SQL을 사용하여 데이터를 검색합니다. 반면에, NoSQL은 다양한 데이터 모델을 사용하기 떄문에, 쿼리 언어도 다양합니다. 예를 들어, key-value 스토어는 단순히 key-value 쌍으로 데이터를 저장하고 검색하기 때문에, 간단한 Get과 Put 연산만 제공합니다. Document 스토어는 JSON이나 XML과 같은 문서 형식으로 데이터를 저장하기 때문에, JSON 쿼리를 사용하여 데이터를 검색할 수 있습니다. Graph 스토어는 노드와 엣지를 사용하여 데이터를 저장하기 때문에, 그래프 쿼리 언어를 사용하여 복잡한 그래프 분석을 수행할 수 있습니다.

0개의 댓글