2017-02-23 7 views
0

우리는 시계열 데이터를 처리하여 일정 기간 고정 된 유형으로 집계합니다. 화요일부터 수요일까지.집계 된 시계열 데이터에 대해 Postgres에서 daterange를 키로 사용합니다.

이 데이터는 Postgres daterange 유형을 key으로 사용하는 것이 바람직합니까? (그 대신 DATERANGE를 식별하기 위해이 DATERANGE을 정의하고 달력 차원에서 조인 "PeriodID" - 키를 가지고 예를 들어,의.) 내 마음에

그것은 단지 명확를 가지고 별도의 "PeriodID"daterange A와 함께 여분의 것 정의 (우리의 설정에서 그것은 각 관측에 유일 할 것이다).

이 있습니다

  • 성능 고려 사항?
  • 기타 고려 사항?
+0

나는 그것이 나중에 어떻게 qry 할 것인지에 더 의존한다고 생각한다. 일반적으로 타임 스탬프에 인덱스를 만들고이를 t와 비교합니다. 범위가 필요한 경우 7 일 기간으로 generate_series를 생성 할 수 있습니다. –

답변

1

추상적 인 수준에서 tstzrange은 그러한 집계에 대한 완벽한 표현입니다.

고려해야 할 문제점은 데이터를 쿼리하는 방법과 인덱스를 얼마나 효율적으로 사용할 수 있는가하는 점입니다. 당신이 인덱싱 할 경우

는 “는 ” 운영자 @>을 포함하거나 “ 연산자 && ”, 당신은 B-tree 인덱스 만 GIST 및 SP-GIST 인덱스 (the documentation 참조)를 사용할 수 없습니다 겹칩니다. 이것을 벤치 마크해야하지만, 그러한 인덱스를 사용하면 timestamptz 컬럼에서 B 트리 인덱스를 사용하는 것이 더 느립니다. 인덱스는 더 많은 공간을 사용할 수도 있습니다.

이 같은 낮은 범위의 끝과 쿼리 저장하는 것 B-tree 인덱스와 timestamptz를 사용하는 간단한 방법 :

... WHERE weekstart <= atimestamp 
     AND weekstart > atimestamp - INTERVAL '1 week' 

또는 중복 간격으로 쿼리 :

... WHERE weekstart <= endtimestamp 
     AND weekstart > starttimestamp - INTERVAL '1 week'