우노
[DB] SQL과 NoSQL의 차이 본문
SQL(Structured Query Language)이란?
- SQL은 관계형 데이터베이스 유형을 지칭하는 용어입니다.
- SQL의 특징은 아래와 같습니다.
- 데이터는 테이블로 구성되며, 각 테이블은 행과 열로 이루어져 있습니다.
- 정해진 스키마를 사용하여 데이터베이스 테이블을 정의합니다.
- 데이터의 무결성과 일관성을 유지합니다.
- 복잡한 쿼리와 다양한 조인 연산에 중점을 둡니다.
- 행 기반으로 데이터를 저장합니다.
- 주요 SQL 데이터베이스는 아래와 같습니다.
- MySQL, PostgreSQL, Oracle, Microsoft SQL Server
행 기반 데이터베이스
데이터를 행 단위로 저장하는 데이터베이스 유형입니다.
행 기반 데이터베이스 저장 구조 예시
- 실제 테이블 데이터 파일은, 디스크 내부 페이지에 테이블의 row를 나란히 이어서 저장하고 있습니다.
행 기반 데이터베이스에서 Insert, Update, Delete를 진행할 경우, row(record) 단위로 묶어서 처리할 수 있으므로 효율적입니다.
하지만, 특정 컬럼에 대한 집계는 모든 row(record) 묶음을 조회해야하므로 비효율적입니다. (필요없는 열까지 읽어야 함)
- ex) 모든 사람의 평균 연령
NoSQL(Not only SQL)이란?
- NoSQL은 비관계형 데이터베이스 유형을 지칭하는 용어입니다.
- NoSQL의 특징은 아래와 같습니다.
- NoSQL은 정해진 스키마를 갖지 않거나 유연한 스키마를 가집니다.
- 대용량, 빠른 속도, 유연성, 높은 가용성에 중점을 둡니다.
- 다양한 유형으로 데이터를 저장합니다.
- 키-값(Key-Value), 문서(Document), 열(Column), 그래프(Graph) 등.
- 주요 NoSQL 데이터베이스는 아래와 같습니다.
- Redis(Key-Value), MongoDB(Document), Apache Cassandra(Column), Neo4j(Graph) 등
NoSQL 데이터 저장 유형
- Key-Value Database
- Document Database
- Column-Oriented/Family Database
- Graph Database
Key-Value Database
- Key-Value Database는 데이터를 고유한 Key와 해당 Key에 대응하는 Value의 쌍으로 저장하는 데이터베이스 유형입니다.
- 각 데이터 항목은 Key로 식별되며, Key를 사용하여 데이터를 조회, 삽입, 수정, 삭제할 수 있습니다.
- 대표적인 Key-Value DB로는 Redis, Amazon DynamoDB 등이 있습니다.
Document Database
- Document Database는 데이터를 문서 형식으로 저장하는 데이터베이스 유형입니다.
- Key-Value 저장소의 한 유형이며, 문서 자체가 값(Value)이고 각 문서에는 고유한 식별자(Key)가 있습니다.
- Document 데이터베이스의 데이터는 Key-Value 데이터베이스 데이터와 달리 일정 수준의 구조를 제공하는 메타 데이터를 포함하고 있습니다.
- 대표적인 Document DB로는 MongoDB, Couchbase, CouchDB 등이 있습니다.
Column-Oriented/Family Database
Column-Oriented Database는 데이터를 테이블 형식으로 저장하며, 데이터를 행 기반이 아닌 열 기반으로 저장하는 데이터베이스 유형입니다.
Column-Family Database는 Column-Oriented Database의 하위 개념으로, 데이터를 열 기반으로 저장하며 관련된 열들을 하나의 컬럼 패밀리로 묶어서 저장합니다.
대표적인 Column-Oriented Database로는 Google BigQuery, Apache Cassandra, ScyllaDB 등이 있습니다.
대표적인 Column-Family Database로는 Apache HBase가 있습니다.
열 기반 데이터 베이스 저장 구조 예시
- 실제 테이블 데이터 파일은, 디스크 내부 페이지에 테이블의 column을 나란히 이어서 저장하고 있습니다.
열 기반 데이터베이스에서 Insert, Update, Delete를 진행할 경우, 데이터의 적절한 위치를 찾기 위해 모든 row(record) 묶음을 조회해야하므로 비효율적입니다.
하지만, 특정 컬럼에 대한 집계는 column 단위로 묶어서 접근할 수 있으므로 효율적입니다. (필요 없는 열을 안 읽어도 됨)
- ex) 모든 사람의 평균 연령
Graph Database
Graph Database는 그래프 형태로 데이터를 저장하고 관리하는 데이터베이스 유형입니다.
Graph Database는 노드(Node)와 노드 사이의 관계(Edge)로 데이터를 표현합니다.
이러한 구조는 연결된 데이터를 효율적으로 표현하고 조회하는데 매우 유용하며, 소셜 네트워크, 추천 시스템, 지도 서비스 등에서 유용하게 사용됩니다.
대표적인 Graph Database로는 Neo4j, Amazon Neptune, ArangoDB 등이 있습니다.
아래는 Graph Database의 실제 예제입니다:
# 사용자 정보 (노드) User: { ID: 1, Name: "John" } (노드) User: { ID: 2, Name: "Alice" } (노드) User: { ID: 3, Name: "Bob" } (노드) User: { ID: 4, Name: "Mary" } # 사용자 간의 관계 (관계) Friend: (User:1) -[:FRIEND]-> (User:2) (관계) Friend: (User:1) -[:FRIEND]-> (User:3) (관계) Friend: (User:2) -[:FRIEND]-> (User:4)
- 노드(Node)는 사용자(User)를 나타내며, 각 사용자는 고유한 식별자(ID)와 사용자 이름(Name)을 갖습니다.
- 각 사용자(Node) 간의 관계(Edge)는 친구(Friend) 관계로 구성되며, 친구 관계는 서로 연결된 사용자를 나타냅니다.
요약
참고
- https://thisiswoo.github.io/development/sql-vs-nosql.html
- https://hanamon.kr/데이터베이스-sql-vs-nosql/
- https://dongs-record.tistory.com/26
- https://shoark7.github.io/programming/knowledge/what-is-NoSQL
- https://dbrang.tistory.com/1634
- https://thehonestcoder.com/choosing-the-right-database/
- https://dataengineering.wiki/Concepts/Document+Database
- https://smoh.tistory.com/373
'Database > Concept' 카테고리의 다른 글
[DB] Database Performance Metric (0) | 2023.07.17 |
---|---|
[DB] 행 기반 데이터베이스, 열 기반 데이터베이스란? (1) | 2023.07.13 |