본문 바로가기

TIL/SQL

SQL DB & NoSQL DB

SQL DB

관계형 데이터베이스 모델을 사용하여 데이터 간의 관계를 정의하고 관리하는 데이터베이스

데이터 간의 관계를 행(row)과 열(column)로 구성된 테이블로 저장한다.

 

 

SQL DB 특징

 

테이블 기반 구조
ㆍSQL 데이터베이스는 하나 이상의 테이블로 구성됨.
ㆍ 각 테이블은 행(row)과 열(column)으로 구성됨
   - 행은 테이블에 저장된 개별 데이터 레코드를 나타내고, 열은 각 레코드에 대한 속성을 나타냄

스키마(Schema)
ㆍ각 테이블은 DB의 스키마에 따라 정의된다.
ㆍ스키마는 테이블의 구조, 각 열의 데이터 유형, 제약 조건 등을 정의한다.

SQL 쿼리
ㆍSQL DB는 SQL을 사용하여 데이터를 조작한다. 
ㆍSQL은 데이터를 검색(SELECT), 삽입(INSERT), 수정(UPDATE), 삭제(DELETE) 하는 등 다양한 DB 작업을 수행하는데 사용된다,

ACID 트랜잭션
ㆍ대부분의 SQL DB는 ACID 원칙을 따르는 트랜잭션을 지원함.
ㆍ이를 통해 데이터의 무결성과 일관성을 보장하고 DB에서 안전하게 작업을 수행할 수 있다.

INDEX

ㆍSQL DB는 인덱스를 사용하여 데이터를 빠르게 검색할 수 있다.
ㆍ인덱스는 특정 열이나 열의 조합에 대한 검색 속도를 향상시킨다.

 

 

SQL 기반의 관계형 DB를 사용하기 좋은 경우
DB의 ACID 성질을 준수해야 하는 경우
SQL을 사용하면 DB와 상호작용하는 방식을 정확하게 규정할 수 있기 때문에 DB에서 데이터를 처리할 때 발생할 수 있는 예외적인 상황을 줄이고, DB의 무결성을 보호할 수 있다.

소프트웨어에 사용되는 데이터가 구조적이고 일관적인 경우
소프트웨어(프로젝트)의 규모가 많은 서버를 필요하지 않고 일관된 데이터를 사용하는 경우, 관계형 DB를 사용하기 좋다.

관계를 맺고 있는 데이터가 자주 변경되는 경우
NoSQL에서는 여러 컬랙션을 모두 수정해야 하기 때문에 비효율적이다.

 

 

 

 

NoSQL DB

관계형 데이터베이스와 달리 다양한 형태의 데이터를 관리하는 비관계형 데이터베이스

 

 

NoSQL DB 특징
스키마 유연성
NoSQL DB는 스키마가 없어서 데이터 모델링을 더 유연하게 할 수 있다.
ㆍ즉, 데이터베이스에 저장되는 각 항목의 구조가 일정하지 않아도 됨

분산 데이터베이스

ㆍNoSQL DB는 데이터를 여러 노드에 분산하여 저장하고 관리함으로써 확장성을 확보한다.
ㆍ이러한 분산 아키텍처는 대량의 데이터의 처리량을 높일 수 있다.

고가용성과 탄력성
ㆍNoSQL DB는 데이터 복제 및 분산을 통해 고가용성과 장애 복구 기능을 제공함

다양한 데이터 모델

ㆍKey_Value DB, Document DB,  Wide_Column Store, Graph DB 등 다양한 모델을 선택할 수 있다.

높은 성능
ㆍNoSQL DB는 다양한 형태의 데이터 모델링과 분산 아키텍처를 통해 빠른 데이터 처리와 응답속도를 제공함.

 

 

NoSQL DB 유형
Key-Value DB
ㆍ 속성을 Key-Value 쌍으로 나타내는 데이터를 배열 형태로 저장한다.
ㆍKey는 속성 이름, Value는 속성에 연결된 데이터 값을 의미한다.

Document DB

ㆍ데이터를 문서처럼 저장하는 DB
ㆍ많은 문서형 DB에서 JSON과 유사한 형식의 데이터를 문서화하여 저장한다.
ㆍ각각의 문서는 하나의 속성에 대한 데이터를 가지고 있고, 컬렉션이라는 그룹으로 묶어 관리한다.

Wide-Column Store

ㆍDB의 열(column)에 대한 데이터를 집중적으로 관리하는 DB
ㆍ각 열에는 Key-Value 형식으로 데이터가 저장되고, 컬럼 패밀리(column Families)라고 하는 열의 집합체 단위로 데이터를 처리할 수 있다.
ㆍ하나의 행에 많은 열을 포함할 수 있어 유연성이 높다.
ㆍ데이터 처리에 필요한 열을 유연하게 선택할 수 있다는 점에서 규모가 큰 데이터 분석에 주로 사용되는 DB이다.

Graph DB
ㆍ자료구조의 그래프와 비슷한 형식으로 데이터 간의 관계를 구성하는 DB
ㆍ노드에 속성(entities)별로 데이터를 저장한다.
ㆍ각 노드간 관계는 선(edge)으로 표현한다.

 

 

NoSQL 기반의 바관계형 DB를 사용하기 좋은 경우
정형화 되지 않은 대용량의 데이터를 저장하는 경우
대부분의 NoSQL은 DB에 저장할 수 있는 데이터의 유형에 제한이 없다.
즉, 필요에 따라 언제든지 데이터의 새 유형을 추가할 수 있다.
소프트웨어 개발에 정형화 되지 않은 많은 양의 데이터가 필요한 경우, NoSQL을 적용하는 것이 더 효율적이다.

클라우드 컴퓨팅 및 저장공간을 최대한 활용하는 경우
클라우드 기반으로 DB 저장소를 구축하면, 저렴한 비용의 솔루션을 제공받을 수 있다.
소프트웨어 DB의 확장성이 중요하다면, 확장성이 좋은 NoSQL DB를 사용하는 것이 좋다.

빠르게 서비스를 구축하는 과정에서 데이터 구조를 자주 업데이트 하는 경우
스키마를 미리 준비할 필요가 없기 때문에 빠르게 개발하는 과정에서 유리하다.
소프트웨어 버전별로 많은 다운타임(DB 서버를 오프라인으로 전환하여 데이터 처리를 진행하는 작업 시간) 없이 데이터 구조를 자주 업데이트 해야 하는 경우, 스키마를 매번 수정해야 하는 SQL DB보다 NoSQL DB가 적합하다.

읽기를 자주 하지만, 데이터 변경은 자주 없는 경우
성능과 비용적인 측면에서 이득을 얻을 수 있다.

 

'TIL > SQL' 카테고리의 다른 글

[Python] SQLite3 모듈 사용하기  (0) 2024.04.01
SQL 기본 문법(SELECT, WHERE, GROUP BY, ORDER BY, IF, CASE)  (0) 2024.03.25
SQL DATE_FORMAT  (0) 2024.03.25