-
SQL vs NoSQLCS 지식/데이터베이스(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
- 범용적인 목적에 사용
- Document는 field-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
- https://aws.amazon.com/ko/nosql/
- https://www.mongodb.com/ko-kr/nosql-explained
- https://www.mongodb.com/ko-kr/nosql-explained/nosql-vs-sql
- https://www.mongodb.com/ko-kr/document-databases
- https://aws.amazon.com/ko/what-is/database-sharding/
- https://aws.amazon.com/ko/nosql/key-value/
- https://dataonair.or.kr/db-tech-reference/d-guide/data-practical/?mod=document&uid=376
'CS 지식 > 데이터베이스(Database)' 카테고리의 다른 글
statement vs prepared statement vs callable statement interface (0) 2023.05.04 Transaction Isolation Level(트랜잭션 격리 수준) (0) 2023.04.25 Transaction (0) 2023.04.25 SQL - injection (2) 2023.04.19 Relational Model과 Key의 종류 (0) 2023.04.17