회사에서 새 프로젝트에 투입되서 이제 슬슬 바빠진다.
신입 때는 1인분 할 수 있을까 걱정했지만, 이제는 새로운 일이라도 딱히 걱정은 안 되고 그냥 하면 될 거 같다.
돌이켜보니 인내심을 갖고 잘 가르쳐주신 이전 선배님들 덕분인 거 같다.
올해도 일복 터진 거 같지만, 인복도 좋기를 빈다. 파이팅
데이터 조회 성능 최적화를 시도하려고 이것저것 알아보고 적용해봤지만,
결론부터 애기하면, 삽질만 하다 끝났다. 그 과정을 정리하고 다음에 까먹지 않으려한다.
데이터 조회 시, 시간 순으로 정렬되지 않은 내역을 확인했고 이를 수정하는 과정에서 백테스팅 성능(시간)이 대폭 감소했다.
상황
- 5분봉 데이터(size 77), 일봉 데이터(size 365)는 저장은 1회이고 조회는 여러 번 한다.
성능을 위해 아래와 같은 조치를 했다.
- mognoDB timeseries collection 세팅 (기본적으로 timestamp 필드를 기준으로 정렬하지만, 항상 보장하지 않는다)
- 주식 symbol 별로 조회를 하기에 collection을 symbol 명으로 구분함 (ex. A003512)
- 비즈니스 로직에서 sorting 처리함 :(
변경점
- DAO에서 sort 옵션을 추가하고, 비즈니스 로직에서 sort 옵션을 제거함
-> 백테스팅 속도 오래걸림.. (어째서?)
성능을 위해 아래와 같은 조치를 했다.
1. MognoDB 최적화
- TimeSeries collection 설정 (timestamp 기준으로 정렬됨)
- create_index('timestamp', ASECENDING) 설정 불필요
2. Collection 분리
- 데이터 조회 시, 특정 종목의 1일치 / 1년치 데이터가 필요한 경우이기에 컬렉션을 주식 symbol 단위로 분리했다.
3. 데이터 정렬은 1회만
- 개발 과정에서 비즈니스 로직마다 필요 시, sorting 로직을 추가했었음
- DAO에서 정렬된 데이터를 조회하고, 이후에는 sorting 로직 모두 제거
4. Query 업데이트
- Chaining 기법 적용 find().sort() 은 네트워크를 2번 호출하는 것처럼 보이지만, 실제로는 1회 호출임
- find에 sort 옵션을 넣는 방법도 있지만, 취향 차이라고 한다. (chaining 기법이 가독성에 좋아서 실무에 많이 쓰인다 함)
'Quant' 카테고리의 다른 글
시스템 안정화 (1) (0) | 2025.03.15 |
---|---|
Sorting과 성능 최적화 (2) (0) | 2025.03.13 |
돈 파쇄기 개발 성공 (0) | 2025.03.07 |
대체거래소 첫날과 매매 시간 최적화 (0) | 2025.03.05 |
프론트엔드와 삽질 (0) | 2025.03.03 |