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" |
FILTER type=stockmệ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
maxmệ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" |
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_LABELScho 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" |
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" |
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 |
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 |
Cài đặt
ALIGNthà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 |
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 1050sẽ 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.
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.
Tìm hiểu thêm về RedisTimeSeries trên redis.io và developer.redis.com.