TSDB를 공부하던 중 RDB가 시간에 따라 느려질 수 밖에 없고 그에 반해 TSDB는 속도가 느려지지 않으므로 TSDB가 대용량의 데이터를 처리하기 좋다고 알게 되었다.
그렇다면 왜 RDB는 시간이 지날수록 느려질까?
결론은 RDB는 데이터가 많아져 테이블의 크기가 커질수록 느려지는 것이지 꼭 시간에 따라서 그런 것은 아니다.
아마 DB 특성상 시간이 지남에 따라 데이터의 양이 비례하여 많아지기 때문에 느려진다고 가정한 것 같다.
RDB는 데이터를 행(Row) 단위로 저장하는데, 특정 컬럼만 필요해도 전체 행을 읽어야 하므로 읽기 성능이 저하됨.
대량의 데이터에서 집계(Aggregation) 연산을 수행할 때 많은 불필요한 데이터를 읽어야 함.
데이터가 증가하면 B-Tree 또는 Hash 기반 인덱스 크기가 커지면서 검색 속도가 느려짐.
인덱스 업데이트가 빈번해질수록 성능이 저하됨.
RDB는 ACID(Atomicity, Consistency, Isolation, Durability) 보장을 위해 트랜잭션을 관리해야 함.
대량의 데이터를 실시간으로 삽입하거나 수정할 경우, 락(Lock) 경합이 발생하여 성능이 저하됨.
데이터가 많아질수록 오래된 데이터를 삭제해야 하는데, 일반적인 RDB에서는 대량 삭제가 성능에 큰 영향을 줌.
오래된 데이터를 삭제할 때, 인덱스와 테이블을 재구성(Rebuild)해야 하는 경우가 많아 느려짐.
위 문제사항들을 보고 의문이 들 수 있다. 그냥 인덱스도 timestamp로 잡고 샤딩이나 파티셔닝을 해서 테이블의 사이즈를 줄여주면 결국 TSDB와 똑같은거 아닌가?라고 하지만 근본적인 차이가 있다.
TSDB는 기본 컨셉 자체가 대용량 쓰기와 샤딩을 고려하여 설계되었기 때문에 같은 설정을 하더라도 다음과 같은 이유 때문에 차이가 발생한다.
TSDB는 "시계열 데이터 전용 구조"로 설계됨 (ex. Columnar Storage, Append-Only 구조).
반면, RDB는 범용적인 데이터 모델이라서 시계열 데이터 처리에 최적화되어 있지는 않음.
예를 들어 다음과 같은 데이터가 있다고 하자.
| timestamp | sensor_id | temperature | humidity |
|--------------------|----------|------------|----------|
| 2024-02-25 10:00 | 1 | 23.5 | 45.0 |
| 2024-02-25 10:01 | 1 | 23.7 | 44.8 |
| 2024-02-25 10:02 | 1 | 23.9 | 44.5 |
특정 sensor_id=1 데이터를 조회하는 데는 유리하지만, 특정 컬럼(예: temperature)만 대량으로 조회할 때는 불필요한 humidity 데이터도 함께 읽어야 해서 비효율적임.
timestamp: [2024-02-25 10:00, 2024-02-25 10:01, 2024-02-25 10:02]
sensor_id: [1, 1, 1]
temperature: [23.5, 23.7, 23.9]
humidity: [45.0, 44.8, 44.5]
temperature 컬럼만 빠르게 스캔 가능 → 대량의 시계열 데이터를 분석할 때 압도적으로 빠름!
압축 효율 증가 (Delta Encoding, Run-Length Encoding) → 저장 공간 절약
TSDB는 쓰기(INSERT) 성능을 극대화하기 위해 Batch Insert, WAL(Write-Ahead Logging) 최적화, 압축 기법 등을 활용.
반면 RDB는 insert 시 인덱스가 변경될 경우 오버헤드가 발생하며, 트랜잭션 ACID 보장 때문에 INSERT 성능이 상대적으로 낮음.
TSDB는 delta encoding, run-length encoding 같은 시계열 데이터 전용 압축 기법을 사용.
RDB는 일반적인 row-based 저장 방식을 사용하므로 동일한 양의 데이터를 저장할 때 TSDB보다 더 많은 공간이 필요할 수 있음.
TSDB는 기본적으로 Retention Policy(데이터 보존 기간) 설정이 가능하고, 오래된 데이터를 자동으로 다운샘플링(Aggregation) 가능.
반면, RDB에서는 이를 직접 쿼리로 관리해야 해서 운영 비용이 증가함.