개발 공부

(데이터베이스) sql vs nosql 본문

CS 스터디

(데이터베이스) sql vs nosql

아이셩짱셩 2021. 7. 19. 15:02

 

개요

SQL(Structured Query Language)이란?

  • 데이터베이스를 관리하고
  • 데이터베이스에 저장된 데이터에 접근하고 저장하고 관리하기 위한 언어이다.
  • SQL은 사람이 RDBMS와 소통하기 위해 사용한다.

 

관계형 데이터베이스

  • 같은 데이터베이스 내부에 있는 여러 다른 데이터들간에 관계를 설정하고 이를 관리한다.
  • 이러한 데이터를 관리하기 위해 관계형DB관리시스템을(RDBMS)을 사용한다.

 

NoSQL(non-SQL 또는 Not Only SQL)

  • NoSQL은 SQL 뿐만 아니라 다른 기술이나 프로그래밍 언어를 사용해 정형, 비정형, 반정형 데이터를 저장한다.
  • SQL을 사용하지 않는다는 것은 아니다.
  • NoSQL을 RDBMS가 아니라는 것으로 해석 하는 편이 바람직하다.
  • SQL과 NoSQL을 비교하는 것은 관계형 DB와 비관계형 DB를 비교하는 것으로 볼 수 있다.

 

차이점

  • 관계형 데이터베이스는 데이터간 관계가 주가 되며, 엄격한 스키마를 가지고, 테이블 형식으로 데이터를 저장한다.
  • 비관계형 데이터베이스는 주로 관계를 취급하지 않으며, 유연한 스키마를 가지고, 다양한 형식으로 데이터를 저장한다.

 

 

구분 SQL Databases NoSQL Databases
저장형태 열과 행이 고정된 테이블 Document: JSON 문서, Key-value: 키-값 형식, Wide-column: 열과 행이 동적인 테이블 Graph: 노드와 엣지
배경 1970년대에 데이터 중복을 줄이기 위해 고안되었다. 2000년대에 애자일과 데브옵스가 트렌드가 되면서 빠르게 변화하는 어플리케이션 환경에 맞추기 위해 고안되었다.
제품 Oracle, MySQL, Microsoft SQL Server, and PostgreSQL Document: MongoDB와 CouchDB, Key-value: Redis와 DynamoDB, Wide-column: Cassandra와 HBase, Graph: Neo4j와 Amazon Neptune
용도 일반적인 용도로 사용 Document: 일반적인 용도 Key-value: 간단한 쿼리로 대용량 데이터 조회 Wide-column: sql과 비슷한 쿼리로 대용량 데이터 조회 Graph: 연결된 데이터 간 관계 분석, 처리
스키마 철저하게 관리 유동적
스케일링 수직적 (scale-up, 더 큰 서버로 확장) 수평적 (sacale-out, 여러 서버로 확장)
다중레코드 ACID 트랜잭션 지원 여부 지원 대부분 지원하지 않음. MongoDB와 같이 지원하는 경우 존재
Joins 빈번하게 발생 발생하지 않음
Data to Object Mapping 객체-관계 매핑(ORM) 필요 필요하지 않음. 몽고디비는 대중화된 대부분의 프로그래밍 언어에 매핑된다.

 

 

SQL 사용이 유리한 경우

  • 앱의 여러 부분에서 관련 데이터가 비교적 자주 변경되는 경우 (NoSQL이라면 항상 여러 컬렉션을 수정해야 함)
  • 명확한 스키마가 중요하며, 데이터구조가 극적으로 변경되지 않을 때

NoSQL 사용이 유리한 경우

  • 정확한 데이터 요구사항을 알 수 없는 경우
  • 읽기(read)처리를 자주하지만, 데이터를 자주 변경하지 않는 경우 (즉, 한번의 변경으로 수십 개의 문서를 수정 할 필요가 없는 경우)
  • 데이터베이스를 수평으로 확장해야 하는 경우 ( 즉, 막대한 양의 데이터를 다뤄야 하는 경우, 읽기/쓰기 처리량이 큰 경우)

NoSQL 추가 설명

NoSQL의 장점

  • 유연성
    • 스키마가 유동적이기 때문에 DB를 변경하기 쉽다.
  • 수평적 스케일
    • 저비용 확장 가능
  • 빠른 쿼리 속도
    • SQL DB는 객체나 앤티티를 가져오기 위해 여러 테이블을 조인을 해야한다.
    • 테이블 크기를 키우면 조인 비용이 증가한다.
    • NoSQL DB는 쿼리에 최적화 되어 저장된다.
    • NoSQL은 "같이 접근해야하는 데이터는 같이 저장하자"를 지향한다.
    • 조인이 필요 없어 속도가 보장된다.
  • 개발하기 쉬움
    • SQL을 학습하지 않아도 http api 요청이나 프로그래밍 언어별로 제공되는 쿼리맵핑 함수로 개발할 수 있다.

NoSQL의 단점

  • ACID(원자성, 일관성, 고립성, 지속성) 확보를 위한 트랜잭션을 지원하지 않는다.→ 한 레코드에 여러명이 접근해 수정할 수 있다.
  • 데이터 중복을 크게 신경쓰지 않기 때문에 SQL DB보다 용량을 더 많이 차지한다.
    • 최근에는 데이터 용량이 많이 싸져 크게 신경쓰지 않는 경우도 있다.
    • 몇몇 NoSQL DB는 데이터 압축 기능도 제공한다.
  • DB 타입 (Document, key-value, wide-column, graph) 별로 기능에 제한이 있다.
    • graph는 데이터 관계 분석에 특화되었기 때문에 단순 쿼리 검색을 하는데 제한이 있다.

 

Document Store

  • 데이터를 JSON, XML, BSON 형식으로 저장한다.
  • document는 형식에 구애받지 않지만 더 빠른 속도를 위해 자주 사용하는 필드를 인덱싱 할 수도 있다.

 

Documents DB의 예

활용 예

  • SEGA 는 천만개의 인게임 계정을 몽고디비(MongoDB)로 관리한다.
  • 시스코(Cisco)는 확장성을 확보하기 위해 VSRM(video session and research manager) 이라는 플랫폼을 Couchbase로 이전했다.

 

Key-Value Data Store

  • key-value 쌍은 딕셔너리 형식과 같이 유일하게 저장된다.
  • 이는 빠른 속도를 가능케 한다.
  • 쿼리 언어가 필요 없이 get, put, delete와 같은 명령어로 관리가 가능하다.

 

 

Key-value db 예

  • Redis – Free, open-source

활용 예

  • 유저 프로필, 블로그 댓글, 제품 소개 등의 데이터를 관리하는데 유용하다.
  • 트위터는 타임라인에 Redis를 사용한다.
  • 핀터레스트는 유저, 팔로워, 언팔, 게시판 등의 목록을 관리하는데 레디스를 사용한다.
  • 코인베이스는 비트코인 트랜잭션을 관리하는데 레디스를 사용한다.

 

Wide-column

 

 

Column DB의 예

  • HBase – Free, open-source

활용 예

  • 고성능과 높은 확장성을 가지기 때문에 빅데이터, IoT 그리고 사용자 추천, 개인화 앤진 등에 사용된다.
  • 스포티파이(Spotify)는 사용자 프로필과 가수, 노래 등의 정보를 관리하는데 그리고 개인화 하는데 카산드라(Cassandra)를 사용한다.
  • 페이스북(Facebook)은  메시지앱을 HBase 기반으로 만들었다. 가까운 친구나 검색 인댁싱에도 사용한다.

 

Graph Store

 

 

 

 

Graph DB 예

활용 예

  • 큰 데이터간의 관계를 설정해야할 때 유용하다. 데이터 규모가 커질 수록 관계형 디비와 비교했을 때 차원이 다른 속도를 제공한다.
  • 월마트(Walmart)는 고객 개인화, 유사 제품 추천, 광고 등에 Neo4j를 사용한다.
  • 시스코(Cisco)는 버그를 찾아내기 위해 고객 지원에 Neo4j 를 사용한다.

 

 

참고 :

https://devuna.tistory.com/25

https://venturebeat.com/2021/02/08/what-is-a-graph-database/

https://www.imaginarycloud.com/blog/sql-vs-nosql/

https://www.mongodb.com/ko-kr/nosql-explained/nosql-vs-sql

https://www.youtube.com/watch?v=Q_9cFgzZr8Q

https://studio3t.com/knowledge-base/articles/nosql-database-types/#wide-column-store

 

 

'CS 스터디' 카테고리의 다른 글

(네트워크) TCP 3ways, 4ways handshake  (0) 2021.07.07
(OS) 페이징  (1) 2021.06.28
Comments