시계열 질의의 컴퓨트 사용량
Foundry는 시계열 질의에 맞게 최적화한 형식으로 데이터를 디스크에 캐시합니다. 저장량은 Foundry 스토리지로 측정하며, 저장 자체에는 컴퓨트가 들지 않습니다. 시계열을 색인하거나 실제로 질의할 때 컴퓨트를 사용합니다.
질의 사용량 계산
사용량 기반 계약의 기본 질의 사용량은 요청당 4 compute-seconds이며, 읽은 관측점 수에 따른 사용량이 더해집니다. 기업 계약이 있다면 이 기본값으로 계산하기 전에 Palantir 담당자에게 계약 조건을 확인합니다.
compute-seconds = 4 + points_scanned / 25,000
points_scanned는 질의를 평가하는 동안 읽은 관측점 수입니다. 저장된 시계열의 크기뿐 아니라 계산 구조도 영향을 줍니다. 이 식은 Foundry에 저장한 시계열을 조회하는 컴퓨트에 적용하며 색인과 저장 사용량은 별도로 구분합니다.
가상 계산 예에서 질의 세 개가 각각 100,000개 관측점을 스캔하면 다음과 같습니다.
질의 수 = 3
질의당 기본 사용량 = 4 compute-seconds
스캔한 전체 관측점 = 100,000 × 3 = 300,000
전체 사용량 = 3 × 4 + 300,000 / 25,000
= 24 compute-seconds
사용량이 귀속되는 리소스
Resource Management에서 데이터셋과 관련 리소스의 사용량을 조사합니다. 시계열 질의는 해당 작업을 수행한 도구의 리소스에 귀속됩니다.
| 실행 경로 | 사용량 귀속 |
|---|---|
| Quiver | 질의를 시작한 개별 분석 또는 대시보드 |
| Workshop | 질의를 시작한 앱. Quiver 구성 요소를 삽입한 경우에도 상위 Workshop 앱 |
| FoundryTS를 사용하는 변환 | 해당 변환을 작성한 저장소 |
사용량을 늘리는 조건
질의 수가 늘면 기본 사용량도 반복해서 발생합니다. 사용자 조작, 여러 Quiver 대시보드의 갱신과 예약된 FoundryTS 빌드가 각각 질의를 시작할 수 있습니다.
같은 집계라도 관측점이 10,000,000개인 시계열은 관측점이 100,000개인 시계열보다 읽을 데이터가 많습니다. 실제 사용량은 질의에 따라 달라지며 각 시계열에 시간 범위를 적용하는 것이 읽을 점을 줄이는 일반적인 방법입니다.
계산을 중첩하거나 여러 시계열을 비교하면 결과를 만들기 위해 더 많은 점과 중간 결과를 읽을 수 있습니다. 최종 DataFrame의 행 수만으로 스캔량을 계산하지 않습니다.
사용량 관리
- 분석이나 대시보드를 갱신할 때 실행되는 질의 수를 확인합니다. 매개변수 하나가 바뀌어도 모든 질의를 다시 실행하지 않도록 갱신 의존 관계를 나눕니다.
- FoundryTS 변환의 예약 주기를 실제 데이터 갱신 필요에 맞춥니다.
- 필요한 시간 범위를 시계열 질의에 적용합니다. 범위를 제한하는 설정 자체에는 컴퓨트가 추가로 들지 않으며 백엔드는 그 범위에 필요한 점만 읽습니다.
- 업무에 필요한 시간 해상도를 선택합니다. 미리 집계하거나 해상도별 시계열을 따로 두면 가장 세밀한 관측을 매번 읽는 비용을 줄일 수 있습니다. 여러 시계열의 최신 상태를 유지하는 색인 컴퓨트와 추가 저장량도 함께 고려합니다.
계산 구조와 스캔량
다음 코드는 FoundryTS를 설정한 Code Workbook에서 사용합니다. 동기화와 기반 데이터셋을 입력 및 프로젝트 범위에 추가하고, 숫자형 시계열 ID인 series_1과 series_2를 실제 조회 대상에 맞춥니다.
두 시계열의 합
import foundryts.functions as F
series_1, series_2 = F.series("series_1", "series_2")
result = F.dsl(program="a+b")([series_1, series_2]).time_range(
start="2022-01-01", end="2023-01-01"
)
result_df = result.to_pandas()
계산 구조에는 두 입력 시계열과 그 합을 만드는 수식 노드가 있습니다. to_pandas가 질의를 평가할 때 결과 시계열뿐 아니라 결과를 만드는 두 입력의 해당 시간 범위도 읽습니다.
합과 7일 이동 평균의 차이
import foundryts.functions as F
series_1, series_2 = F.series("series_1", "series_2")
summed = F.dsl(program="a+b")([series_1, series_2])
rolling_mean = summed.rolling_aggregate("mean", "7d")
result = F.dsl(program="a-b")([summed, rolling_mean]).time_range(
start="2022-01-01", end="2023-01-01"
)
result_df = result.to_pandas()
이 계산의 의존 관계는 다음과 같습니다.
| 계산 노드 | 입력 |
|---|---|
| 최종 차이 수식 | 합 시계열, 7일 이동 평균 |
| 합 시계열 | series_1, series_2 |
| 7일 이동 평균 | 합 시계열 |
| 이동 평균에 들어가는 합 | series_1, series_2 |
이동 평균은 각 관측 시각까지의 7일 구간을 사용합니다. 최종 출력 범위가 1년이어도 질의의 각 계산 노드가 필요한 관측을 읽으므로 단순 합보다 스캔량이 커질 수 있습니다. 실제 사용량에는 최종 결과와 하위 계산에서 스캔한 점을 함께 반영합니다.