आज, हमें RedisTimeSeries 1.6 की सामान्य उपलब्धता की घोषणा करते हुए खुशी हो रही है। यह ब्लॉग पोस्ट अब उपलब्ध प्रमुख नई सुविधाओं का विवरण देता है।
RedisTimeSeries के बारे में
RedisTimeSeries, Redis के लिए एक उच्च-प्रदर्शन, स्मृति-पहली बार-श्रृंखला डेटा संरचना है। RedisTimeSeries टाइम सीरीज़ मल्टी-टेनेंसी का समर्थन करता है (यह एक साथ कई टाइम सीरीज़ को होल्ड कर सकता है) और इन टाइम सीरीज़ को एक साथ एक्सेस करने वाले कई क्लाइंट्स की सेवा कर सकता है। यह अब रेडिस स्टैक के हिस्से के रूप में भी उपलब्ध है।
RedisTimeSeries 1.6 में प्रमुख नई सुविधाएं
- उन्नत पूछताछ क्षमताएं
- क्रॉस-टाइम श्रृंखला एकत्रीकरण
- टाइमस्टैम्प या नमूना मान के आधार पर परिणामों को फ़िल्टर करना
- किस लेबल को पुनः प्राप्त करना है यह चुनना
- एकत्रीकरण बकेट संरेखित करना
नमूने हटाना
- बेहतर प्रदर्शन
- कीस्पेस नोटिफिकेशन
- फ्लैश पर रेडिस के लिए रेडिस एंटरप्राइज समर्थन
उन्नत क्वेरी करने की क्षमता
क्रॉस-टाइम सीरीज़ एग्रीगेशन
संस्करण 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=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 विथलैबेल्स फिल्टर प्रकार=अस्थायी
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 मिलीसेकंड की अवधि के साथ) को तदनुसार संरेखित किया जाता है।
जब श्रेणी क्वेरी के लिए प्रारंभ टाइमस्टैम्प स्पष्ट रूप से कहा गया है ('-' नहीं), तो संरेखण को '-' या '
startपर सेट करके उस समय के लिए ALIGN सेट करना भी संभव है। '।
redis:6379> TS.RANGE स्टॉक:A 5 + ALIGN - AGGREGATION min 20
1) 1) (integer) 985 |
इसी तरह, जब श्रेणी क्वेरी के लिए अंतिम टाइमस्टैम्प स्पष्ट रूप से कहा गया है ('+' नहीं), तो
ALIGNसेट करना भी संभव है उस समय तक संरेखण को '+' या 'अंत' पर सेट करके।
नमूने हटाना
TS.DEL दो टाइमस्टैम्प के भीतर एक निश्चित समय श्रृंखला में नमूने हटाने की अनुमति देता है।
उदाहरण के लिए,
TS.DEL stock:A 1020 10501020 और 1050 (समावेशी) के बीच टाइमस्टैम्प वाले सभी नमूनों को हटा देगा। लौटाया गया मान हटाए गए नमूनों की संख्या है।
बेहतर प्रदर्शन
कई अनुकूलन लागू किए गए थे, और अधिकांश क्वेरी अब RedisTimeSeries 1.4 की तुलना में बहुत तेज़ी से निष्पादित होंगी।
निम्न तालिका टीएसबीएस प्रश्नों (जिसे हमने यहां वर्णित किया है) के लिए एकल नोड पर प्राप्त होने वाले प्रति सेकंड प्रश्नों की संख्या का विवरण दिया है। तालिका केवल TSBS प्रश्नों के सबसेट को सूचीबद्ध करती है जो संस्करण 1.4 में समर्थित थे।
प्रश्न प्रकार | <टीडी>1.4v1.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 की तुलना में।
कीस्पेस नोटिफिकेशन
रेडिस कीस्पेस सूचनाएं रेडिस क्लाइंट को पब/सब चैनलों की सदस्यता लेने की अनुमति देती हैं ताकि किसी तरह से रेडिस डेटा सेट को प्रभावित करने वाली घटनाओं को प्राप्त किया जा सके। उदाहरण के लिए, आप इन सूचनाओं के साथ किसी फ़ंक्शन को ट्रिगर करने के लिए RedisGears का उपयोग कर सकते हैं।
एक उदाहरण के रूप में, एक समय श्रृंखला भविष्यवक्ता या विसंगति डिटेक्टर को लागू करना संभव है जो नमूनों की धारा को सुनता है और वास्तविक समय की भविष्यवाणी और चेतावनी उत्पन्न करता है।
उदाहरण के लिए, इस परीक्षण की जाँच करें जो विभिन्न RedisTimeSeries आदेशों की सदस्यता लेता है और घटनाओं को उत्पन्न करता है।
फ्लैश पर रेडिस के लिए रेडिस एंटरप्राइज समर्थन
संस्करण 1.6 के बाद से, RedisTimeSeries फ्लैश पर रेडिस में चल सकता है, लेकिन यह ध्यान रखना महत्वपूर्ण है कि RoF को प्रमुख स्तर पर लागू किया गया है। अर्थात्, संपूर्ण समय श्रृंखला का मूल्य या तो फ्लैश या रैम पर रहता है।
RedisTimeSeries, Redis Stack का हिस्सा है
RedisTimeSeries अब Redis Stack का हिस्सा है। आप 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 के बारे में अधिक जानें।