ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL vs NoSQL
    CS 지식/데이터베이스(Database) 2023. 4. 21. 22:13

    SQL(관계형)

    - 데이터가 고정된 열과 행을 가지고 있는 테이블에 저장되는 관계형 데이터베이스와 상호 작용할 때 사용

    (1970년대 초반에 스토리지가 비쌌기 때문에 데이터 중복을 줄이기 위해 데이터베이스 정규화 등을 하는 시기에 발전)

    ex) Oracle, DB2, MySQL, PostgreSQL, Microsoft SQL Server

    - ACID transactions

     

    ACID 속성 이란

    - Atomicity(원자성) : 완벽하게 실행하거나 혹은 전혀 실행하지 않거나 둘 중 하나.

    - Consistency(일관성): transaction이 commit 되면 데이터가 데이터베이스 스키마를 준수하도록 요구됨. 

      transaction이 테이블에 변경 사항을 적용할 때 미리 정의된, 예측할 수 있는 방식만 취함. 

    - Isolation(격리): 동시에 일어나는 transaction들이 각기 별도로 실행됨.

      여러 사용자가 같은 테이블에서 모두 동시에 읽고 쓰기 작업을 할 때, 동시 transaction이 서로 방해하거나 영향을 미치지 X. 

    - Durability(영속성): transaction이 성공적으로 완료되고 database에 변화가 생겼다면 이 변화는 예기치 못한 시스템 장애 또는 정전이 발생하더라도 지속된다. 

     

     


    NoSQL(비관계형)

    - 유연성 : 유연한 schema 

    => 빠르고 반복적인 개발 가능

    (2000년대 후반에 agile, scaling이 중요해지면서 발전)

    - 확장성 : 고가의 강력한 서버를 추가하는 대신 분산형 하드웨어 클러스터를 이용해 확장하도록 설계
    (일부 클라우드는 완전관리형 서비스로 이런 운영 작업을 보이지 않게 처리)

    - 고성능 : 특정 데이터 모델 및 액세스 패턴에 대해 최적화되어 있음

    - 고기능성 : 각 데이터 모델에 맞춰 특별히 구축된 뛰어난 기능의 API와 데이터 유형 제공

    - 수평적 확장(더 많은 머신 추가) => 대량의 데이터, 높은 사용자 부하에서도 손쉽게 확장 가능

    - 대량의 비정형 데이터 저장할 수 있음. 

    (모양과 크기가 다른 다양한 데이터가 등장하는 현대에 미리 스키마를 정의하는 것이 거의 불가능해지면서 등장.)

     

    샤딩

    대규모 데이터베이스를 여러 머신에 저장하는 프로세스.

    데이터를 '샤드'라고 하는 더 작은 chunk로 분할하고 여러 데이터베이스 서버에 저장함. 

    데이터 볼륨이 너무 커지고 애플리케이션을 사용하여 동시에 정보를 읽거나 저장하려고 하는 사용자가 너무 많아지면 데이터베이스 병목 현상 발생. => 애플리케이션 속도가 느려질 수 있기 때문에, 

    여러 샤드에서 더 작은 데이터 세트를 병렬로 처리하는 데이터베이스 샤딩으로 이를 해결. 

    장점 : 응답 시간 개선, 전체 서비스 중단 방지, 효율적인 크기 조정 => 데이터 베이스 확장 지원

     

     

    NoSQL 데이터베이스 유형

    1) Key-Value Database

    - 각 항목에 키와 값이 포함되어 있음.

    - 대량의 데이터를 저장해야 하지만 검색을 위해 복잡한 쿼리를 수행할 필요가 없는 경우에 적합

    large amounts of data with simple lookup queries의 경우(simple key-based queries)에 사용

    (보통 키를 참조하는 방식으로만 검색이 가능)

    - 장바구니나 세션 스토어(사용자가 로그인할 때 세션 시작, 사용자가 로그아웃 하거나 세션의 시간이 초과될 때까지 활성화된 상태로 있음. ) 같이 특정 키로 정보를 조회하는 경우에 사용

    ex) Redis, DynanoDB

     

    2) Document(문서) Database

    - 범용적인 목적에 사용

    - Documentfield-value 쌍들로 data를 저장함. 

    (Documents => JSON, XML, BSON 등의 format. JSON 많이 사용하는 편.)

    - 개발자에게 효율적이고 직관적인 데이터 모델임.

    ex) MongoDB(JSON 사용), CouchDB

     

    3) Graph Database

    - 노드와 에지에 데이터 저장

    - 노드에는 주로 사람, 장소, 사물에 대한 정보 저장되고, 에지에는 노드 간의 관계에 대한 정보 주로 저장

    - 소셜 네트워킹, 추천 엔진 등 관계를 상세히 검토해야 하는 사용 사례에 적합

    ex) Neo4j, JanusGraph, Amazon Neptune

     

    4) wide-column 스토어

    - tables with rows and dynamic columns

    - large amounts of data with predictable query patterns

    - 각 행이 동일한 열을 가질 필요가 없다는 면에서 뛰어난 유연성

    - 보통 IoT 데이터와 사용자 프로필 데이터를 저장하는 데 사용됨. 

    ex) Cassandra, HBase

     

     


    SQL Database vs NoSQL Database 장단점 및 특징

     

    SQL Database

    장점

    - 테이블 사이의 관계에서 참조 무결성을 실현

    - ACID 속성 제공

    - SQL을 준수하는 쿼리를 통해 데이터를 저장 및 검색

    - 수직적 확장 (scale-up with larger server)

    - 복잡한 query가 필요한 경우 사용.

     

     

    NoSQL Database

    장점

    - 반정형 데이터에서 분석을 위해 설계

    - 성능과 규모 확장에 최적화된 다양한 데이터 모델 제공

    - SQL database들보다 더 빠른 query. 낮은 응답시간.

    (SQL database의 data들은 정규화되어 있어서 여러 table들을 join 해야 결과를 얻을 수 있는 경우가 많음. table이 커질수록 join은 더 비용이 많이 들게 될 것.

    반면, NoSQL database는 query에 최적화된 형태로 저장됨. table 간의 join 기능이 없고 경험적으로 같이 access 되는 data들은 같이 저장되기 때문에 더 빠름. )

    - '샤딩'을 통해 수평적 확장(scale-out across commodity servers. 더 저렴)에 유용. 유연한 데이터 모델. (유연한 데이터 모델을 위해 일부 ACID 속성은 완화)

    - 객체 기반 API를 통해 데이터 구조를 쉽게 저장 및 검색 가능

    - 개발자들이 사용하기 쉬움

    => 상대적으로 적은 버그로 빠르게 개발 가능. ex) MongoDB JSON 형태

     

    단점

    - ACID transaction 지원 X

    - NoSQL database의 data model은 data 중복을 줄이는데 최적화된 게 아니라 query를 최적화하는데 맞추어져 있기 때문에 NoSQL database는 SQL database보다 커질 수 있음. 

    (현대는 storage는 매우 싸기 때문에 minor 한 결점이고 몇몇 NoSQL database는 storage를 줄이는 compression 기능도 제공함.)

    - data가 여러 collection에 중복되어 있어서 data를 update 하는 경우 모든 collection에서 수행해야 해서 느림.

    data 중복으로 인한 수정 작업이 번거로움.

     

     

     

    SQL vs NoSQL 용어 비교

    - Collection : group of documents

    https://dataonair.or.kr/db-tech-reference/d-lounge/technical-data/?mod=document&uid=236128

     


    정형 vs 비정형 vs 반정형

    정형 데이터 

    - 스키마 구조를 가지고 있음 like 관계형 데이터베이스 시스템 테이블

    - 데이터 탐색 과정이 테이블 탐색 -> 칼럼 구조 탐색 -> 로우 탐색 순.

    - 데이터의 스키마 정보를 관리하는 DBMS와 데이터 내용이 저장되는 데이터 저장소로 구분.

    ex) 스프레드시트

     

     

    반정형 데이터 

    - 데이터 내부에 데이터 구조에 대한 메타정보를 가지고 있음. 

    - 보통 API 형태로 제공됨. 

    ex) HTML, XML, JSON, 웹로그 등

     

     

    비정형 데이터

    - 데이터 세트가 아닌 하나의 데이터가 수집 데이터로 객체화됨.

    ex) text 데이터, 이미지, 동영상 같은 멀티미디어 데이터

     


     

     

     

     

    Further Topics

    • JSON vs BSON 
    • File system과 SQL, NoSQL 차이점
    • Database 샤딩과 파티셔닝
    • CAP 이론
    • 수평적 확장 vs 수직적 확장
    • 데이터베이스에서의 Cluster
    • 무결성의 종류와 참조무결성

     

    Reference

Designed by Tistory.