❐ SQL(Structed Query Language)
SQL(Structured Query Language)은 관계형 데이터베이스(RDBMS)를 관리하기 위한 언어로,
구조화된 데이터를 테이블 형식으로 관리하는 데 사용됩니다. 데이터를 효율적으로 저장, 수정, 삭제,
검색할 수 있도록 설계되었습니다.
- 고정된 스키마: 사전에 데이터 구조(스키마)를 정의해야 합니다.
- 테이블 기반: 데이터를 행과 열로 구성된 테이블에 저장합니다.
- 관계형 데이터 모델: 테이블 간 관계를 설정하여 데이터를 연결하고 관리합니다.
- ACID 특성: 트랜잭션의 안정성을 보장합니다.
대표적인 SQL 데이터베이스에는 MySQL, PostgreSQL, Oracle 등이 있습니다.
❐ NoSQL(Not Only SQL)
1. NoSQL이란?
NoSql은 비관계형 데이터베이스로, 구조화되지 않은 데이터나 반정형 데이터를 유연하게 관리할 수 있도록
설계된 데이터베이스입니다. 주로 대규모 데이터 처리와 높은 확장성을 요구하는 환경에서 사용됩니다.
아래와 같은 특징을 가지고 있습니다.
- 유연한 스키마 : 사전에 스키마를 정의하지 않아도 데이터를 저장할 수 있다.
- 다양한 데이터 모델 지원
- key-value store (Redis, DynamoDB)
- document store (MongoDB, CouchDB)
- column store (Cassandra, HBase)
- graph store (Neo4j, Amazon Neptune)
- 높은 확장성 : 수평 확장이 용이 (클러스트링과 샤딩 지원)
- CAP이론 중 하나를 중점적으로 선택할 수 있다.
- Consistency(일관성)
- Availability(가용성)
- Partition Tolerance(파티션 허용)
2. NoSQL 장점 및 단점
- 장점
- 데이터 구조가 고정되지 않아 데이터 스키마 변경이 쉽습니다.
- 서로 다른 구조의 데이터를 저장할 수 있어, 빠르게 변하는 비즈니스 요구에 대응할 수 있습니다.
- 수평확장(Sharding)을 지원하여 데이터베이스 서버를 추가할 수 있습니다.
- 다양한 데이터 모델을 지원하며, 빠른 데이터 처리가 가능합니다.
- 단점
- 데이터의 일관성이 부족하여 RDB의 ACID 특성을 완벽히 보장 받지 못합니다.
- SQL 처럼 복잡한 Join, 트랜잭션 기반의 쿼리 기능이 부족합니다.
❐ SQL, NoSQL 차이점 정리
☑️ 이것도 알아 두자! ACID & BASE
BASE 특성은 NoSQL 데이터베이스가 데이터의 일관성을 완화하고, 높은 가용성과 성능을
중점적으로 설계된 특성을 의미합니다. 이는 관계형 데이터베이스가 따르는 ACID 특성과 대조됩니다.
1. Basic Available (기본적인 가용성)
- 시스템은 항상 가용해야 하며, 데이터의 일부를 사용할 수 없더라도 시스템 전체는 동작을 유지한다.
- 장애가 발생하거나 일부 데이터에 접근이 제한되더라도 다른 노드는 요청을 처리할 수 있음.
2. Soft State (가변적 상태)
- 시스템 상태는 반드시 즉각적으로 일관성을 유지할 필요는 없으며, 시간이 지나면서 변경될 수 있습니다.
- 데이터 복제가 비동기로 처리되므로 시스템의 상태가 중간 단계에 머물러 있을 수 있음을 의미
3. Eventually Consistent (최종적 일관성)
- 데이터는 특정 시점에서는 일관되지 않을 수 있지만, 시간이 지나면 모든 노드에 동일한 데이터가 저장
- NoSQL은 일관성보다 가용성을 우선하며, 이를 통해 높은 성능을 유지합니다.
❐ SQL과 NoSQL 둘 중 어는 것을 선택할까?
1. SQL을 선택해야 할 때
데이터의 구조가 명확하고, 복잡한 조인을 사용해야 할 경우에는 SQL을 선택해야 합니다.
또한 무결성과 ACID를 보장 받아야되는 데이터라면 SQL을 쓰는 것이 좋습니다.
2. NoSQL을 선택해야 할 때
고정된 스키마가 필요 없거나 데이터 구조가 자주 변경되는 경우에 적합합니다.
또한 데이터가 방대하게 증가하고, 샤딩을 통해 성능을 높여야 하는 경우에 고려될 수 있는
스펙이라고 생각합니다. 데이터 간 관계가 적거나, 별도로 관리하지 않아도 되는 경우라면
NoSQL을 사용을 고려하는 것이 좋다고 생각합니다.
'CS > Database' 카테고리의 다른 글
Partitioning (0) | 2024.11.22 |
---|---|
Sharding (0) | 2024.11.22 |
MVCC (Multi Version Concurrency Control) (0) | 2024.10.02 |
Lock을 활용한 concurrency control (0) | 2024.10.02 |
Isolation 레벨과 이상 현상들 (0) | 2024.09.26 |