오늘 RedisTimeSeries 1.6의 일반 공급을 발표하게 되어 기쁩니다. 이 블로그 게시물은 현재 사용할 수 있는 주요 새 기능에 대해 자세히 설명합니다.
RedisTimeSeries 정보
RedisTimeSeries는 Redis용 고성능, 메모리 우선 시계열 데이터 구조입니다. RedisTimeSeries는 시계열 다중 테넌시를 지원하며(많은 시계열을 동시에 보유할 수 있음) 이러한 시계열에 동시에 액세스하는 여러 클라이언트에 서비스를 제공할 수 있습니다. 이제 Redis Stack의 일부로도 사용할 수 있습니다.
RedisTimeSeries 1.6의 주요 새로운 기능
- 향상된 쿼리 기능
- 교차 시계열 집계
- 타임스탬프 또는 샘플 값으로 결과 필터링
- 검색할 라벨 선택
- 집계 버킷 정렬
샘플 삭제
- 향상된 성능
- 키스페이스 알림
- Redis on Flash에 대한 Redis Enterprise 지원
향상된 쿼리 기능
교차 시계열 집계
버전 1.6 이전에는 한 가지 유형의 집계만 가능했습니다.
- 단일 시계열의 경우 –
일정 기간 동안 샘플을 집계합니다.
버전 1.6부터 두 가지 새로운 집계 유형이 가능합니다.
- 여러 시계열의 경우 –
시계열 세트에 대해 동일한 타임스탬프로 샘플을 집계합니다. - 여러 시계열의 경우 –
먼저 등주기적 기간 동안 각 시계열을 집계한 다음 각 기간에 대해 시계열 집합에 대해 결과를 집계합니다.
첫 번째 새로운 집계 유형을 보여드리겠습니다. 먼저 2개의 주식을 만들고 3개의 다른 타임스탬프에 가격을 추가해 보겠습니다.
TS.CREATE stock:A LABELS type stock name A
TS.CREATE stock:B LABELS type stock name B
TS.MADD stock:A 1000 100 stock:A 1010 110 stock:A 1020 120
TS.MADD stock:B 1000 120 stock:B 1010 110 stock:B 1020 100
이제 타임스탬프당 최대 주가를 검색할 수 있습니다.
redis:6379> TS.MRANGE - + WITHLABELS FILTER type=stock GROUPBY type
REDUCE max
1) 1) "type=stock" |
FILTER type=stock절은 주가를 나타내는 단일 시계열만 남깁니다.
GROUPBY type REDUCE
max절은 시계열을 동일한 유형 값을 가진 그룹으로 분할한 다음 각 타임스탬프에 대해 최대 집계자를 사용하여 동일한 유형 값을 공유하는 모든 시리즈를 집계합니다.
FILTER label=valueTS.MRANGE 및 TS.MREVRANGE에서 지원됩니다. 추가 필터링 절도 지원됩니다(문서 참조).
다음으로 두 번째 새로운 집계 유형을 보여드리겠습니다.
먼저 두 개의 주식을 만들고 9개의 다른 타임스탬프에 가격을 추가해 보겠습니다.
TS.CREATE stock:A LABELS type stock name A
TS.CREATE stock:B LABELS type stock name B
TS.MADD stock:A 1000 100 stock:A 1010 110 stock:A 1020 120
TS.MADD stock:B 1000 120 stock:B 1010 110 stock:B 1020 100
TS.MADD stock:A 2000 200 stock:A 2010 210 stock:A 2020 220
TS.MADD stock:B 2000 220 stock:B 2010 210 stock:B 2020 200
TS.MADD stock:A 3000 300 stock:A 3010 310 stock:A 3020 320
TS.MADD stock:B 3000 320 stock:B 3010 310 stock:B 3020 300
이제 각 주식에 대해 1000밀리초 시간 프레임당 평균 주가를 계산한 다음
해당 기간의 최대 평균:
redis:6379> TS.MRANGE - + WITHLABELS AGGREGATION avg 1000 FILTER type=stock GROUPBY type REDUCE max
1) 1) "type=stock" |
GROUPBY label REDUCE reducerTS.MRANGE 및 TS.MREVRANGE에서 지원됩니다.
감속기는 합계, 최소 또는 최대가 될 수 있습니다.
타임스탬프 또는 샘플 값으로 결과 필터링
TS.RANGE, TS.REVRANGE, TS.MRANGE 및 TS.MREVRANGE를 사용할 때 항상 모든 샘플을 검색하거나 집계하고 싶지는 않습니다.
[FILTER_BY_TS ts...]사용 중 특정 타임스탬프 목록으로 샘플을 필터링할 수 있습니다.
[FILTER_BY_VALUE min max]사용 최소값과 최대값으로 샘플을 필터링할 수 있습니다.
예를 들어, 정상 값이 -100에서 100 사이이지만 값 9999가 잘못된 측정의 표시로 사용되는 샘플링된 측정항목을 고려하십시오.
TS.CREATE temp:TLV LABELS type temp location TLV
TS.MADD temp:TLV 1000 30 temp:TLV 1010 35 temp:TLV 1020 9999
temp:TLV 1030 40
이제 모든 값을 검색하고 범위를 벗어난 값은 무시합니다.
TS.RANGE temp:TLV - + FILTER_BY_VALUE -100 100
범위를 벗어난 값은 무시하고 평균 값도 검색해 보겠습니다.
TS.RANGE temp:TLV - + FILTER_BY_VALUE -100 100 AGGREGATION avg 1000
검색할 라벨 선택
TS.MRANGE, TS.MREVRANGE 및 TS.MGET을 사용할 때 일치하는 시계열과 연결된 모든 레이블의 값이 항상 필요한 것은 아니며 선택한 레이블의 값만 필요합니다.
SELECTED_LABELS검색할 레이블을 선택할 수 있습니다. 다음 시계열 및 데이터가 주어지면:
TS.CREATE temp:TLV LABELS type temp location TLV
TS.MADD temp:TLV 1000 30 temp:TLV 1010 35 temp:TLV 1020 9999
temp:TLV 1030 40
일치하는 시계열과 관련된 모든 레이블을 얻으려면
WITHLABELS를 사용합니다. :
redis:6379> TS.MGET WITHLABELS FILTER 유형=temp
1) 1) "temp:TLV" |
그러나 위치만 원한다고 가정하면
SELECTED_LABELS:를 사용할 수 있습니다.
redis:6379> TS.MGET SELECTED_LABELS location FILTER type=temp
1) 1) "temp:TLV" |
집계 버킷 정렬
평균 일일 온도를 받고 싶지만 '하루'는 06:00에 시작한다고 가정합니다. 이 경우 간격을 00:00 ~ 23:59가 아닌 06:00 ~ 05:59로 정렬하고 싶습니다.
TS.RANGE, TS.REVRANGE, TS.MRANGE 및 TS.MREVRANGE를 사용할 때 이제
ALIGN을 사용하여 요청된 시작, 종료 또는 특정 타임스탬프와 집계 버킷을 정렬할 수 있습니다. .
정렬을 보여주기 위해 다음 데이터를 추가해 보겠습니다.
TS.CREATE stock:A LABELS type stock name A
TS.MADD stock:A 1000 100 stock:A 1010 110 stock:A 1020 120
TS.MADD stock:A 1030 200 stock:A 1040 210 stock:A 1050 220
TS.MADD stock:A 1060 300 stock:A 1070 310 stock:A 1080 320
다음으로
ALIGN을 사용하지 않고 집계합니다. (기본 정렬을 의미합니다:0)
redis:6379> TS.RANGE stock:A - + AGGREGATION min 20
1) 1) (integer) 1000 |
이제
ALIGN으로 :
redis:6379> TS.RANGE 스톡:A – + ALIGN 10 AGGREGATION min 20
1) 1) (integer) 990 |
ALIGN설정 10으로 설정하면 버킷이 10시에 시작해야 하며 모든 버킷(각각 20밀리초 지속 시간)이 그에 따라 정렬됩니다.
범위 쿼리의 시작 타임스탬프가 명시적으로 명시된 경우('-' 아님), align을 '-' 또는 '
start로 설정하여 ALIGN을 해당 시간으로 설정할 수도 있습니다. '.
redis:6379> TS.RANGE 스톡:A 5 + ALIGN – 총합 최소 20
1) 1) (integer) 985 |
마찬가지로 범위 쿼리의 종료 타임스탬프가 명시적으로 명시되어 있으면('+'가 아님)
ALIGN을 설정할 수도 있습니다. align을 '+' 또는 'end'로 설정하여 그 시간까지.
샘플 삭제
TS.DEL을 사용하면 두 개의 타임스탬프 내에서 주어진 시계열의 샘플을 삭제할 수 있습니다.
예:
TS.DEL stock:A 1020 10501020에서 1050(포함) 사이의 타임스탬프가 있는 모든 샘플을 삭제합니다. 반환된 값은 삭제된 샘플 수입니다.
향상된 성능
많은 최적화가 구현되었으며 이제 대부분의 쿼리가 RedisTimeSeries 1.4에 비해 훨씬 빠르게 실행됩니다.
다음 표는 TSBS 쿼리(여기에서 설명)에 대해 단일 노드에서 달성할 수 있는 초당 쿼리 수를 자세히 설명합니다. 이 표에는 버전 1.4에서 지원되는 TSBS 쿼리의 하위 집합만 나열되어 있습니다.
쿼리 유형 | 1.4 쿼리/초 | v1.6 쿼리/초 | % 변화(높을수록 좋음) |
tsbs-scale100_cpu-max-all-1 | 1388 | 1500 | 8.07% |
tsbs-scale100_double-groupby-1 | 100 | 108 | 8.00% |
tsbs-scale100_groupby-orderby-limit | 793 | 1282 | 61.66% |
tsbs-scale100_single-groupby-1-1-1 | 13448 | 21347 | 58.74% |
tsbs-scale100_single-groupby-1-1-12 | 2383 | 3921 | 64.54% |
8%에서 65%의 개선을 관찰할 수 있습니다. RedisTimeSeries 1.4와 비교하여 초당 쿼리 수입니다.
키스페이스 알림
Redis Keyspace 알림을 통해 Redis 클라이언트는 어떤 방식으로든 Redis 데이터 세트에 영향을 미치는 이벤트를 수신하기 위해 Pub/Sub 채널을 구독할 수 있습니다. 예를 들어 RedisGears를 사용하여 이러한 알림으로 기능을 트리거할 수 있습니다.
예를 들어, 샘플 스트림을 수신하고 실시간 예측 및 경고를 생성하는 시계열 예측기 또는 이상 감지기를 구현하는 것이 가능합니다.
예를 들어 다양한 RedisTimeSeries 명령을 구독하고 이벤트를 생성하는 이 테스트를 확인하십시오.
Redis on Flash에 대한 Redis Enterprise 지원
버전 1.6부터 RedisTimeSeries는 Redis on Flash에서 실행할 수 있지만 RoF는 키 수준에서 구현된다는 점에 유의해야 합니다. 즉, 전체 시계열의 값은 FLASH 또는 RAM에 있습니다.
RedisTimeSeries는 Redis 스택의 일부입니다.
RedisTimeSeries는 이제 Redis 스택의 일부입니다. macOS, Ubuntu 또는 Redhat용 최신 Redis Stack Server 바이너리를 다운로드하거나 Docker, Homebrew 또는 Linux와 함께 설치할 수 있습니다.
RedisInsight로 시계열 데이터 시각화
RedisInsight는 Redis 또는 Redis Stack을 사용하여 개발하는 동안 RedisTimeSeries에서 데이터를 탐색할 수 있는 탁월한 방법을 제공하는 개발자용 시각적 도구입니다.
시계열 쿼리를 실행하고 그래픽 사용자 인터페이스에서 직접 결과를 관찰할 수 있습니다. RedisInsight는 이제 RedisTimeSeries 쿼리 결과를 시각화할 수 있습니다.
또한 RedisInsight에는 대화식으로 RedisTimeSeries를 학습하기 위한 빠른 가이드와 자습서가 포함되어 있습니다.
redis.io 및 developer.redis.com의 RedisTimeSeries에 대해 자세히 알아보세요.