

Amazon Timestream for LiveAnalytics와 유사한 기능을 원하는 경우 Amazon Timestream for InfluxDB를 고려해 보세요. 간소화된 데이터 수집과 실시간 분석을 위한 10밀리초 미만의 쿼리 응답 시간을 제공합니다. [여기](https://docs.aws.amazon.com//timestream/latest/developerguide/timestream-for-influxdb.html)에서 자세히 알아보세요.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon Timestream에서 데이터 액세스 최적화
<a name="query-insights-optimize-data-access-pattern"></a>

Timestream 파티셔닝 체계 또는 데이터 구성 기법을 사용하여 Amazon Timestream의 데이터 액세스 패턴을 최적화할 수 있습니다.

**Topics**
+ [Timestream 파티셔닝 체계](#query-insights-optimize-data-access-partitioning-scheme)
+ [데이터 구성](#query-insights-optimize-data-access-data-org)

## Timestream 파티셔닝 체계
<a name="query-insights-optimize-data-access-partitioning-scheme"></a>

Amazon Timestream은 각 Timestream 테이블에 수백, 수천 또는 수백만 개의 독립 파티션이 있을 수 있는 확장성이 뛰어난 파티셔닝 체계를 사용합니다. 고가용성 파티션 추적 및 인덱싱 서비스는 파티셔닝을 관리하여 장애의 영향을 최소화하고 시스템의 복원력을 높입니다.

![\[Timestream 파티셔닝 체계\]](http://docs.aws.amazon.com/ko_kr/timestream/latest/developerguide/images/QueryInsights/ts-partitioning-scheme.png)


## 데이터 구성
<a name="query-insights-optimize-data-access-data-org"></a>

Timestream은 수집한 각 데이터 포인트를 단일 파티션에 저장합니다. Timestream 테이블에 데이터를 수집하면 Timestream은 데이터의 타임스탬프, 파티션 키 및 기타 컨텍스트 속성을 기반으로 파티션을 자동으로 생성합니다. Timestream은 데이터를 제시간에 파티셔닝(임시 파티셔닝)하는 것 외에도 선택한 파티셔닝 키 및 기타 차원(공간 파티셔닝)을 기반으로 데이터를 파티셔닝합니다. 이 접근 방식은 쓰기 트래픽을 분산하고 쿼리를 위한 데이터를 효과적으로 정리할 수 있도록 설계되었습니다.

쿼리 인사이트 기능은 쿼리 공간 커버리지 및 쿼리 임시 커버리지를 포함하여 쿼리의 정리 효율성에 대한 귀중한 인사이트를 제공합니다.

**Topics**
+ [QuerySpatialCoverage](#query-insights-data-org-query-spatial-cvg)
+ [QueryTemporalCoverage](#query-insights-data-org-query-temporal-cvg)

### QuerySpatialCoverage
<a name="query-insights-data-org-query-spatial-cvg"></a>

[QuerySpatialCoverage](https://docs.aws.amazon.com/timestream/latest/developerguide/API_query_QuerySpatialCoverage.html) 지표는 실행된 쿼리와 공간 정리가 가장 비효율적인 테이블의 공간 커버리지에 대한 인사이트를 제공합니다. 이 정보는 파티셔닝 전략의 개선 영역을 식별하여 공간 정리를 개선하는 데 도움이 될 수 있습니다. `QuerySpatialCoverage` 지표의 값은 0에서 1 사이입니다. 지표 값이 낮을수록 공간 축에서 쿼리 정리가 더 최적화됩니다. 예를 들어 값이 0.1이면 쿼리가 공간 축의 10%를 스캔함을 나타냅니다. 값이 1이면 쿼리가 공간 축의 100%를 스캔함을 나타냅니다.

**Example 쿼리 인사이트를 사용하여 쿼리의 공간 커버리지 분석**  
날씨 데이터를 저장하는 Timestream 데이터베이스가 있다고 가정해 보겠습니다. 미국 내 여러 주에 위치한 기상대에서 1시간마다 온도가 기록된다고 가정합니다. [고객 정의 파티셔닝 키](customer-defined-partition-keys.md)(CDPK)로 `State`를 선택하여 데이터를 상태별로 파티셔닝한다고 상상해 보세요.  
특정 날짜의 오후 2시에서 오후 4시 사이에 캘리포니아에 있는 모든 기상 관측소의 평균 온도를 검색하는 쿼리를 실행한다고 가정해 보겠습니다. 다음 예제에서는 이 시나리오에 대한 쿼리를 보여줍니다.  

```
SELECT AVG(temperature) 
FROM "weather_data"."hourly_weather"
WHERE time >= '2024-10-01 14:00:00' AND time < '2024-10-01 16:00:00' 
  AND state = 'CA';
```
쿼리 인사이트 기능을 사용하여 쿼리의 공간 커버리지를 분석할 수 있습니다. `QuerySpatialCoverage` 지표가 값으로 0.02를 반환한다고 가정해 보겠습니다. 즉, 쿼리는 공간 축의 2%만 스캔하므로 효율적입니다. 이 경우 쿼리는 캘리포니아에서 데이터를 검색하고 다른 주의 데이터만 무시하면서 공간 범위를 효과적으로 정리할 수 있었습니다.  
반대로 `QuerySpatialCoverage` 지표가 값으로 0.8을 반환하면 쿼리가 공간 축의 80%를 스캔했음을 나타내며, 이는 효율성이 떨어집니다. 이는 공간 정리를 개선하기 위해 파티셔닝 전략을 개선해야 함을 시사할 수 있습니다. 예를 들어 파티션 키를 주 대신 도시 또는 리전으로 선택할 수 있습니다. `QuerySpatialCoverage` 지표를 분석하여 파티셔닝 전략을 최적화하고 쿼리 성능을 개선할 기회를 식별할 수 있습니다.

다음 이미지는 공간 정리 불량을 보여줍니다.

![\[잘못된 공간 정리를 보여주는 QuerySpatialCoverage 지표에서 제공하는 결과입니다.\]](http://docs.aws.amazon.com/ko_kr/timestream/latest/developerguide/images/QueryInsights/QuerySpatialCoverageMetricResult.png)


공간 정리 효율성을 개선하기 위해 다음 중 하나 또는 둘 다를 수행할 수 있습니다.
+ 기본 구문 분석 키인 `measure_name`을 추가하거나 쿼리에 CDPK 조건자를 사용합니다.
+ 이전 포인트에서 언급한 속성을 이미 추가한 경우 `LIKE`와 같은 이러한 속성 또는 절과 관련된 함수를 제거합니다.

### QueryTemporalCoverage
<a name="query-insights-data-org-query-temporal-cvg"></a>

`QueryTemporalCoverage` 지표는 실행된 쿼리에서 스캔한 임시 범위에 대한 인사이트를 제공하며, 여기에는 스캔된 임시 범위가 가장 큰 테이블이 포함됩니다. `QueryTemporalCoverage` 지표 값은 나노초 단위로 표시되는 시간 범위입니다. 이 지표의 값이 낮을수록 임시 범위에서 쿼리 정리가 더 최적화됩니다. 예를 들어, 지난 몇 분 동안의 데이터 쿼리 스캔은 테이블의 전체 시간 범위를 스캔하는 쿼리보다 성능이 뛰어납니다.

**Example**  
제조 공장에 있는 디바이스에서 1분마다 측정하여 IoT 센서 데이터를 저장하는 Timestream 데이터베이스가 있다고 가정해 보겠습니다. `device_ID`로 데이터를 파티셔닝했다고 가정합니다.  
쿼리를 실행하여 지난 30분 동안 특정 디바이스의 평균 센서 판독값을 검색한다고 가정해 보겠습니다. 다음 예제에서는 이 시나리오에 대한 쿼리를 보여줍니다.  

```
SELECT AVG(sensor_reading) 
FROM "sensor_data"."factory_1"
WHERE device_id = 'DEV_123' 
  AND time >= NOW() - INTERVAL 30 MINUTE and time < NOW();
```
쿼리 인사이트 기능을 사용하여 쿼리에서 스캔한 임시 범위를 분석할 수 있습니다. `QueryTemporalCoverage` 지표가 값으로 1,800,000,000,000나노초(30분)의 값을 반환한다고 가정해 보겠습니다. 즉, 쿼리는 지난 30분 동안의 데이터만 스캔했으며, 이는 상대적으로 좁은 임시 범위입니다. 이는 쿼리가 시간 파티셔닝을 효과적으로 정리할 수 있고 요청된 데이터만 검색했음을 나타내기 때문에 좋은 신호입니다.  
반대로 `QueryTemporalCoverage` 지표가 나노초 단위로 1년 값을 반환한 경우 쿼리가 테이블에서 1년 시간 범위를 스캔했음을 나타내며, 이는 효율성이 떨어집니다. 이는 쿼리가 시간 정리에 최적화되지 않았으며 시간 필터를 추가하여 쿼리를 개선할 수 있음을 시사할 수 있습니다.

다음 이미지는 잘못된 시간 정리를 보여줍니다.

![\[잘못된 시간 정리를 보여주는 QueryTemporalCoverage 지표에서 제공하는 결과입니다.\]](http://docs.aws.amazon.com/ko_kr/timestream/latest/developerguide/images/QueryInsights/QueryTemporalCoverageMetricResult.png)


시간 정리를 개선하려면 다음 중 하나 또는 모두를 수행하는 것이 좋습니다.
+ 쿼리에 누락된 시간 조건자를 추가하고 시간 조건자가 원하는 기간을 잘라내고 있는지 확인합니다.
+ 시간 조건자 주변의 함수(예: `MAX()`)를 제거합니다.
+ 모든 하위 쿼리에 시간 조건자를 추가합니다. 이는 하위 쿼리가 큰 테이블을 조인하거나 복잡한 작업을 수행하는 경우 중요합니다.