피드로 돌아가기
Dev.toDatabase
원문 읽기
Postgres와 Horner's Method로 1.8만 개 곡선 4ms 내 매칭
How I indexed 18,141 polynomial fan curves in Postgres and matched a duty point in 4 ms
AI 요약
Context
기존 HVAC 팬 선정 엔진의 폐쇄적 바이너리 구조로 인한 임베딩 및 쿼리 불가능 문제 발생. 단순 샘플링 기반 Lookup Table 방식은 데이터 팽창과 선형 보간 오차, VFD 속도 변경 시의 재샘플링 비용이라는 한계 존재.
Technical Solution
- 곡선 데이터를 다항식 계수 배열(Polynomial Coefficient Array)로 저장하여 스토리지 효율 극대화
q_min,q_max복합 인덱스 설계를 통한 Postgres 레벨의 1차 필터링으로 I/O 부하 감소Math.pow를 제거하고 곱셈과 덧셈만 사용하는 Horner's Method 도입으로 다항식 연산 속도 최적화- Affinity Law를 적용한 계수 변환 로직으로 원본 데이터 수정 없는 실시간 RPM 스케일링 구현
- 물리적 작동 범위(Domain Check) 검증 단계를 추가하여 데이터 외삽(Extrapolation)으로 인한 오답 방지
Impact
- Warm Cache 기준 전체 매칭 프로세스 3.9ms 달성 (Postgres I/O 2.8ms, 연산 1.1ms)
- 다항식 평가 속도 단일 곡선당 약 30ns 수준으로 단축
- p99 응답 속도 Warm Cache 기준 9.8ms 유지
실천 포인트
- 연속적인 곡선 데이터 처리 시 샘플링 대신 다항식 근사화(Polynomial Approximation) 검토 - 고반복 수치 연산 시 지수 함수(`pow`) 대신 Horner's Method 적용 가능성 확인 - DB 인덱스로 1차 범위를 제한하고 메모리 내에서 정밀 연산을 수행하는 2단계 필터링 전략 채택 - 물리적 제약 조건(Domain)을 비즈니스 로직 최상단에 배치하여 계산 리소스 낭비 방지