시스템 트레이딩 - 시계열 데이터 TimeSeries Data 저장

1 minute read

데이터 분석 - 옛날

시계열 데이터 저장

예전에는 증권데이터를 저장할 마땅한 방법이 없었다.

처음에는 MS SQL에 저장을 했었는데… 젠장. 다음날까지 insert를 하고 있다.
트랜잭션, 벌크인서트 쿼리, 인덱스변경 여러가지 해 봤지만… 별 차이는 없었다.
이 때 처음 알게 됐다. 디비에 파일을 넣는게 바로바로 쏙쏙 들어가는게 아니군.

파일에 저장을 해 봤다.
2018/10/12/000060.dat 이렇게계층형으로 저장을 했는데 이게 관리가 힘들다. 검색도 힘들고… 순차적으로 로딩만 하면 되는데

시계열 데이터 분석

실시간 데이터를 분석할 방법은 많이 보였다.

당시 Marketcetera, Streambase, Esper 등의 CEP툴들.. RuleEngine.

근데 뭐.. 저장할 방법이 없으니 쓸모가 없었다. 이것들도 딱히 쓰기 좋게 잘 나와 있지도 않았고

그래서 뭔가를 만들었나?

아니. 그냥 몇년 기다렸다.

그랬더니 역시 뭔가 나왔다.

데이터 분석 - 최근

Hadoop, HDFS, Hbase 하둡이 나오고 막 발전하기 시작하더니

Spark, Storm, Cassandra, OpenTSDB, Prometheus 등 다양한 방법이 나오기 시작했다.

Minio, Ceph, …

다양한게 나왔는데.. 너무 난립 해 있어서 오히려 머리가 아플 지경이다.

한개가 압도적으로 좋으면고민도 안 할텐데

배치분석 : Map Reduce, Spark

실시간 분석 : Storm, Spark

컬럼디비 : Cassandra, HBase

시계열디비 : OpenTSDB, Prometheus, InfluxDB, vaultaire, Riak, Whisper(graphite)

파일저장소 : minio, HDFS, ceph

로그 수집 : Fluentd, Flume, Logstash, Scribe

MQ : RabbitMQ, Kafka

기타 : ZooKeeper

이 중에서 한개만 고르면 땡인 것도 아니다. 이것들끼리 의존관계가 얽혀서…

고민되는 부분

ceph를 쓰면 vaultaire와 hadoop, hbase의 backend로도 쓸 수 있다.
비공식 플러그인 지원이라서 좀 문제가 발생할 가능성도 있다.
로그저장. 파일저장도 할 수 있고.
설치가 쉽진 않다.
hdfs보다 좀 더 활발하게 사용되는 것 같기도 하고…

hdfs를 쓰면 hbase, opentsdb, map reduct … 이렇게 자연스럽게 연결. 
레퍼런스가 많다.

aws, gcp를 써도 되지만… 월비용 10만원을 넘을 때 까지는 집에서 운영하고싶은 생각에..

지금 중학생이면 얼마나 좋을까…

사용기술 선정

Spark - 배치분석, 머신러닝돌리기 좋고 호환이 잘된다. 레퍼런스도 많다.
Storm - 실시간 분석, 스파크는 완전실시간이 아닌 마이크로 배치. 조금 다르다. 일단 사용 후 필요한지 검증.
HDFS - 오브젝트저장소, 호환성이 좋다. 성능도 나쁘지 않다.
HBase - 컬럼DB, HDFS를 백엔드로 사용한다. ceph를 쓸 수도 있지만 기본옵션으로 쓰는게 속편하다.
OpenTDSB - 백엔드 저장소로 Cassandra, HBase, GoogleBigtable을 사용.
Fluentd - 로그수집, 가볍고 간단하다.
Kafka - MQ. RabbitMQ도 나쁘진 않지만.. 하둡 쓸 때는 Kafka 쓰는거다. 분산형으로 사용하기 더 좋다는 결과를 본 것 같다. 호환성은 RabbitMQ가 더 좋았던 것 같은데..
Minio - 파일저장소. 오브젝트는 제외. 파일 저장소로 사용.