Computer >> Máy Tính >  >> Lập trình >> Redis

RedisTimeSeries 1.6 đã ra mắt!

Hôm nay, chúng tôi vui mừng thông báo về sự sẵn có chung của RedisTimeSeries 1.6. Bài đăng trên blog này nêu chi tiết về các tính năng mới chính hiện đã có sẵn.

Giới thiệu về RedisTimeSeries

RedisTimeSeries là cấu trúc dữ liệu chuỗi thời gian đầu tiên, hiệu suất cao dành cho Redis. RedisTimeSeries hỗ trợ thuê nhiều chuỗi thời gian (nó có thể chứa nhiều chuỗi thời gian đồng thời) và có thể phục vụ nhiều khách hàng truy cập các chuỗi thời gian này đồng thời. Nó hiện cũng có sẵn như một phần của Redis Stack.

Các tính năng mới chính trong RedisTimeSeries 1.6

  • Khả năng truy vấn nâng cao
    • Tổng hợp chuỗi thời gian chéo
    • Lọc kết quả theo dấu thời gian hoặc giá trị mẫu
    • Chọn nhãn để truy xuất
    • Căn chỉnh các nhóm tổng hợp
      Đang xóa mẫu
  • Hiệu suất được cải thiện
  • Thông báo về keyspace
  • Hỗ trợ Redis Enterprise cho Redis trên Flash

Khả năng truy vấn nâng cao

Tổng hợp chuỗi thời gian chéo

Trước phiên bản 1.6, chỉ có thể có một kiểu kết hợp:

  • Đối với một chuỗi thời gian -
    tổng hợp các mẫu trong các khung thời gian đều nhau.

Kể từ phiên bản 1.6, có thể có hai kiểu tổng hợp mới:

  • Đối với nhiều chuỗi thời gian -
    tổng hợp các mẫu có dấu thời gian bằng nhau trong một tập hợp chuỗi thời gian.
  • Đối với nhiều chuỗi thời gian -
    Trước tiên, hãy tổng hợp từng chuỗi thời gian theo các khung thời gian tương đương, sau đó, đối với từng khung thời gian, hãy tổng hợp kết quả trên tập hợp các chuỗi thời gian đó.

Hãy chứng minh kiểu tổng hợp mới đầu tiên. Trước tiên, hãy tạo hai cổ phiếu và thêm giá của chúng ở 3 dấu thời gian khác nhau:

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

Bây giờ, chúng tôi có thể truy xuất giá cổ phiếu tối đa trên mỗi dấu thời gian:

redis:6379> TS.MRANGE - + WITHLABELS FILTER type=stock GROUPBY type 
REDUCE max

1) 1) "type=stock"
   2) 1) 1) "type"
         2) "stock"
      2) 1) "__reducer__"
         2) "max"
      3) 1) "__source__"
         2) "stock:A,stock:B"
   3) 1) 1) (integer) 1000
         2) 120
      2) 1) (integer) 1010
         2) 110
      3) 1) (integer) 1020
         2) 120

FILTER type=stock
mệnh đề chỉ cho chúng ta một chuỗi thời gian duy nhất đại diện cho giá cổ phiếu. Loại
GROUPBY type REDUCE
max
mệnh đề chia chuỗi thời gian thành các nhóm có giá trị kiểu giống hệt nhau và sau đó, đối với mỗi dấu thời gian, tổng hợp tất cả các chuỗi có cùng giá trị kiểu bằng cách sử dụng trình tổng hợp tối đa.

FILTER label=value
được hỗ trợ bởi TS.MRANGE và TS.MREVRANGE. Các điều khoản lọc bổ sung cũng được hỗ trợ (xem tài liệu).

Tiếp theo, chúng tôi sẽ chứng minh kiểu tổng hợp mới thứ hai:

Đầu tiên, hãy tạo hai cổ phiếu và thêm giá của chúng ở 9 dấu thời gian khác nhau.

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

Bây giờ, đối với mỗi cổ phiếu, chúng tôi sẽ tính giá cổ phiếu trung bình trên khung thời gian 1000 mili giây và sau đó truy xuất cổ phiếu bằng

trung bình tối đa cho khung thời gian đó:

redis:6379> TS.MRANGE - + WITHLABELS AGGREGATION avg 1000 FILTER type=stock GROUPBY type REDUCE max

1) 1) "type=stock"
   2) 1) 1) "type"
         2) "stock"
      2) 1) "__reducer__"
         2) "max"
      3) 1) "__source__"
         2) "stock:A,stock:B"
   3) 1) 1) (integer) 1000
         2) 110
      2) 1) (integer) 2000
         2) 210
      3) 1) (integer) 3000
         2) 310

GROUPBY label REDUCE reducer
được hỗ trợ bởi TS.MRANGE và TS.MREVRANGE.

Bộ giảm tốc có thể là tổng, tối thiểu hoặc tối đa.

Lọc kết quả theo dấu thời gian hoặc giá trị mẫu

Khi sử dụng TS.RANGE, TS.REVRANGE, TS.MRANGE và TS.MREVRANGE, không phải lúc nào bạn cũng muốn truy xuất hoặc tổng hợp tất cả các mẫu.

Sử dụng

[FILTER_BY_TS ts...]
bạn có thể lọc mẫu theo danh sách các dấu thời gian cụ thể.

Sử dụng

[FILTER_BY_VALUE min max]
bạn có thể lọc mẫu theo các giá trị tối thiểu và tối đa.

Ví dụ:hãy xem xét một số liệu được lấy mẫu trong đó giá trị bình thường nằm trong khoảng -100 đến 100, nhưng giá trị 9999 được sử dụng như một dấu hiệu của phép đo kém.

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

Bây giờ, hãy truy xuất tất cả các giá trị, bỏ qua các giá trị nằm ngoài phạm vi:

TS.RANGE temp:TLV - + FILTER_BY_VALUE -100 100

Cũng hãy truy xuất giá trị trung bình, bỏ qua các giá trị nằm ngoài phạm vi:

TS.RANGE temp:TLV - + FILTER_BY_VALUE -100 100 AGGREGATION avg 1000

Chọn nhãn để truy xuất

Khi sử dụng TS.MRANGE, TS.MREVRANGE và TS.MGET, chúng tôi không phải lúc nào cũng muốn các giá trị của tất cả các nhãn được liên kết với chuỗi thời gian phù hợp mà chỉ muốn các giá trị của các nhãn đã chọn.

SELECTED_LABELS
cho phép lựa chọn các nhãn cần truy xuất. Cho chuỗi thời gian và dữ liệu sau:

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

Để nhận tất cả các nhãn được liên kết với chuỗi thời gian phù hợp, chúng tôi sẽ sử dụng

WITHLABELS
:

redis:6379> TS.MGET WITHLABELS FILTER type =temp

1) 1) "temp:TLV"
   2) 1) 1) "type"
         2) "temp"
      2) 1) "location"
         2) "TLV"
   3) 1) (integer) 1030
      2) 40

Nhưng giả sử chúng ta chỉ muốn vị trí, chúng ta có thể sử dụng

SELECTED_LABELS:

redis:6379> TS.MGET SELECTED_LABELS location FILTER type=temp

1) 1) "temp:TLV"
   2) 1) 1) "location"
         2) "TLV"
   3) 1) (integer) 1030
      2) 40

Căn chỉnh các nhóm tổng hợp

Giả sử chúng ta muốn nhận nhiệt độ trung bình hàng ngày, nhưng 'ngày' của chúng ta bắt đầu lúc 06:00. Trong trường hợp này, chúng tôi muốn ĐĂNG KÝ các khoảng thời gian thành 06:00 đến 05:59, thay vì 00:00 đến 23:59.

Khi sử dụng TS.RANGE, TS.REVRANGE, TS.MRANGE và TS.MREVRANGE, giờ đây có thể căn chỉnh các nhóm tổng hợp với dấu thời gian bắt đầu, kết thúc hoặc cụ thể được yêu cầu - sử dụng

ALIGN
.

Để chứng minh sự liên kết, hãy thêm dữ liệu sau:

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

Tiếp theo, chúng tôi sẽ tổng hợp mà không sử dụng

ALIGN
(có nghĩa là căn chỉnh mặc định:0)

redis:6379> TS.RANGE stock:A - + AGGREGATION min 20

1) 1) (integer) 1000
   2) 100
2) 1) (integer) 1020
   2) 120
3) 1) (integer) 1040
   2) 210
4) 1) (integer) 1060
   2) 300
5) 1) (integer) 1080
   2) 320

Và bây giờ với

ALIGN
:

redis:6379> TS.RANGE stock:A - + ALIGN 10 AGGREGATION tối thiểu 20

1) 1) (integer) 990
   2) 100
2) 1) (integer) 1010
   2) 110
3) 1) (integer) 1030
   2) 200
4) 1) (integer) 1050
   2) 220
5) 1) (integer) 1070
   2) 310

Cài đặt

ALIGN
thành 10 có nghĩa là một nhóm sẽ bắt đầu ở thời điểm 10 và tất cả các nhóm (mỗi nhóm có thời lượng 20 mili giây) được căn chỉnh cho phù hợp.

Khi dấu thời gian bắt đầu cho truy vấn phạm vi được nêu rõ ràng (không phải ‘-‘), bạn cũng có thể đặt ALIGN cho thời gian đó bằng cách đặt căn chỉnh thành ‘-‘ hoặc thành ‘

start
‘.

redis:6379> TS.RANGE stock:A 5+ ALIGN - AGGREGATION tối thiểu 20

1) 1) (integer) 985
   2) 100
2) 1) (integer) 1005
   2) 110
3) 1) (integer) 1025
   2) 200
4) 1) (integer) 1045
   2) 220
5) 1) (integer) 1065
   2) 310

Tương tự, khi dấu thời gian kết thúc cho truy vấn phạm vi được nêu rõ ràng (không phải ‘+’), bạn cũng có thể đặt

ALIGN
đến thời điểm đó bằng cách đặt căn chỉnh thành ‘+’ hoặc thành ‘kết thúc’.

Xóa mẫu

TS.DEL cho phép xóa các mẫu trong một chuỗi thời gian nhất định trong vòng hai dấu thời gian.

Ví dụ:

TS.DEL stock:A 1020 1050
sẽ xóa tất cả các mẫu có dấu thời gian từ 1020 đến 1050 (bao gồm cả). Giá trị trả về là số lượng mẫu đã bị xóa.

Cải thiện hiệu suất

Nhiều tối ưu hóa đã được triển khai và hầu hết các truy vấn hiện sẽ thực thi nhanh hơn nhiều so với RedisTimeSeries 1.4.

Bảng sau nêu chi tiết số lượng truy vấn mỗi giây có thể đạt được trên một nút duy nhất, đối với các truy vấn TSBS (chúng tôi đã mô tả ở đây). Bảng chỉ liệt kê tập hợp con các truy vấn TSBS được hỗ trợ trong phiên bản 1.4.

Loại truy vấn 1.4
truy vấn / giây
v1.6
truy vấn / giây
% thay đổi (cao hơn-tốt hơn)
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%

Chúng tôi có thể quan sát thấy sự cải thiện từ 8% đến 65% về số lượng truy vấn mỗi giây, so với RedisTimeSeries 1.4.

Thông báo về không gian phím

Thông báo Redis Keyspace cho phép khách hàng Redis đăng ký các kênh Pub / Sub để nhận các sự kiện ảnh hưởng đến tập dữ liệu Redis theo một cách nào đó. Ví dụ:bạn có thể sử dụng RedisGears để kích hoạt một chức năng với các thông báo này.

Ví dụ:có thể triển khai bộ dự đoán chuỗi thời gian hoặc máy dò dị thường lắng nghe dòng mẫu và tạo ra các dự đoán và cảnh báo theo thời gian thực.
Ví dụ:kiểm tra kiểm tra này đăng ký các lệnh RedisTimeSeries khác nhau và tạo các sự kiện.

Hỗ trợ Redis Enterprise cho Redis trên Flash

Kể từ phiên bản 1.6, RedisTimeSeries có thể chạy trong Redis trên Flash, nhưng điều quan trọng cần lưu ý là RoF được triển khai ở cấp độ chính. Cụ thể, giá trị của toàn bộ chuỗi thời gian tồn tại trên FLASH hoặc RAM.

RedisTimeSeries là một phần của Redis Stack

RedisTimeSeries hiện là một phần của Redis Stack. Bạn có thể tải xuống các tệp nhị phân Redis Stack Server mới nhất cho macOS, Ubuntu hoặc Redhat hoặc cài đặt chúng bằng Docker, Homebrew hoặc Linux.

Trực quan hóa dữ liệu chuỗi thời gian với RedisInsight

RedisInsight là một công cụ trực quan dành cho các nhà phát triển, cung cấp một cách tuyệt vời để khám phá dữ liệu từ RedisTimeSeries trong quá trình phát triển bằng cách sử dụng Redis hoặc Redis Stack.

Bạn có thể thực hiện các truy vấn chuỗi thời gian và quan sát kết quả trực tiếp từ giao diện người dùng đồ họa. RedisInsight hiện có thể trực quan hóa kết quả truy vấn RedisTimeSeries.

RedisTimeSeries 1.6 đã ra mắt!

Ngoài ra, RedisInsight còn chứa các hướng dẫn và hướng dẫn nhanh để học RedisTimeSeries một cách tương tác.

RedisTimeSeries 1.6 đã ra mắt!

Tìm hiểu thêm về RedisTimeSeries trên redis.io và developer.redis.com.