-
SQL / NoSQL💻 computer science/📦 database 2022. 10. 5. 18:11
관계형 데이터베이스
고정된 행과 열로 구성된 테이블 에 데이터가 저장된다.
테이블의 구조와 데이터 타입등을 사전에 정의하고 정의된 내용에 알맞는 데이터만 삽입할 수 있다.
엄격한 스키마
- 데이터는 테이블에 레코드로 저장되며, 각 테이블에는 명확하게 정의된 구조가 있다.
관계
- 데이터들을 여러개의 테이블으로 나누어, 데이터들의 중복을 피할 수 있다.
테이블 간의 관계를 직관적으로 파악할 수 있다.
SQL
- 구조화된 쿼리 언어
- 특정 유형의 데이터베이스와 상호 작용하는데 사용하는 쿼리 언어
비 관계형 데이터베이스
데이터가 고정되어 있지 않은 데이터 베이스
- 데이터의 모델에 따라 유형이 다양하다.
스키마가 없는 것이 아니다!
특징
- 데이터 간의 관계를 정의하지 않는다.
- 대용량의 데이터를 저장할 수 있다.
- 분산형 구조이다.
- 여러 곳의 서버에 데이터를 분산 저장해 특정 서버에 장애가 생겨도 데이터 유실 혹은 서비스 중지가 발생하지 않도록 한다.
- 고정되지 않은 테이블 스키마를 갖는다
- 스키마가 유동적
데이터 유형
- key-value
- key-value 쌍으로 나타내는 데이터를 배열의 형태로 저장한다.
- 단순한 구조 → 속도가 빠르고 분산 저장시 용이
- Redis, DynamoDB
- document
- 데이터를 테이블이 아닌 문서처럼 저장한다.
- 스키마가 유동적, 레코드 마다 각각 다른 스키마를 가질 수 있다.
- JSON 과 유사한 형식의 데이터를 문서화 하여 저장
- 트리형 구조로 레코드를 저장하거나 검색하는데 효과적이다.
- MongoDB
- wide-column
- 행 마다 키와 해당 값을 저장할 때마다 각각 다른 값의 다른 수의 스키마를 가질 수 있다.
- key에 해당하는 값에 스키마들이 각각 다르다.
- 압축, 분산처리, 집계 쿼리(SUM, COUNT, AVG 등) 및 쿼리 동작 속도, 확장성이 뛰어남
- Hbase, Cassandra
- graph
- 데이터를 노드로 표현하며 노드 사이의 관계를 엣지로 표현
- 일반적으로 RDBMS보다 성능이 좋고 유연하며 유지보수에 용이하다.
- Social networks, network diagrams 등에 사용할 수 있다.
- Neo4j, BlazeGraph
장 / 단점
장점 단점 RDBMS에 비해 저렴한 비용으로 분산처리와 병렬 처리 가능 데이터 업데이트 중 장애 발생시 데이터 손실 발생 가능 비정형 데이터 구조 설계로 설계 비용 감소 많은 인덱스를 사용하려면 충분한 메모리가 필요하다.
- 인덱스 구조가 메모리에 저장됨.Big Data 처리에 효과적 데이터 일관성이 항상 보장되지 않는다. 가변적인 구조로 데이터 저장이 가능 데이터 모델의 유연한 변화가 가능 확장 (Scaling)
두 종류의 데이터베이스를 비교할 때 확장(Scaling)이라는 개념이 매우 중요하다.
(데이터베이스 서버의 확장성)
수직적 (vertical) 확장
단순히 데이터베이스 서버의 성능을 향상
- CPU 업그레이드
수평적 (horizontal) 확장
더 많은 서버가 추가되고 데이터베이스가 전체적으로 분산
- 하나의 데이터베이스에서 작동하지만 여러 호스트에서 작동
SQL 데이터베이스는 데이터가 저장되는 방식 때문에 일반적으로 수직적 확장만 지원한다.
NoSQL 데이터베이스에서만 수평적 확장이 가능하다.
SQL / NoSQL
SQL
장점
- 명확하게 정의된 스키마, 데이터 무결성 보장
- 관계는 각 데이터를 중복없이 한번만 저장
단점
- 데이터 스키마를 사전에 정의하고 알려줘야 한다.
- 조인문이 많은 복잡한 쿼리가 만들어질 수 있다.
- 수직적 확장만 가능
언제 사용 ❓
관계를 맺고 있는 데이터가 자주 변경되는 애플리케이션
변경될 여지가 없고, 명확한 스키마가 사용자와 데이터에게 중요한 경우 사용
NoSQL
장점
- 스키마가 없어 유연하다
- → 언제든지 저장된 데이터를 조정하고 새로운 필드 추가 가능
- 애플리케이션이 필요로 하는 형태로 데이터가 저장된다.
- → 데이터를 읽어오는 속도가 빨라진다.
- 수직, 수평 확장이 가능하다.
- → 애플리케이션이 발생시키는 모든 읽기/쓰기 요청 처리 가능하다.
단점
- 데이터 구조 결정을 미룬다.
- 데이터 중복을 계속 업데이트 해야 한다.
- 데이터가 여러 컬렉션에 중복되어 있기 때문에 수정 시 모든 컬렉션에서 수행해야 한다.
언제 사용 ❓
정확한 데이터 구조를 알 수 없거나, 변경/확장이 될 수 있는 경우
읽기를 자주 하지만, 데이터 변경은 자주 없는 경우
데이터베이스를 수평으로 확장해야 하는 이유
참고 자료
http://www.yes24.com/Product/Goods/108887922
면접을 위한 CS 전공지식 노트 - YES24
디자인 패턴, 네트워크, 운영체제, 데이터베이스, 자료 구조, 개발자 면접과 포트폴리오까지!CS 전공지식 습득과 면접 대비, 이 책 한 권이면 충분하다!개발자 면접에서 큰 비중을 차지하는 CS(Comp
www.yes24.com
https://gyoogle.dev/blog/computer-science/data-base/SQL%20&%20NOSQL.html
SQL과 NOSQL의 차이 | 👨🏻💻 Tech Interview
SQL과 NOSQL의 차이 웹 앱을 개발할 때, 데이터베이스를 선택할 때 고민하게 된다. 보통 Spring에서 개발할 때는 MySQL을, Node.js에서는 MongoDB를 주로 사용했을 것이다. 하지만 그냥 단순히 프레임워크
gyoogle.dev
'💻 computer science > 📦 database' 카테고리의 다른 글
📂 MySQL - 트랜잭션 격리 수준 (0) 2024.05.11 인덱스 (0) 2022.10.05 트랜잭션 (1) 2022.10.05 정규화 (0) 2022.10.05 데이터베이스 기본 (1) 2022.10.05