Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Redis

RedisTimeSeries 1.6 ออกแล้ว!

วันนี้ เรายินดีที่จะประกาศความพร้อมใช้งานทั่วไปของ RedisTimeSeries 1.6 โพสต์บล็อกนี้ให้รายละเอียดเกี่ยวกับคุณลักษณะใหม่ที่สำคัญที่มีให้บริการในขณะนี้

เกี่ยวกับ RedisTimeSeries

RedisTimeSeries เป็นโครงสร้างข้อมูลอนุกรมเวลาที่มีหน่วยความจำเป็นอันดับแรกสำหรับ Redis RedisTimeSeries รองรับอนุกรมเวลาหลายผู้เช่า (สามารถเก็บอนุกรมเวลาได้หลายชุดพร้อมกัน) และสามารถให้บริการลูกค้าหลายรายที่เข้าถึงอนุกรมเวลาเหล่านี้พร้อมกัน ตอนนี้มีให้ใช้งานโดยเป็นส่วนหนึ่งของ Redis Stack

ฟีเจอร์ใหม่ที่สำคัญใน RedisTimeSeries 1.6

  • เพิ่มความสามารถในการสืบค้นข้อมูล
    • การรวมอนุกรมข้ามเวลา
    • กรองผลลัพธ์ตามการประทับเวลาหรือค่าตัวอย่าง
    • การเลือกป้ายกำกับที่จะดึง
    • การจัดแนวที่เก็บข้อมูลการรวม
      การลบตัวอย่าง
  • ปรับปรุงประสิทธิภาพ
  • การแจ้งเตือนคีย์สเปซ
  • รองรับ Redis Enterprise สำหรับ Redis บน Flash

ปรับปรุงความสามารถในการสืบค้น

การรวมอนุกรมข้ามเวลา

ก่อนเวอร์ชัน 1.6 สามารถรวมได้เพียงประเภทเดียวเท่านั้น:

  • สำหรับซีรี่ส์เวลาเดียว –
    การรวมกลุ่มตัวอย่างในช่วงเวลาสมมูล

ตั้งแต่เวอร์ชัน 1.6 จะมีประเภทการรวมใหม่สองประเภท:

  • สำหรับอนุกรมเวลาหลายชุด –
    การรวมตัวอย่างที่มีการประทับเวลาเท่ากันในชุดของอนุกรมเวลา
  • สำหรับอนุกรมเวลาหลายชุด –
    ขั้นแรก รวมแต่ละอนุกรมเวลาตามกรอบเวลาสมมูล จากนั้น สำหรับแต่ละกรอบเวลา ให้รวมผลลัพธ์ในชุดของอนุกรมเวลา

มาสาธิตประเภทการรวมใหม่ประเภทแรกกัน ขั้นแรก มาสร้างหุ้นสองตัวและเพิ่มราคาที่ประทับเวลาต่างกัน 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"
   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
clause ปล่อยให้เรามีอนุกรมเวลาเพียงครั้งเดียวที่แสดงถึงราคาหุ้น
GROUPBY type REDUCE
max
อนุประโยคจะแบ่งอนุกรมเวลาออกเป็นกลุ่มโดยมีค่าประเภทที่เหมือนกัน จากนั้นสำหรับการประทับเวลาแต่ละครั้ง จะรวมอนุกรมทั้งหมดที่มีค่าประเภทเดียวกันร่วมกันโดยใช้ตัวรวบรวมสูงสุด

FILTER label=value
ได้รับการสนับสนุนโดย TS.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

ตอนนี้ สำหรับแต่ละหุ้น เราจะคำนวณราคาหุ้นเฉลี่ยต่อกรอบเวลา 1,000 มิลลิวินาที จากนั้นดึงข้อมูลหุ้นด้วย

ค่าเฉลี่ยสูงสุดสำหรับกรอบเวลานั้น:

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
ได้รับการสนับสนุนโดย TS.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 type=temp

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

แต่สมมติว่าเราต้องการเฉพาะตำแหน่ง เราสามารถใช้

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

การจัดแนวที่เก็บข้อมูลการรวม

สมมติว่าเราต้องการรับอุณหภูมิเฉลี่ยรายวัน แต่ 'วัน' ของเราเริ่มต้นที่ 06:00 น. ในกรณีนี้ เราต้องการจัดช่วงเวลาเป็น 06:00 ถึง 05:59 น. แทนที่จะเป็น 00:00 ถึง 23: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
   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

และตอนนี้ด้วย

ALIGN
:

redis:6379> TS.RANGE หุ้น:A – + ALIGN 10 AGGREGATION ขั้นต่ำ 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

การตั้งค่า

ALIGN
ถึง 10 หมายความว่าที่เก็บข้อมูลควรเริ่มต้นที่เวลา 10 และที่เก็บข้อมูลทั้งหมด (แต่ละอันมีระยะเวลา 20 มิลลิวินาที) จะถูกจัดเรียงตามนั้น

เมื่อมีการระบุการประทับเวลาเริ่มต้นสำหรับการค้นหาช่วงอย่างชัดเจน (ไม่ใช่ '-') คุณยังสามารถตั้งค่า ALIGN เป็นเวลานั้นโดยการตั้งค่า align เป็น '-' หรือ '

start
‘.

redis:6379> TS.RANGE หุ้น:A 5 + ALIGN – AGGREGATION ขั้นต่ำ 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

ในทำนองเดียวกัน เมื่อการประทับเวลาสิ้นสุดสำหรับการสืบค้นช่วงมีการระบุอย่างชัดเจน (ไม่ใช่ '+') ก็สามารถตั้งค่า

ALIGN
ได้ ถึงเวลานั้นโดยตั้งค่าให้ชิด '+' หรือ 'end'

การลบตัวอย่าง

TS.DEL อนุญาตให้ลบตัวอย่างในอนุกรมเวลาที่กำหนดภายในสองการประทับเวลา

ตัวอย่างเช่น

TS.DEL stock:A 1020 1050
จะลบตัวอย่างทั้งหมดที่มีการประทับเวลาระหว่าง 1,020 ถึง 1050 (รวม) ค่าที่ส่งคืนคือจำนวนตัวอย่างที่ถูกลบ

ปรับปรุงประสิทธิภาพ

มีการปรับใช้การเพิ่มประสิทธิภาพหลายอย่าง และตอนนี้การสืบค้นส่วนใหญ่จะดำเนินการได้เร็วกว่ามากเมื่อเทียบกับ RedisTimeSeries 1.4

ตารางต่อไปนี้ให้รายละเอียดจำนวนการสืบค้นต่อวินาทีที่ทำได้บนโหนดเดียว สำหรับการสืบค้น TSBS (ซึ่งเราอธิบายไว้ที่นี่) ตารางแสดงเฉพาะส่วนย่อยของการค้นหา TSBS ที่ได้รับการสนับสนุนในเวอร์ชัน 1.4

ประเภทข้อความค้นหา 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 สมัครรับข้อมูลช่อง Pub/Sub เพื่อรับเหตุการณ์ที่ส่งผลต่อชุดข้อมูล Redis ในทางใดทางหนึ่ง ตัวอย่างเช่น คุณสามารถใช้ RedisGears เพื่อเรียกใช้ฟังก์ชันด้วยการแจ้งเตือนเหล่านี้

ตัวอย่างเช่น เป็นไปได้ที่จะใช้ตัวทำนายอนุกรมเวลาหรือตัวตรวจจับความผิดปกติที่รับฟังกระแสของตัวอย่างและสร้างการคาดคะเนและคำเตือนแบบเรียลไทม์
ตรวจสอบตัวอย่างเช่น การทดสอบนี้ซึ่งสมัครรับคำสั่ง RedisTimeSeries ต่างๆ และสร้างเหตุการณ์

รองรับ Redis Enterprise สำหรับ Redis บน Flash

ตั้งแต่เวอร์ชัน 1.6 RedisTimeSeries สามารถทำงานใน Redis บน Flash ได้ แต่สิ่งสำคัญคือต้องสังเกตว่า RoF ถูกใช้งานในระดับคีย์ กล่าวคือ ค่าของอนุกรมเวลาทั้งหมดอยู่ที่ FLASH หรือ RAM

RedisTimeSeries เป็นส่วนหนึ่งของ Redis Stack

RedisTimeSeries เป็นส่วนหนึ่งของ Redis Stack แล้ว คุณสามารถดาวน์โหลดไบนารี Redis Stack Server ล่าสุดสำหรับ macOS, Ubuntu หรือ Redhat หรือติดตั้งด้วย Docker, Homebrew หรือ Linux

แสดงภาพข้อมูลอนุกรมเวลาด้วย RedisInsight

RedisInsight เป็นเครื่องมือแสดงภาพสำหรับนักพัฒนาที่มอบวิธีที่ยอดเยี่ยมในการสำรวจข้อมูลจาก RedisTimeSeries ระหว่างการพัฒนาโดยใช้ Redis หรือ Redis Stack

คุณสามารถดำเนินการค้นหาอนุกรมเวลาและสังเกตผลลัพธ์ได้โดยตรงจากอินเทอร์เฟซผู้ใช้แบบกราฟิก RedisInsight สามารถแสดงภาพผลลัพธ์การสืบค้น RedisTimeSeries

RedisTimeSeries 1.6 ออกแล้ว!

นอกจากนี้ RedisInsight ยังมีคำแนะนำและบทช่วยสอนฉบับย่อสำหรับการเรียนรู้ RedisTimeSeries แบบโต้ตอบ

RedisTimeSeries 1.6 ออกแล้ว!

เรียนรู้เพิ่มเติมเกี่ยวกับ RedisTimeSeries บน redis.io และ developer.redis.com