멀티모델 데이터베이스는 하나의 데이터베이스 엔진에서 여러 데이터 모델(관계형, 문서, 그래프, 키-값 등)을 지원하는 시스템이다. 각 사용 사례에 맞는 모델을 선택하면서 운영 복잡도를 낮출 수 있다.
대표 멀티모델 데이터베이스
| DB | 지원 모델 | 기반 | 특징 |
|---|
| ArangoDB | 문서, 그래프, 키-값 | 자체 엔진 | AQL 통합 쿼리 |
| OrientDB | 문서, 그래프, 객체, 키-값 | 자체 | SQL 유사 문법 |
| CosmosDB | 문서, 그래프, 테이블, Cassandra | Azure | 다중 API |
| PostgreSQL | 관계형 + JSON, 그래프(AGE), 시계열(Timescale) | 확장 기반 | 가장 광범위 |
| SurrealDB | 관계형, 문서, 그래프, 시계열 | Rust | 서버리스, 실시간 |
ArangoDB 예시
javascript
// AQL (ArangoDB Query Language) - 통합 쿼리
// 문서 + 그래프를 하나의 쿼리로
// 컬렉션: users (문서), follows (엣지)
// 사용자의 팔로워와 그 팔로워의 게시물 조회
FOR user IN users
FILTER user._key == "alice"
FOR follower IN 1..2 INBOUND user follows // 그래프 탐색 (깊이 1~2)
FOR post IN posts
FILTER post.author == follower._key
AND post.created > DATE_SUBTRACT(DATE_NOW(), 7, "day")
SORT post.created DESC
LIMIT 20
RETURN {
author: follower.name,
post: post.title,
created: post.created
}
SurrealDB 예시
sql
-- SurrealQL: SQL + 그래프 + 문서 통합
-- 테이블 생성 (유연한 스키마)
DEFINE TABLE user SCHEMAFULL;
DEFINE FIELD name ON user TYPE string;
DEFINE FIELD email ON user TYPE string ASSERT is::email($value);
-- 관계 생성 (그래프 엣지)
RELATE user:alice->follows->user:bob
SET created = time::now();
-- 그래프 + 문서 통합 쿼리
SELECT
name,
->follows->user.name AS following,
<-follows<-user.name AS followers
FROM user WHERE id = user:alice;
-- 실시간 구독 (LiveQuery)
LIVE SELECT * FROM post WHERE author = user:alice;
관련 문서
- •[[nosql-patterns|NoSQL 패턴]]
- •[graph-query-languages|[그래프 쿼리 언어]]
- •[[htap|HTAP]]