วันนี้ เรายินดีที่จะประกาศความพร้อมใช้งานทั่วไปของ 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" |
FILTER type=stockclause ปล่อยให้เรามีอนุกรมเวลาเพียงครั้งเดียวที่แสดงถึงราคาหุ้น
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" |
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" |
แต่สมมติว่าเราต้องการเฉพาะตำแหน่ง เราสามารถใช้
SELECTED_LABELS:
redis:6379> TS.MGET SELECTED_LABELS location FILTER type=temp
1) 1) "temp:TLV" |
การจัดแนวที่เก็บข้อมูลการรวม
สมมติว่าเราต้องการรับอุณหภูมิเฉลี่ยรายวัน แต่ 'วัน' ของเราเริ่มต้นที่ 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 |
และตอนนี้ด้วย
ALIGN:
redis:6379> TS.RANGE หุ้น:A – + ALIGN 10 AGGREGATION ขั้นต่ำ 20
1) 1) (integer) 990 |
การตั้งค่า
ALIGNถึง 10 หมายความว่าที่เก็บข้อมูลควรเริ่มต้นที่เวลา 10 และที่เก็บข้อมูลทั้งหมด (แต่ละอันมีระยะเวลา 20 มิลลิวินาที) จะถูกจัดเรียงตามนั้น
เมื่อมีการระบุการประทับเวลาเริ่มต้นสำหรับการค้นหาช่วงอย่างชัดเจน (ไม่ใช่ '-') คุณยังสามารถตั้งค่า ALIGN เป็นเวลานั้นโดยการตั้งค่า align เป็น '-' หรือ '
start‘.
redis:6379> TS.RANGE หุ้น:A 5 + ALIGN – AGGREGATION ขั้นต่ำ 20
1) 1) (integer) 985 |
ในทำนองเดียวกัน เมื่อการประทับเวลาสิ้นสุดสำหรับการสืบค้นช่วงมีการระบุอย่างชัดเจน (ไม่ใช่ '+') ก็สามารถตั้งค่า
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
นอกจากนี้ RedisInsight ยังมีคำแนะนำและบทช่วยสอนฉบับย่อสำหรับการเรียนรู้ RedisTimeSeries แบบโต้ตอบ
เรียนรู้เพิ่มเติมเกี่ยวกับ RedisTimeSeries บน redis.io และ developer.redis.com