NoSQL vs RDBMS

HunkiKim·2022년 10월 1일
0

NoSQL vs RDBMS

Database

컴퓨터 시스템에 전자 방식으로 저장된 정보들의 집합이다. 여러 사람에 의해 공유되어 사용될 목적으로 통합 관리하는 데이터의 집합이다. 즉 컴퓨터 시스템으로 저장되는 정보, 데이터들의 집합이라는 소리이다.

DBMS (DataBase Management System)

사용자와 DB 사이에서 사용자의 요청을 해석하여 데이터를 생성하고, DB에 저장된 정보를 관리할 수 있도록 하는 소프트웨어이다. 즉 DDL과 DML, DCL을 통해 DB를 조작할 수 있는 시스템이다.

SQL (Structured Query Language)

RDBMS에 저장된 데이터를 관리하기 위해 설계된 프로그래밍 언어이다. DDL, DML, DCL이 있다.

스키마

DB를 구성하는 개체(Entity), 속성(Attribute), 관계(Relationship) 및 제약 조건 등에 관해 전반적으로 정의한 메타데이터의 집합이다. 각 테이블 사이의 관계를 나타내는 ER-DIAGRAM으로 표현한다. 사용자는 데이터를 CRUD할 때 자신이 생성한 스키마를 참조해서 명령을 수행한다.

RDBMS (Relational DataBase Management System)

관계형 모델을 기반으로 하는 DBMS의 한 유형이다.

  • 엑셀과 유사한 형식의 2차원 테이블에 데이터를 정의하고 저장, 관리를 한다. 데이터의 정의, 저장, 관리에 사용하는 것이 SQL일 뿐이다.
  • 테이블은 속성(Attribute, Column)와 값(Value, Row)를 갖고 있다.
  • 각각의 테이블은 서로 관계(FK)를 맺으며 존재한다.
  • 테이블의 정의 관계를 나타내는 스키마에 따라 데이터를 저장한다.
    • 구조화가 중요하다.
  • 수직적인 확장이다. 이건 성능을 업그레이드 하는건데 매우 힘들다. 비용적으로..
  • ACID 특성을 따른다.
  • RDBMS는 MySQL, Oracle, MSSQL이 있다.

NoSQL(Not Only SQL)

비관계형 DB이다.

  • 데이터,테이블 간의 관계를 정의하지 않는다. 즉, 스키마가 없다.
  • 자유롭게 데이터를 저장할 수 있다.
  • 빅데이터를 다루게 되면서 용량이 큰 데이터를 관리하기 위해 등장하였다.
  • 수평적인 확장이다. 즉 서버를 추가해 서버를 전체적으로 분산한다. 비용적으로 유리하다.
  • 정규화를 할 필요가 없다. 애초에 안한다.
  • CAP 이론을 따른다.
    • 분산 시스템에서 CAP의 3가지 속성을 모두 만족하는 것은 불가능하며, 2가지만 만족할 수 있다.
    • Consistency (일관성) : 모든 요청은 최신 데이터 또는 에러를 응답받는다. DB가 3개로 분산됐을 때, 하나의 DB에서 데이터가 수정되면 나머지 2개의 DB에서도 수정된 데이터를 응답받아야 한다. 즉 데이터와 DB의 상태, 제약조건 등이 항상 일관되어야 한다는 것이다.
    • Availability (가용성) : 모든 요청은 정상 응답을 받는다. 특정 DB에 장애가 발생해도 서비스가 가능해야 한다.
    • Partitions Tolerance (분리 내구성) : DB간 통신이 실패해도 시스템은 정상 작동한다.

Key-Value DB

  • 데이터와 Key와 Value 쌍으로 저장한다.
  • Value는 어떤 형태의 데이터도 가능하다. (이미지, 비디오 포함)
  • 검색, 질의 속도가 매우 빠르다.
  • 대량의 데이터를 저장해야 하지만 검색을 위해 복잡한 쿼리를 수행할 필요가 없는 사용 사례에 적합하다. 일번적인 사용자 선호도 저장 또는 캐싱에 사용된다.
  • Redis, Riak, Amazon Dynamo DB가 있다.

Document DB

  • 데이터를 Key와 Document 형태로 저장한다.
  • Key-Value 모델과 달리 Value가 계층적인 형태의 Document로 저장된다.
  • 이 Document는 객체지향에서의 객체와 유사하여 하나의 단위로 취급된다.
  • Key-Value와 마찬가지로 검색 속도가 매우 빠르다.
  • 검색,질의 결과는 Json이나 Xml 형태로 출력한다.
  • 사용이 번거롭고 쿼리가 SQL과 다르다는 단점이 있다.
  • B 트리 인덱스를 사용한다.
  • MongoDB, CouthDB가 있다.

Wide Column DB

  • Column-family Model 기반이다.
    • Key-Value에서 한 단계 발전된 형태이다.
    • Row 단위 저장소이며 Row Key는 Row 식별자로써 값 순으로 자동 정렬되며, 검색시 사용되는 기본 키이다.
    • Column은 은 키-값 쌍이다. 하나의 Row에 수백만 - 수억개의 컬럼을 허용한다. 그리고 항상 Timestamp 값이 같이 저장된다.
    • Column의 값이 다시 여러개의 Column의 Map으로 구성되어 있으면 이를 Column-Family라고 한다.
  • Key-Value를 이용해 필드를 결정한 이전의 모델과 달리 키에서 필드를 결정한다.
  • 키는 위에서 말했뜻이 Row, Column-family, Column-name으로 구성된다.
  • 연관된 데이터는 같은 Column-family 안에 있으며 각자의 Column-name이 있다.
  • RDBMS로 설명하면 attribute(column)이 계층적인 구조를 가진 것이다.
  • 질의, 검색은 Row, Column-Family, Column-name을 통해 수행된다.
  • 쓰기에 최적화된 모델이다. 예시로 채팅 내용 저장, 실시간 분석을 위한 데이터 저장소에 사용된다.
  • HBase, Hypertable이 있다.
  • 예시로 UserProfile이라는 Row에 다시 Bob이라는 Column-family 그리고 email이라는 column-name 과 같이 계층적으로 되어있다.

Graph

  • Node, Edge, Property를 사용하여 데이터를 그래프 구조로 표현하고 저장한다
  • 개체와 관계를 그래프 형태로 표현한다.
  • RDBMS와 같이 ACID를 지원한다.
  • 데이터 간의 관계가 탐색의 키일경우 적합하다.
  • SNS에서 친구의 친구를 찾거나 연관 데이터를 찾는 데에 쓰인다.
  • Neo4J가 있다.

장단점

RDBMS

장점

  1. 정해진 스키마에 따라 데이터를 저장해 명확한 데이터 구조를 보장한다.
  2. 중복없이 1번만 저장한다.
  3. 분류,정렬,탐색 속도가 빠르다.

단점

  1. 테이블 관계가 복잡하면, Join이 많은 복잡한 쿼리가 만들어진다.
  2. 성능 향상을 위해 수직적 확장을 해야하는데 이에 대한 비용이 크다.
  3. 지켜야할 스키마로 데이터가 유연하지 않다. 즉 스키마가 변경되기 어렵다.

결론

데이터 구조가 명확하고, 스키마가 변경될 여지가 없을 때 사용한다.
데이터의 변경이 잦은 시스템에 적합하다.

NoSQL의 장단점

장점

  1. 스키마가 없기 때문에 유연하고 자유롭게 데이터 저장이 관리하다.
  2. 복잡도가 낮기 때문에, 대용량의 데이터를 저장하고 관리 가능하다.
  3. 데이터 분산이 가능하기 때문에 수평적 확장으로 큰 비용없이 성능을 향상할 수 있다.

단점

  1. 데이터의 중복이 발생할 수 있고, 중복된 데이터가 변경되면 해당 데이터가 있는 모든 컬렉션을 수정해야 한다. 따라서 update 속도가 느리다.
  2. 명확한 데이터 구조를 보장하지 않는다.

결론

중복 데이터 수정 문제 때문에 update가 많지 않은 시스템에 적합하다.
분산으로 인한 수평적 확장이 가능해 빅데이터에 적합하다. 명확한 데이터 구조를 알 수 없고, 데이터가 확장될 수 있을때 사용한다.

0개의 댓글