특징: 데이터를 테이블(행과 열) 구조로 관리하며 스키마가 엄격함. SQL 언어 사용.
예시: Oracle, MySQL, PostgreSQL, Microsoft SQL Server.
용도: 은행 시스템, 주문 처리 등 데이터 무결성이 중요한 경우.
데이터를 트리(Tree) 구조로 조직하여 부모-자식 관계를 계층적으로 표현하는 데이터베이스 관리 시스템(DBMS)
장점 - 구조가 단순하여 이해하기 쉽고, 정의된 경로를 따라가는 데이터 조회 속도가 매우 빠릅니다. 데이터 무결성(참조 무결성) 유지가 용이
단점 - 데이터 구조가 경직되어 있어 유연성이 떨어지며, 다대다(N:M) 관계 표현이 어렵습니다. 상위 데이터를 삭제하면 하위 데이터도 함께 삭제되는 등 수정 및 관리가 복잡할 수 있음
데이터를 노드(Node)와 엣지(Edge)로 구성된 그래프 구조로 저장하고 관리하는 NoSQL 데이터베이스의 한 종류
주요 활용 사례 - 데이터 간의 연결 고리를 분석해야 하는 분야에서 강력한 성능을 발휘
대표적인 플랫폼
관계형 데이터베이스 모델을 벗어난 몽고DB, 카산드라(Cassandra), Neo4J 등
| 스타일 | 데이터 구조 (시각화) | 특징 및 용도 | 대표 사례 | 장점 | 단점 |
|---|---|---|---|---|---|
| Key-Value | Key : Value | 가장 단순한 형태. 속도가 매우 빨라 캐시, 세션 관리에 최적화 | Redis, Amazon DynamoDB | - 매우 빠른 읽기/쓰기 - 수평 확장 쉬움 - 구조 단순 - 캐시/세션에 최적 | - 복잡한 조회 불가 - 관계 표현 어려움 - 값 내부 검색 제한적 |
| Document | { "id": 1, "name": "..." } | JSON/XML 문서 형태 저장. 구조 유연, 콘텐츠 관리에 유리 | MongoDB, CouchDB | - 스키마 유연성 - 중첩 데이터 표현 가능 - JOIN 없이 빠른 조회 - 개발 속도 빠름 | - 데이터 중복 증가 가능 - 복잡한 트랜잭션 약함 - 관계형 분석에 불리 |
| Wide-Column | Row [Column1, Column2] | 열 단위 저장. 대용량 분산 처리에 강력 | Apache Cassandra, Apache HBase | - 초대용량 데이터 처리 강함 - 높은 쓰기 성능 - 분산 확장성 뛰어남 - 장애 허용성 높음 | - 설계가 어려움 (쿼리 기반 모델링) - JOIN 없음 - 즉석 질의에 약함 |
| Graph | Node ↔ Edge | 데이터 간 연결 관계 저장. SNS, 추천 시스템 특화 | Neo4j, JanusGraph | - 관계 탐색 매우 빠름 - 다단계 연결 분석에 최적 - 추천 시스템에 강력 | - 대규모 단순 조회에는 비효율적 - 수평 확장 상대적으로 어려움 - 일반 CRUD에는 과할 수 있음 |
관계형 DB(예: MySQL, PostgreSQL)는 고정된 스키마 (table, column, type) 가 있지만, NoSQL(예: MongoDB, Cassandra)는 스키마가 없거나 매우 유연함
예를 들어 MongoDB에서는:
{ "name": "Soo", "age": 30 }
{ "name": "Gwon", "email": "a@b.com" }
같은 컬렉션인데 필드가 다를 수 있음.
NoSQL은 설계 철학이 다 다르기 때문에 다른 종류의 DB로 옮길 경우, 데이터 구조를 다시 설계해야 함.
NoSQL은 대부분:
예를 들어,
마이그레션 시 문제:
RDB는:
NoSQL은:
그러므로 마이그레이션할 때,
하지만...
NoSQL이 항상 빠른 건 아님
이 경우는 RDB가 더 적합함.