제가 공부한 내용을 정리하는 블로그입니다.
아직 많이 부족하고 배울게 너무나도 많습니다. 틀린내용이 있으면 언제나 가감없이 말씀해주시면 감사하겠습니다😁

NoSQL을 제대로 알기 전에 RDBMS의 특징을 제대로 알고 가보자!

 

RDBMS의 특징

  • Column과 Row가 두개 이상의 테이블
  • Row: 정보를 나타냄
  • Column: 이름, 주소 등 특정한 유형의 정보를 정렬
  • 스키마: 테이블과 필드 타입 간의 관계
  • 관계형 데이터베이스에서 스키마는 정보를 추가하기 전에 명확하게 정의되어 있어야 함.
    • 테이블과 필드의 설계를 확실히하고 데이터를 저장해야함.
    • 데이터 중복을 최소화, 데이터 정합성을 맞춰야 함.
    • 데이터의 유연성이 떨어지는 상황도 발생하기도 함.
  • SQL
    • 데이터베이스 설계자가 관계형 데이터베이스를 설계하는데 사용하는 프로그래밍 언어.
    • 쿼리를 통해 데이터를 생성, 검색, 수정, 삭제 가능.

NoSQL


Not Only SQL
기존 RDBMS 방식을 탈피한 데이터베이스 기존의 관계형 DB가 가지고 있는 특성뿐만 아니라 다른 특성들을 부가적으로 지원. RDBMS가 가지고 있는 한계를 극복하기 위해 데이터 저장소의 새로운 형태로 수평적 확장성을 지님으로써 문서, 그래프, 키 값, 인 메모리, 검색을 포함하여 다양한 데이터 모델을 사용.

NoSQL 특징

  • RDBMS와 달리 데이터 간의 관계를 정의하지 않음.
  • RDBMS에 비해 훨씬 더 대용량의 데이터를 저장 가능.
  • 반정형화, 비정형 데이터에 적합.
  • 분산형 구조이기에 확장성이 뛰어남.
  • 고정되지 않은 테이블 스키마를 가짐.
  • ACID대신 Eventual Consistency를 허용한다.
💡 ACID
ACID는트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가르키는 약어로
원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 지속성(Durability)이 존재.

💡 Eventual Consistency
다양한 기기에 분산 저장되어 있는 데이터를 Update할 경우 실시간으로 다른 기기에 전파하기에 어려운데
이를 조금 타협하여 최신은 아닐 수 있지만 Update 전까지는 최신의 데이터를 반환.

 

NoSQL 유형

  • Graph Store: 서로 연관된 그래프 형식의 데이터를 저장
    • Node와 Edge에 데이터를 저장
    • Node: 사람, 장소 및 사물에 대한 정보가 저장.
    • Edge: 노드 간의 관계에 대한 정보가 저장.
    • 소셜 네트워크, 사기 탐지, 권장 엔진 같은 패턴을 찾아보기 위해 관계를 상세히 검토해야하는 사례에 적합.
    • Neo4j와 JanusGraph
  • Wide Column Store: Row가 아닌 Column 형태로 데이터를 저장
    • 테이블, 행 및 동적 열에 데이터를 저장
    • 각 행이 동일한 열을 가질 필요가 없다는 점에서 관계형 데이터베이스에 비해 뛰어난 유연성을 제공.
    • 대량의 데이터를 저장해야할 때 적합.
    • 사물인터넷 데이터와 사용자 프로필 데이터를 저장하는데 사용
    • Cassandra, HBASE
  • Document Store: 비정형 대량 데이터를 저장
    • JSON 객체와 비슷한 문서에 데이터를 저장.
    • 각 문서에는 필드와 값의 쌍이 포함
    • 일반적으로 값은 String, Number, Boolean, Array, Object 등 다양한 유형이 가능
    • MongoDB
  • Key-Value Store: 메모리 기반으로 빠르게 데이터를 저장 및 읽기
    • Key-Value 데이터베이스는 각 항목에 키와 값이 포함되어 있는 보다 간단한 유형의 데이터베이스
    • Value은 보통 Key를 참조하는 방식으로만 검색이 가능
    • Key-Value 데이터베이스는 대량의 데이터를 저장해야 하지만 검색을 위해 복잡한 쿼리를 수행할 필요가 없는 사례에 적합.
    • 일반적으로 사용자 선호도 저장 또는 캐싱에 사용
    • Redis, DynanoDB

NoSQL 장점

  • 유연성: 스키마가 없기 때문에 유연한 데이터구조
  • 확장성: 데이터 분산이 용이하며 성능 향상을 위한 Scale-up, Scale-out이 가능
  • 고성능: 특정 데이터 모델 및 액세스 패턴에 대해 최적화 되어 관계형 DB를 통해 유사한 기능을 충족하려 할 때보다 뛰어난 성능
  • 고기능성: 각 데이터 모델에 맞춰 특별히 구축된 뛰어난 기능의 API와 데이터 유형을 제공

NoSQL 단점

  • 데이터 중복 가능: 데이터 변경시 모든 컬렉션에서 수행해야 함.
  • 스키마가 존재하지 않아 명확한 데이터 구조를 보장하지 못함.
  • 제품 지원을 받기 어려움.

사용 요령

  • NoSQL은 데이터의 구조를 알 수 없는 경우 사용하는 것이 좋다.
  • Update가 많이 이뤄지지 않는 시스템이 좋다
  • Scale-out이 가능하다는 장점이 있어 막대한 데이터를 저장해야하는 경우 적합하다.
  • 기존의 정형화된 데이터 뿐만 아니라 메신저 텍스트, 음성 등 반정형화, 비정형화된 데이터도 저장하고 다루어야 하는 경우
  • 대규모 데이터를 다루는데 해당 데이터의 특징이 자주 바뀌는 경우
  • 강력한 일관성보다 성능과 가용성이 더 중요한 서비스인 경우
  • 굳이 ACID 특징이 필요 없는 읽기 전용 데이터를 관리하는 경우

참조

'Database > Redis' 카테고리의 다른 글

[Redis] Redis 고급 및 캐싱전략  (0) 2024.05.16
[Redis] Redis Data Type  (0) 2024.05.16
[Redis] Redis 기본  (0) 2024.05.10
[OSSCA2024] Redis 과제 3  (0) 2024.04.25

+ Recent posts