Disk-Based Database(디스크 기반 데이터베이스)는 데이터를 디스크(HDD, SSD)에 저장하고 관리하는 데이터베이스입니다.
전통적인 데이터베이스 시스템은 디스크 I/O를 기반으로 데이터를 읽고 쓰며, 영속성(Persistence)을 보장합니다.
대표적인 예로 MySQL, PostgreSQL, Oracle, MongoDB, Cassandra 등이 있습니다.
비교 항목 | Disk-Based DB (디스크 기반 데이터베이스) | In-Memory DB (인메모리 데이터베이스) |
---|---|---|
데이터 저장 위치 | 디스크(HDD/SSD) | 메모리(RAM) |
속도 | 느림 (디스크 I/O 발생) | 빠름 (RAM에서 직접 접근) |
영속성 | 항상 보장됨 (데이터가 디스크에 저장) | 기본적으로 휘발성(일부 영속성 옵션 제공) |
트랜잭션(ACID) | 강력한 트랜잭션 지원 | 일부 In-Memory DB만 지원 |
I/O 비용 | 높음 (디스크 읽기/쓰기 발생) | 낮음 (디스크 I/O 없음) |
사용 사례 | 일반적인 웹 애플리케이션, 금융, ERP | 캐시(Cache), 세션 저장, 실시간 분석 |
📌 즉, Disk-Based DB는 데이터를 영구적으로 저장하는 것이 목적이고, In-Memory DB는 속도가 중요할 때 사용됩니다.
영속성(Persistence) 보장
대용량 데이터 처리 가능
트랜잭션(ACID) 지원
디스크 I/O 최적화
SQL 또는 NoSQL 지원
디스크 기반 데이터베이스는 데이터를 직접 디스크에서 읽는 것이 아니라, 메모리와 캐시를 활용하여 최적화합니다.
1️⃣ 디스크에서 데이터를 읽어 버퍼 풀(Buffer Pool)에 로드
2️⃣ 쿼리를 실행하고, 필요한 연산을 메모리에서 수행
3️⃣ 수정된 데이터는 일정 주기마다 디스크에 저장 (Checkpoint, WAL 사용)
4️⃣ 디스크에 저장 후 커밋(Commit) 수행
📌 이 과정을 통해 디스크 접근을 최소화하고 성능을 최적화함.
📌 테이블(Table) 기반 데이터 저장, SQL 사용, ACID 보장
✅ RDBMS 예제 (MySQL)
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100)
);
INSERT INTO users VALUES (1, 'Alice', 'alice@example.com');
SELECT * FROM users;
📌 비정형 데이터(문서, 키-값, 그래프 등) 저장, 높은 확장성 제공
✅ NoSQL 예제 (MongoDB)
db.users.insertOne({ "name": "Alice", "email": "alice@example.com" });
db.users.find();
디스크 기반 데이터베이스의 성능을 높이기 위해 여러 가지 최적화 기법이 사용됩니다.
CREATE INDEX idx_name ON users(name);
✅ 인덱스를 사용하면 특정 필드 검색 속도가 대폭 향상됨
*
지양✅ 비효율적인 쿼리 예제
SELECT * FROM users;
✅ 최적화된 쿼리 예제
SELECT id, name FROM users WHERE name = 'Alice';
✅ 예제 (Spring + Redis)
@Cacheable("users")
public User getUserById(Long id) {
return userRepository.findById(id).orElse(null);
}
✅ MongoDB 샤딩(Sharding) 설정
sh.enableSharding("myDatabase");
sh.shardCollection("myDatabase.users", { "userId": "hashed" });
✅ 데이터 영속성 보장 → 전원 OFF 후에도 데이터 보존
✅ 대량 데이터 저장 가능 → RAM 제한 없이 GB~TB급 데이터 처리
✅ SQL 지원 (RDBMS) → 복잡한 데이터 쿼리 가능
✅ 트랜잭션(ACID) 보장 → 데이터 정합성 유지 가능
❌ 속도가 상대적으로 느림 → 디스크 I/O가 발생
❌ 디스크 장애 발생 가능 → 장애 대비 백업 & 복구 시스템 필요
❌ 스케일아웃이 어렵다 (일반적인 RDBMS) → 분산처리가 필요할 수도 있음
사용 사례 | Disk-Based DB (RDBMS, NoSQL) | In-Memory DB (Redis, Memcached) |
---|---|---|
대량 데이터 저장 | ✅ 적합 | ❌ 비적합 (RAM 한정) |
빠른 응답 속도 | ❌ 상대적으로 느림 | ✅ 매우 빠름 |
데이터 영속성 | ✅ 보장됨 | ❌ 기본적으로 휘발성 |
트랜잭션 관리 | ✅ ACID 보장 | ⚠ 일부 지원 (Redis Transactions) |
캐싱(Cache) | ❌ 부적합 | ✅ 적합 |
✅ Disk-Based Database는 데이터를 디스크에 저장하는 방식으로 영속성을 보장
✅ 대량의 데이터를 저장할 수 있으며, RDBMS & NoSQL 형태로 사용 가능
✅ 속도는 In-Memory DB보다 느리지만, 트랜잭션과 영속성이 필요할 때 최적의 선택
✅ 고성능이 필요하면 인덱스, 캐싱, 샤딩 등의 최적화 기법을 적용해야 함
🚀 대규모 데이터 저장 & 복잡한 쿼리가 필요한 경우, Disk-Based DB를 적극 활용하자!
추가 학습 자료