Amazon Timestream for LiveAnalytics와 유사한 기능을 원하는 경우 Amazon Timestream for InfluxDB를 고려해 보세요. 간소화된 데이터 수집과 실시간 분석을 위한 10밀리초 미만의 쿼리 응답 시간을 제공합니다. 여기에서 자세히 알아보세요.
기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
쓰기
연결된 디바이스, IT 시스템 및 산업 장비에서 시계열 데이터를 수집하여 Timestream for Live Analytics에 쓸 수 있습니다. Timestream for Live Analytics를 사용하면 시계열이 동일한 테이블에 속할 때 단일 시계열의 데이터 포인트 및/또는 여러 계열의 데이터 포인트를 단일 쓰기 요청으로 작성할 수 있습니다. 사용자의 편의를 위해 Timestream for Live Analytics는 데이터베이스에 쓰기를 간접적으로 호출할 때 지정하는 측정값의 차원 이름과 데이터 유형을 기반으로 Timestream for Live Analytics 테이블의 열 이름과 데이터 유형을 자동으로 탐지하는 유연한 스키마를 제공합니다. Timestream for Live Analytics에 데이터 배치를 쓸 수도 있습니다.
참고
Timestream for Live Analytics는 읽기 작업에 대해 최종 일관성 시맨틱을 지원합니다. 즉, Timestream for Live Analytics에 데이터 배치를 작성한 직후에 데이터를 쿼리하면 쿼리 결과에 최근에 완료된 쓰기 작업의 결과가 반영되지 않을 수 있습니다. 결과에 부실 데이터가 일부 포함될 수도 있습니다. 마찬가지로, 하나 이상의 새 차원으로 시계열 데이터를 쓰는 동안 쿼리는 짧은 기간 동안 열의 부분 하위 집합을 반환할 수 있습니다. 잠시 후 이 쿼리 요청을 반복하면 결과가 최신 데이터를 반환합니다.
AWS SDK, AWS CLI를 사용하거나 AWS Lambda, AWS IoT Core, Amazon Managed Service for Apache Flink, Amazon Kinesis, Amazon MSK, 오픈 소스 Telegraf를 통해 데이터를 쓸 수 있습니다.
주제
데이터 타입
Timestream for Live Analytics는 쓰기에 대해 다음과 같은 데이터 유형을 지원합니다.
| 데이터 유형 | 설명 |
|---|---|
|
BIGINT |
64비트 부호 있는 정수를 나타냅니다. |
|
BOOLEAN |
논리의 두 진리값, 즉 true와 false를 나타냅니다. |
|
DOUBLE |
이진 부동 소수점 산술을 위한 IEEE 표준 754를 구현하는 64비트 가변 정밀도입니다. 참고쿼리에 사용할 수 있는 |
|
VARCHAR |
선택적 최대 길이를 가진 가변 길이 문자 데이터입니다. 최대 한도는 2KB입니다. |
|
MULTI |
다중 측정 레코드의 데이터 유형입니다. 이 데이터 유형에는 |
|
TIMESTAMP |
UTC 기준으로 나노초 단위의 정밀도로 특정 시점을 나타내며, Unix 시간 이후 경과 시간을 추적합니다. 이 데이터 유형은 현재 다중 측정 레코드(즉,
쓰기는 |
사전 스키마 정의 불필요
Amazon Timestream for Live Analytics로 데이터를 전송하기 전에 AWS Management 콘솔, Timestream for Live Analytics SDK 또는 Timestream for Live Analytics API 작업을 사용하여 데이터베이스와 테이블을 생성해야 합니다. 자세한 내용은 데이터베이스 생성 및 테이블 생성(을)를 참조하세요. 테이블 생성 시 스키마를 미리 정의할 필요가 없습니다. Amazon Timestream for Live Analytics는 전송되는 데이터 포인트의 측정과 차원을 기반으로 스키마를 자동으로 탐지하므로 빠르게 변화하는 시계열 데이터에 맞게 스키마를 오프라인에서 수정할 필요가 없습니다.
데이터 쓰기(삽입 및 업서트)
Amazon Timestream for Live Analytics의 쓰기 작업은 데이터 삽입 및 업서트 작업을 가능하게 합니다. 기본적으로 Amazon Timestream for Live Analytics에서 쓰기는 데이터가 추가 전용으로 저장되고 중복 레코드가 거부되는 최초 라이터 우선 적용 시맨틱을 따릅니다. 최초 라이터 우선 적용 시맨틱은 많은 시계열 애플리케이션의 요구 사항을 충족하지만, 애플리케이션이 기존 레코드를 멱등적으로 업데이트하거나, 가장 최신 버전의 레코드가 서비스에 저장되는 최종 라이터 우선 적용 시맨틱으로 데이터를 작성해야 하는 시나리오도 있습니다. 이러한 시나리오를 해결하기 위해 Amazon Timestream for Live Analytics는 데이터를 업서트하는 기능을 제공합니다. 업서트는 레코드가 존재하지 않을 경우 시스템에 레코드를 삽입하고, 존재할 경우 레코드를 업데이트하는 작업입니다. 레코드가 업데이트될 때 멱등적으로 업데이트됩니다.
삭제에 대한 레코드 수준 작업은 존재하지 않습니다. 그러나 테이블과 데이터베이스는 삭제할 수 있습니다.
메모리 스토어 및 마그네틱 스토어에 데이터 쓰기
Amazon Timestream for Live Analytics는 메모리 스토어와 마그네틱 스토어에 직접 데이터를 쓸 수 있는 기능을 제공합니다. 메모리 스토어는 처리량이 많은 데이터 쓰기에 최적화되어 있고 마그네틱 스토어는 지연 도착 데이터의 처리량이 낮은 쓰기에 최적화되어 있습니다.
지연 도착 데이터는 현재 시간보다 이전 타임스탬프를 가지며 메모리 스토어 보존 기간을 벗어난 데이터입니다. 테이블에 대해 마그네틱 스토어 쓰기를 활성화하여 지연 도착 데이터를 마그네틱 스토어에 쓰는 기능을 명시적으로 활성화해야 합니다. 또한 테이블 생성 시 MagneticStoreRejectedDataLocation이 정의됩니다. 마그네틱 스토어에 쓰려면 WriteRecords의 호출자에게 테이블 생성 중 MagneticStoreRejectedDataLocation에 지정된 S3 버킷에 대한 S3:PutObject 권한이 있어야 합니다. 자세한 내용은 CreateTable, WriteRecords 및 PutObject를 참조하세요.
단일 측정 레코드 및 다중 측정 레코드로 데이터 쓰기
Amazon Timestream for Live Analytics는 단일 측정 레코드와 다중 측정 레코드라는 두 가지 유형의 레코드를 사용하여 데이터를 쓸 수 있는 기능을 제공합니다.
단일 측정 레코드
단일 측정 레코드를 사용하면 레코드당 단일 측정을 보낼 수 있습니다. 이 형식을 사용하여 데이터가 Timestream for Live Analytics로 전송되면 Timestream for Live Analytics는 레코드당 하나의 테이블 행을 생성합니다. 즉, 디바이스가 4개의 지표를 내보내고 각 지표가 단일 측정 레코드로 전송되는 경우 Timestream for Live Analytics는 테이블에 4개의 행을 생성하여 이 데이터를 저장하고 각 행에 대해 디바이스 속성이 반복됩니다. 이 형식은 애플리케이션에서 단일 지표를 모니터링하려는 경우 또는 애플리케이션이 여러 지표를 동시에 내보내지 않는 경우에 권장됩니다.
다중 측정 레코드
다중 측정 레코드를 사용하면 테이블 행당 하나의 측정값을 저장하는 대신 단일 테이블 행에 여러 측정값을 저장할 수 있습니다. 따라서 다중 측정 레코드를 사용하면 최소한의 변경으로 관계형 데이터베이스에서 Amazon Timestream for Live Analytics로 기존 데이터를 마이그레이션할 수 있습니다.
또한 단일 측정 레코드보다 더 많은 데이터를 한 번의 쓰기 요청으로 배치 처리할 수 있습니다. 이를 통해 데이터 쓰기 처리량과 성능이 향상되고 데이터 쓰기 비용도 절감됩니다. 이는 쓰기 요청에서 더 많은 데이터를 배치 처리하면 Amazon Timestream for Live Analytics가 단일 쓰기 요청(해당하는 경우)에서 더 반복 가능한 데이터를 식별하고 반복된 데이터에 대해 한 번만 청구할 수 있기 때문입니다.
다중 측정 레코드
다중 측정 레코드를 사용하면 시계열 데이터를 메모리 및 마그네틱 스토어에 더 압축된 형식으로 저장할 수 있으므로 데이터 스토리지 비용을 절감하는 데 도움이 됩니다. 또한 압축 데이터 스토리지는 데이터 검색을 위한 쿼리 작성을 단순화하고, 쿼리 성능을 향상시키며, 쿼리 비용을 낮춥니다.
또한 다중 측정 레코드는 시계열 레코드에 둘 이상의 타임스탬프를 저장하기 위한 TIMESTAMP 데이터 유형도 지원합니다. 다중 측정 레코드의 TIMESTAMP 속성은 향후 또는 과거의 타임스탬프를 지원합니다. 따라서 다중 측정 레코드는 성능, 비용 및 쿼리 단순성을 개선하고 다양한 유형의 상관관계가 있는 측정값을 저장하는 데 더 큰 유연성을 제공합니다.
이점
다음은 다중 측정 레코드 사용에 따른 이점입니다.
-
성능 및 비용 - 다중 측정 레코드를 사용하면 단일 쓰기 요청으로 여러 시계열 측정값을 작성할 수 있습니다. 이렇게 하면 쓰기 처리량이 증가하고 쓰기 비용도 절감됩니다. 다중 측정 레코드를 사용하면 데이터를 더 압축된 형식으로 저장할 수 있으므로 데이터 스토리지 비용을 절감하는 데 도움이 됩니다. 다중 측정 레코드의 압축된 데이터 스토리지로 인해 쿼리에서 처리되는 데이터가 줄어듭니다. 이는 전체 쿼리 성능을 개선하고 쿼리 비용을 낮추는 데 도움이 되도록 설계되었습니다.
-
쿼리 단순성 - 다중 측정 레코드를 사용하면 동일한 타임스탬프로 여러 측정값을 읽기 위해 쿼리에 복잡한 일반 테이블 표현식(CTE)을 작성할 필요가 없습니다. 이는 측정값이 단일 테이블 행에 열로 저장되기 때문입니다. 따라서 다중 측정 레코드를 사용하면 더 단순한 쿼리를 작성할 수 있습니다.
-
데이터 모델링 유연성 - TIMESTAMP 데이터 유형과 다중 측정 레코드를 사용하여 Timestream for Live Analytics에 향후 타임스탬프를 작성할 수 있습니다. 다중 측정 레코드는 레코드의 시간 필드 외에도 TIMESTAMP 데이터 유형의 여러 속성을 가질 수 있습니다. 다중 측정 레코드의 TIMESTAMP 속성은 향후 또는 과거의 타임스탬프를 가질 수 있으며 Timestream for Live Analytics가 다중 측정 레코드의 TIMESTAMP 유형 값을 인덱싱하지 않는다는 점을 제외하면 시간 필드처럼 동작합니다.
사용 사례
특정 시간에 동일한 디바이스에서 여러 측정값을 생성하는 모든 시계열 애플리케이션에 다중 측정 레코드를 사용할 수 있습니다. 다음은 몇 가지 예제 애플리케이션입니다.
-
특정 시간에 수백 개의 지표를 생성하는 비디오 스트리밍 플랫폼
-
혈중 산소 농도, 심박수, 맥박 등의 측정값을 생성하는 의료 기기
-
지표, 온도 및 기상 센서를 생성하는 석유 시추 장비와 같은 산업용 장비
-
하나 이상의 마이크로서비스로 설계된 기타 애플리케이션
예제: 비디오 스트리밍 애플리케이션의 성능 및 상태 모니터링
200개의 EC2 인스턴스에서 실행 중인 비디오 스트리밍 애플리케이션을 생각해 보세요. Amazon Timestream for Live Analytics를 사용하여 애플리케이션에서 내보내는 지표를 저장하고 분석하면 애플리케이션의 성능과 상태를 이해하고, 이상을 빠르게 식별하고, 문제를 해결하고, 최적화 기회를 발견할 수 있습니다.
단일 측정 레코드와 다중 측정 레코드를 사용하여 이 시나리오를 모델링한 다음 두 접근 방식을 비교하고 대비합니다. 각 접근 방식에 대해 다음과 같이 가정합니다.
-
각 EC2 인스턴스는 초당 4개의 측정값(video_startup_time, rebuffering_ratio, video_playback_failures, average_frame_rate)과 4개의 차원(device_id, device_type, os_version, region)을 내보냅니다.
-
메모리 스토어에 6시간 분량의 데이터를 저장하고, 마그네틱 스토어에 6개월 분량의 데이터를 저장하려고 합니다.
-
이상을 식별하기 위해 지난 몇 분 동안 비정상적인 활동을 식별하기 위해 1분마다 실행되는 쿼리를 10개 설정했습니다. 또한 애플리케이션을 효과적으로 모니터링할 수 있도록 지난 6시간의 데이터를 표시하는 위젯이 8개 포함된 대시보드를 구축했습니다. 이 대시보드는 지정된 시간에 5명의 사용자가 액세스하며 1시간마다 자동으로 새로 고쳐집니다.
단일 측정 레코드 사용
데이터 모델링: 단일 측정 레코드를 사용하면 4개의 측정값(video_startup_time, rebuffering_ratio, video_playback_failures, average_frame_rate) 각각에 대해 하나의 레코드를 생성합니다. 각 레코드에는 4개의 차원(device_id, device_type, os_version, region)과 타임스탬프가 있습니다.
쓰기: Amazon Timestream for Live Analytics에 데이터를 쓸 때 레코드는 다음과 같이 구성됩니다.
public void writeRecords() { System.out.println("Writing records"); // Specify repeated values for all records List<Record> records = new ArrayList<>(); final long time = System.currentTimeMillis(); List<Dimension> dimensions = new ArrayList<>(); final Dimension device_id = new Dimension().withName("device_id").withValue("12345678"); final Dimension device_type = new Dimension().withName("device_type").withValue("iPhone 11"); final Dimension os_version = new Dimension().withName("os_version").withValue("14.8"); final Dimension region = new Dimension().withName("region").withValue("us-east-1"); dimensions.add(device_id); dimensions.add(device_type); dimensions.add(os_version); dimensions.add(region); Record videoStartupTime = new Record() .withDimensions(dimensions) .withMeasureName("video_startup_time") .withMeasureValue("200") .withMeasureValueType(MeasureValueType.BIGINT) .withTime(String.valueOf(time)); Record rebufferingRatio = new Record() .withDimensions(dimensions) .withMeasureName("rebuffering_ratio") .withMeasureValue("0.5") .withMeasureValueType(MeasureValueType.DOUBLE) .withTime(String.valueOf(time)); Record videoPlaybackFailures = new Record() .withDimensions(dimensions) .withMeasureName("video_playback_failures") .withMeasureValue("0") .withMeasureValueType(MeasureValueType.BIGINT) .withTime(String.valueOf(time)); Record averageFrameRate = new Record() .withDimensions(dimensions) .withMeasureName("average_frame_rate") .withMeasureValue("0.5") .withMeasureValueType(MeasureValueType.DOUBLE) .withTime(String.valueOf(time)); records.add(videoStartupTime); records.add(rebufferingRatio); records.add(videoPlaybackFailures); records.add(averageFrameRate); WriteRecordsRequest writeRecordsRequest = new WriteRecordsRequest() .withDatabaseName(DATABASE_NAME) .withTableName(TABLE_NAME) .withRecords(records); try { WriteRecordsResult writeRecordsResult = amazonTimestreamWrite.writeRecords(writeRecordsRequest); System.out.println("WriteRecords Status: " + writeRecordsResult.getSdkHttpMetadata().getHttpStatusCode()); } catch (RejectedRecordsException e) { System.out.println("RejectedRecords: " + e); for (RejectedRecord rejectedRecord : e.getRejectedRecords()) { System.out.println("Rejected Index " + rejectedRecord.getRecordIndex() + ": " + rejectedRecord.getReason()); } System.out.println("Other records were written successfully. "); } catch (Exception e) { System.out.println("Error: " + e); } }
단일 측정 레코드를 저장할 때 데이터는 다음과 같이 논리적으로 표현됩니다.
| 시간 | device_id | device_type | os_version | 리전 | measure_name | measure_value::bigint | measure_value::double |
|---|---|---|---|---|---|---|---|
|
2021-09-07 21:48:44 .000000000 |
12345678 |
iPhone 11 |
14.8 |
us-east-1 |
video_startup_time |
200 |
|
|
2021-09-07 21:48:44 .000000000 |
12345678 |
iPhone 11 |
14.8 |
us-east-1 |
rebuffering_ratio |
0.5 |
|
|
2021-09-07 21:48:44 .000000000 |
12345678 |
iPhone 11 |
14.8 |
us-east-1 |
video_playback_failures |
0 |
|
|
2021-09-07 21:48:44 .000000000 |
12345678 |
iPhone 11 |
14.8 |
us-east-1 |
average_frame_rate |
0.85 |
|
|
2021-09-07 21:53:44 .000000000 |
12345678 |
iPhone 11 |
14.8 |
us-east-1 |
video_startup_time |
500 |
|
|
2021-09-07 21:53:44 .000000000 |
12345678 |
iPhone 11 |
14.8 |
us-east-1 |
rebuffering_ratio |
1.5 |
|
|
2021-09-07 21:53:44 .000000000 |
12345678 |
iPhone 11 |
14.8 |
us-east-1 |
video_playback_failures |
10 |
|
|
2021-09-07 21:53:44 .000000000 |
12345678 |
iPhone 11 |
14.8 |
us-east-1 |
average_frame_rate |
0.2 |
쿼리: 다음과 같이 지난 15분 동안 수신한 타임스탬프가 동일한 모든 데이터 포인트를 검색하는 쿼리를 작성할 수 있습니다.
with cte_video_startup_time as ( SELECT time, device_id, device_type, os_version, region, measure_value::bigint as video_startup_time FROM table where time >= ago(15m) and measure_name=”video_startup_time”), cte_rebuffering_ratio as ( SELECT time, device_id, device_type, os_version, region, measure_value::double as rebuffering_ratio FROM table where time >= ago(15m) and measure_name=”rebuffering_ratio”), cte_video_playback_failures as ( SELECT time, device_id, device_type, os_version, region, measure_value::bigint as video_playback_failures FROM table where time >= ago(15m) and measure_name=”video_playback_failures”), cte_average_frame_rate as ( SELECT time, device_id, device_type, os_version, region, measure_value::double as average_frame_rate FROM table where time >= ago(15m) and measure_name=”average_frame_rate”) SELECT a.time, a.device_id, a.os_version, a.region, a.video_startup_time, b.rebuffering_ratio, c.video_playback_failures, d.average_frame_rate FROM cte_video_startup_time a, cte_buffering_ratio b, cte_video_playback_failures c, cte_average_frame_rate d WHERE a.time = b.time AND a.device_id = b.device_id AND a.os_version = b.os_version AND a.region=b.region AND a.time = c.time AND a.device_id = c.device_id AND a.os_version = c.os_version AND a.region=c.region AND a.time = d.time AND a.device_id = d.device_id AND a.os_version = d.os_version AND a.region=d.region
워크로드 비용: 이 워크로드의 비용은 단일 측정 레코드를 기준으로 월 373.23 USD로 추정됩니다.
다중 측정 레코드 사용
데이터 모델링: 다중 측정 레코드를 사용하여 4개의 측정(video startup time, rebuffering ratio, video playback failures, average frame rate), 4개의 차원(device_id, device_type, os_version, region), 타임스탬프를 모두 포함하는 하나의 레코드를 생성하겠습니다.
쓰기: Amazon Timestream for Live Analytics에 데이터를 쓸 때 레코드는 다음과 같이 구성됩니다.
public void writeRecords() { System.out.println("Writing records"); // Specify repeated values for all records List<Record> records = new ArrayList<>(); final long time = System.currentTimeMillis(); List<Dimension> dimensions = new ArrayList<>(); final Dimension device_id = new Dimension().withName("device_id").withValue("12345678"); final Dimension device_type = new Dimension().withName("device_type").withValue("iPhone 11"); final Dimension os_version = new Dimension().withName("os_version").withValue("14.8"); final Dimension region = new Dimension().withName("region").withValue("us-east-1"); dimensions.add(device_id); dimensions.add(device_type); dimensions.add(os_version); dimensions.add(region); Record videoMetrics = new Record() .withDimensions(dimensions) .withMeasureName("video_metrics") .withTime(String.valueOf(time)); .withMeasureValueType(MeasureValueType.MULTI) .withMeasureValues( new MeasureValue() .withName("video_startup_time") .withValue("0") .withValueType(MeasureValueType.BIGINT), new MeasureValue() .withName("rebuffering_ratio") .withValue("0.5") .withType(MeasureValueType.DOUBLE), new MeasureValue() .withName("video_playback_failures") .withValue("0") .withValueType(MeasureValueType.BIGINT), new MeasureValue() .withName("average_frame_rate") .withValue("0.5") .withValueType(MeasureValueType.DOUBLE)) records.add(videoMetrics); WriteRecordsRequest writeRecordsRequest = new WriteRecordsRequest() .withDatabaseName(DATABASE_NAME) .withTableName(TABLE_NAME) .withRecords(records); try { WriteRecordsResult writeRecordsResult = amazonTimestreamWrite.writeRecords(writeRecordsRequest); System.out.println("WriteRecords Status: " + writeRecordsResult.getSdkHttpMetadata().getHttpStatusCode()); } catch (RejectedRecordsException e) { System.out.println("RejectedRecords: " + e); for (RejectedRecord rejectedRecord : e.getRejectedRecords()) { System.out.println("Rejected Index " + rejectedRecord.getRecordIndex() + ": " + rejectedRecord.getReason()); } System.out.println("Other records were written successfully. "); } catch (Exception e) { System.out.println("Error: " + e); } }
다중 측정 레코드를 저장할 때 데이터는 다음과 같이 논리적으로 표현됩니다.
| 시간 | device_id | device_type | os_version | 리전 | measure_name | video_startup_time | rebuffering_ratio | video_ playback_failures | average_frame_rate |
|---|---|---|---|---|---|---|---|---|---|
|
2021-09-07 21:48:44 .000000000 |
12345678 |
iPhone 11 |
14.8 |
us-east-1 |
video_metrics |
200 |
0.5 |
0 |
0.85 |
|
2021-09-07 21:53:44 .000000000 |
12345678 |
iPhone 11 |
14.8 |
us-east-1 |
video_metrics |
500 |
1.5 |
10 |
0.2 |
쿼리: 다음과 같이 지난 15분 동안 수신한 타임스탬프가 동일한 모든 데이터 포인트를 검색하는 쿼리를 작성할 수 있습니다.
SELECT time, device_id, device_type, os_version, region, video_startup_time, rebuffering_ratio, video_playback_failures, average_frame_rate FROM table where time >= ago(15m)
워크로드 비용: 워크로드의 비용은 다중 측정 레코드를 기준으로 127.43 USD로 추정됩니다.
참고
이 경우 다중 측정 레코드를 사용하면 전체 예상 월별 지출이 2.5배 감소하며, 데이터 쓰기 비용은 3.3배, 스토리지 비용은 3.3배, 쿼리 비용은 1.2배 감소합니다.
과거 또는 미래에 존재하는 타임스탬프를 사용하여 데이터 쓰기
Timestream for Live Analytics는 몇 가지 메커니즘을 통해 메모리 스토어 보존 기간 외부에 있는 타임스탬프로 데이터를 쓸 수 있는 기능을 제공합니다.
-
마그네틱 스토어 쓰기 - 마그네틱 스토어 쓰기를 통해 지연 도착 데이터를 마그네틱 스토어에 직접 쓸 수 있습니다. 마그네틱 스토어 쓰기를 사용하려면 먼저 테이블에 대해 마그네틱 스토어 쓰기를 활성화해야 합니다. 그런 다음 메모리 스토어에 데이터를 쓰는 데 사용된 것과 동일한 메커니즘을 사용하여 테이블에 데이터를 수집할 수 있습니다. Amazon Timestream for Live Analytics는 타임스탬프에 따라 마그네틱 스토어에 데이터를 자동으로 작성합니다.
참고
마그네틱 스토어의 쓰기-읽기 지연 시간은 최대 6시간에 달할 수 있는 반면, 메모리 스토어에 데이터를 쓰는 경우 쓰기-읽기 지연 시간은 1초 미만입니다.
-
측정값에 대한 TIMESTAMP 데이터 유형 - TIMESTAMP 데이터 유형을 사용하여 과거, 현재 또는 미래의 데이터를 저장할 수 있습니다. 다중 측정 레코드는 레코드의 시간 필드 외에도 TIMESTAMP 데이터 유형의 여러 속성을 가질 수 있습니다. 다중 측정 레코드의 TIMESTAMP 속성은 향후 또는 과거의 타임스탬프를 가질 수 있으며 Timestream for Live Analytics가 다중 측정 레코드의 TIMESTAMP 유형 값을 인덱싱하지 않는다는 점을 제외하면 시간 필드처럼 동작합니다.
참고
TIMESTAMP 데이터 유형은 다중 측정 레코드에 대해서만 지원됩니다.
읽기의 최종 일관성
Timestream for Live Analytics는 읽기 작업에 대해 최종 일관성 시맨틱을 지원합니다. 즉, Timestream for Live Analytics에 데이터 배치를 작성한 직후에 데이터를 쿼리하면 쿼리 결과에 최근에 완료된 쓰기 작업의 결과가 반영되지 않을 수 있습니다. 잠시 후 이 쿼리 요청을 반복하면 결과가 최신 데이터를 반환합니다.