[TIL] DB : SQL vs NoSQL

은경·2022년 1월 23일
0


출처 : https://www.danielleskosky.com/sql-nosql-whats-the-difference/

1. SQL

Structured Query Language : SQL (구조화 된 쿼리 언어)


관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어

SQL을 사용하면 RDBMS(관계형 데이터베이스)에서 데이터를 저장, 수정 ,삭제, 검색 할 수 있다.

1-1. SQL의 특징

  • RDBMS는 고정된 행(row), 열(column)으로 구성된 테이블에 데이터를 저장.
  • 데이터는 정해진 데이터 스키마(Schema)를 따라 데이터 베이스 테이블에 저장됨.
    • 스키마란? 데이터베이스의 구조와 제약조건에 관해 전반적인 명세를 기술한 것을 말함
    • 데이터가 테이블에 레코드로 저장되며, 각 테이블에는 명확하게 정의된 구조(structure)가 있다.
    • 스키마를 준수하지 않는 레코드는 추가 불가
  • 데이터는 관계를 통해 여러 테이블에 분산된다.
    • 여러개의 테이블에 나누어서, 데이터들의 중복을 피할 수 있다.
  • 수직적(Vertical) 확장만 지원
    • 수직정 확장이란 데이터베이스 서버의 성능을 향상시키는 것.
    • 확장성을 위해 서버의 용량을 확장 해야하며, 데이터 무결성을 위해 단일 서버에서 실행되도록 설계되어 확장하기 어려움.
  • 쿼리 언어
    • 데이터 쿼리를 위해 개발자가 하나의 언어로만 작업 할 수 있다(국제표준)

1-2. 종류

🗂 대표적인 관계형 데이터 베이스 종류



2. NoSQL

Not only SQL


관계형 DB를 제외한 나머지 여러 유형의 데이터베이스
(한국어(sql) vs 외국어(nosql)과 같은 개념)

2-1. No SQL의 특징

  • NoSQl은 유연한 스키마를 가지며 관계를 가지지 않음
    • 다른 구조의 데이터를 같은 컬렉션(sql의 테이블)에 저장 가능
  • sql의 레코드는 문서(Documents)라고 하며 Json과 비슷한 형태
  • 관련 데이터는 여러 테이블에 나눠서 분산하지 않고 동일한 컬렉션에 넣음.
    • JOIN이라는 개념이 없다. (데이터 중복 가능)
    • 중복 데이터가 비대칭적으로 업데이트될 위험이 있으나 복잡한 JOIN을 사용하지 않아도 된다는 장점 (자주 변경되지 않는 데이터일수록)
    • 대부분 오픈소스
  • 수직, 수평적(Horizontal) 확장 지원
    • 수평적 확장은 NoSQL에서만 가능.
    • 더 많은 서버가 추가되고 데이터베이스가 전체적으로 분산됨을 의미.
  • 쿼리 언어
    • 스키마가 데이터베이스마다 달라서 쿼리 구문도 제각각으로 다르다
    • 보편적 기준이 없기 때문에 개발자에게 어렵다.

2-2. 종류

  • Document Databases
    • 데이터를 문서처럼 저장하는 데이터베이스.
    • 대부분 JSON과 같은 형식의 데이터를 문서화.
    • 각각의 문서는 하나의 속성에 대한 데이터를 가지며, 컬렉션이라고 하는 그룹으로 묶어서 관리.
    • Mongo DB, CouchDB
  • Graph Database
    • 그래프와 비슷한 형식으로 데이터 간의 관계를 구성하는 데이터베이스.
    • 노드(nodes)에 속성별(entities)로 데이터를 저장, 노드간 관계는 선(edge)로 표현.
    • Neo4J, InfiniteGraph
  • Key-Value Databases
    • 속성을 Key-Value의 한 쌍으로 나타내는 데이터를 배열의 형태로 저장
    • Key = 속성 / Value = 속성에 연결된 데이터 값
      -Dynamo DB , Redis
  • Wide-Column Stores
    • DB 열(column)에 대한 데이터를 집중적으로 관리하는 데이터베이스.
    • key-value 형식으로 데이터 저장, 컬럼 패밀리(column families)라고 하는 열의 집합체 단위로 데이터를 처리.
    • 하나의 행에 많은 열을 포함
    • 유연성이 높으며 규모가 큰 데이터 분석에 주로 사용.
    • cassandra DB, HBase

3. SQL 🆚 NoSQL


SQL

  • 📌 장점

    • 명확한 스키마, 데이터 무결성 보장
    • 데이터의 중복 없음
  • 📌 단점

    • 스키마가 유연하지 않고 사전에 계획 되야함 (수정하기 번거롭거나 불가능)
    • 데이터가 여러 테이블에 분산되어 관계를 맺고 있기 때문에, JOIN문이 많은 매우 복잡한 쿼리가 발생 가능
    • 수평적 확장이 어렵다 -> 성장의 한계
  • 📌 SQL을 사용하면 좋은 경우

    • 관계된 데이터가 자주 변경되는 경우 (하나의 테이블만 변경)
    • 복잡한 쿼리나 리포트를 만들어내야 하는 경우
    • 변경 되지않는 스키마, 명확한 스키마가 사용자와 데이터에게 중요한 경우(무결성)
      • 은행 시스템에서 많이 사용
    • 높은 부하가 예상될 경우 (안정성)
    • 데이터가 크게 쌓이게 될 여지가 별로 없는 경우(정말 데이터가 많으면 압도적으로 NoSQL이 빠름)

NoSQL

  • 📌 장점

    • 유연한 스키마, 데이터 수정, 추가가 쉬움
    • 데이터는 애플리케이션이 필요로하는 형식으로 저장 -> 데이터 읽기속도 빠름
    • 수평적 확장성
  • 📌 단점

    • 유연한 스키마 때문에 데이터의 일관성이 약함.
    • 데이터 중복 때문에 데이터 변경시 여러 컬렉션과 문서를 전부 업데이트 해야함.
  • 📌 NoSQL을 사용하면 좋은 경우

    • 지속적으로 새로운 기능들이 추가되고 변경되어 정확한 데이터 구조를 사전에 정의하기 힘든경우
    • 읽기 처리는 자주 하지만 업데이트는 자주 하지않는 경우 (모든 중복을 모두 업데이트 해야함)
    • 데이터 정합성이나 일관성이 최고 우선순위가 아닌경우
    • 막대한 양의 데이터를 다루는 경우 (수평 확장 위함)
      • 페이스북이나 트위터와 같은 SNS나 검색엔진은 대부분 NoSQL을 사용한다.
      • 매초 막대한 데이터가 생성되는데 부하가 분산되기 때문에 속도가 빠름


참고 자료 (Reference)


https://docs.microsoft.com/ko-kr/dotnet/architecture/cloud-native/relational-vs-nosql-data
http://www.complexsql.com/difference-between-sql-and-nosql/
https://siyoon210.tistory.com/130
https://ichi.pro/ko/sqlgwa-nosql-juyo-chaijeom-56532176321612
https://dingrr.com/blog/post/%EA%B0%9C%EB%B0%9C-sql-vs-nosql-%EC%96%B8%EC%A0%9C-%EB%AC%B4%EC%97%87%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%A0%EA%B9%8C
https://hanamon.kr/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-sql-vs-nosql/

profile
Back-end 개발자

0개의 댓글