Lastest Update: 20250413
문제상황
- 틱 데이터를 다루는 작업
- 기본적으로 한번 읽는데 비트코인 1달치 데이터가 500GB정도(압축해제시,
no mmap)
- 새로운 연산을 할 때마다 HDD에서 읽고 MEM에 쓰고 CPU Cache에 넣어서 연산하는 과정을 무한 반복하게됨.
- 100번만 하더라도 PetaBytes(1_000_000GB) 단위 i/o가 필요함
- 엔지니어링 최적화 없이 Python으로는 PetaBytes 단위 핸들링이 현실적으로 거의 불가능.
- 하루 Binance-futures BTCUSDT 데이터 포인트는 1억건(
L2_MBP + Trades)
- 기본적으로 1년치 데이터를 이용: 365일 * 50개 패어: 1억 * 50개 * 365: 최대 1.8조개 이하 포인트(`거래량이 적은 코인은 데이터 포인트가 적음으로 최소 1조개 ~ 최대 1.8조개 포인트로 추정가능)
틱데이터를 다루는 Operations
- Vectorized Processing(Stateless, 1:1 Mapping)
- Event Driven Processing(Stateful, 1:N Mapping)
문제해결 #1: Pandas
I/O 부분
Pandas2.0 에서도 문제가 많음.
- Read시 Python interpreter에서 pyObj를 Allocation 함. (Dict/List 사용시)
- Read시 Pyarrow(parquet, C++ Based)사용하면 Read 속도는 증가.
Vectorized Ops
결과적으로 Aggregator, Div, Mul, Add, Sub 모두 느림. (single Processor)
Event-Driven Ops