0. 차트에 사용하는 시계열 데이터는 어떻게 저장할까?
- 삼성전자의 초, 분, 시간, 일, 월 단위 등 다양한 차트 데이터가 있다고 한다면, 이 모든 데이터를 한 곳에 저장하는건 매우 비효율적이닌까 제외하자.
- 그렇다면 RDB에서 '삼성전자 초단위', '하이닉스 시간 단위'와 같이 모든 차트 데이터를 저장하려면 종목 수 x 차트 종류 만큼 테이블을 만들어야 한다.
- NoSQL은 당연히 그만큼의 스키마를 만들고 관리해주어야 한다.
- 일정시간마다 데이터가 삽입되고, 그 데이터들을 읽을 경우가 많다.
1. RDB로 했을 때 장점과 단점은 무엇일까?
- 장점
- ACID 특성 : 트랜잭션 무결성을 보장해준다
- 복잡한 쿼리와 조인 수행
- 스키마를 정의하여 데이터 구조를 강제한다.
- 단점
- 확장성 제한
- 수직 확장이 주로 이루어지며, 수평 확장이 어렵다.
- 대규모 시계열 데이터를 다룰 때 성능 저하가 발생할 수 있다.
- 쓰기 성능
- 대량의 시계열 데이터를 빠르게 삽입하는 데 있어 성능이 떨어질 수 있다.
- 고정된 스키마
- 데이터 구조 변경이 필요할 때 유연성이 떨어진다.
- 확장성 제한
2. NoSQL로 했을 때 장점과 단점은 무엇일까?
- 장점
- 수평 확장
- 수평 확장이 용이하여 대량의 세계열 데이터를 효율적으로 분산 저장 가능
- 클러스터링을 통해 대규모 데이터를 처리하는 데 적합
- 고성능 쓰기
- 빠른 스기에 최적화
- 유연한 스키마
- 스키마리스 특성
- 수평 확장
- 단점
- 트랜잭션 제한 : 데이터 일관성을 보장하기 어렵다. 복잡한 트랜잭션 처리에 약하다.
- 모델링에 따라서 중복 데이터가 발생할 수 있다.
3. 그렇다면 왜 나는 NoSQL로 시계열 데이터를 저장했는가?
- 빠른 읽기와 쓰기에서 성능이 중요하다고 판단했다.
- 짧은 시간 단위로 여러 종목에 대한 데이터를 계속 삽입해야하고, 이것을 사용자가 사용하기에 불편하지 않아야한다.
- 즉, 트랜잭션을 통해 데이터 안정성을 높이기 보다는 성능을 중요하게 생각했다.
- RDB의 장점을 크게 부각시킬 일이 없었다.
- 시계열 데이터를 불러올 때 단순히 해당 테이블의 모든 데이터를 불러오기만 한다.
- 즉, 해당 테이블은 다른 테이블들과 관계가 맺어지지 않으며, 복잡한 쿼리 성능이 필요하지 않았다.
- 프로젝트에서는 작은 규모의 시계열 데이터만 쌓였지만, 종목과 차트 종류가 늘어난다면 NoSQL을 성능적으로 선택할 수 밖에 없었다.
- 하지만 데이터의 일관성이 매우 중요해진다면 RDBMS를 활용할 수 도 있다.
- 이 경우 성능보다는 데이터가 중요해지기 때문에 클러스터링, 샤딩 등 을 통해서 DB 부하를 막는 방법으로 진행해야 할 것이다.