आज, हमें RedisTimeSeries 1.6 की सामान्य उपलब्धता की घोषणा करते हुए खुशी हो रही है। यह ब्लॉग पोस्ट अब उपलब्ध प्रमुख नई सुविधाओं का विवरण देता है।
RedisTimeSeries के बारे में
RedisTimeSeries Redis के लिए एक उच्च-प्रदर्शन, मेमोरी-फर्स्ट टाइम-सीरीज़ डेटा संरचना है। RedisTimeSeries टाइम सीरीज़ मल्टी-टेनेंसी का समर्थन करता है (यह एक साथ कई टाइम सीरीज़ रख सकता है) और इन टाइम सीरीज़ को एक साथ एक्सेस करने वाले कई क्लाइंट्स की सेवा कर सकता है। यह अब Redis Stack के हिस्से के रूप में भी उपलब्ध है।
RedisTimeSeries 1.6 में प्रमुख नई सुविधाएं
- उन्नत क्वेरी क्षमताएं
- क्रॉस-टाइम सीरीज़ एकत्रीकरण
- टाइमस्टैम्प या सैंपल मान द्वारा परिणाम फ़िल्टर करना
- कौन से लेबल पुनर्प्राप्त करने हैं, चुनना
- एकत्रीकरण बकेट को संरेखित करना
सैंपल हटाना
- बेहतर प्रदर्शन
- कीस्पेस नोटिफिकेशन
- Redis on Flash के लिए Redis Enterprise समर्थन
उन्नत क्वेरी क्षमताएं
क्रॉस-टाइम सीरीज़ एकत्रीकरण
संस्करण 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 द्वारा समर्थित है।
रिड्यूसर sum, min, या max हो सकता है।
टाइमस्टैम्प या सैंपल मान द्वारा परिणाम फ़िल्टर करना
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 पर शुरू होता है। इस मामले में, हम अंतराल को 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 stock:A – + ALIGN 10 AGGREGATION min 20
1) 1) (integer) 990 |
ALIGNको 10 पर सेट करने का मतलब है कि एक बकेट को समय 10 पर शुरू होना चाहिए, और सभी बकेट (प्रत्येक 20 मिलीसेकंड की अवधि के साथ) तदनुसार संरेखित हैं।
जब रेंज क्वेरी के लिए प्रारंभ टाइमस्टैम्प स्पष्ट रूप से बताया गया है (नहीं '-'), तो ' - ' या '
start' पर संरेखण सेट करके ALIGN को उस समय पर सेट करना भी संभव है।
redis:6379> TS.RANGE stock:A 5 + ALIGN – AGGREGATION min 20
1) 1) (integer) 985 |
इसी तरह, जब रेंज क्वेरी के लिए अंत टाइमस्टैम्प स्पष्ट रूप से बताया गया है (नहीं '+'), तो ' + ' या ' end ' पर संरेखण सेट करके ALIGN को उस समय पर सेट करना भी संभव है।
सैंपल हटाना
TS.DEL दिए गए टाइम सीरीज़ में दो टाइमस्टैम्प के भीतर सैंपल हटाने की अनुमति देता है।
उदाहरण के लिए,
TS.DEL stock:A 1020 10501020 और 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% |
हम RedisTimeSeries 1.4 की तुलना में प्रति सेकंड क्वेरी की संख्या में 8% से 65% का सुधार देख सकते हैं।
कीस्पेस नोटिफिकेशन
Redis कीस्पेस नोटिफिकेशन Redis क्लाइंट्स को Pub/Sub चैनलों की सदस्यता लेने की अनुमति देते हैं ताकि Redis डेटा सेट को किसी तरह से प्रभावित करने वाली घटनाओं को प्राप्त किया जा सके। आप उदाहरण के लिए, इन नोटिफिकेशन के साथ एक फ़ंक्शन को ट्रिगर करने के लिए RedisGears का उपयोग कर सकते हैं।
एक उदाहरण के रूप में, एक टाइम सीरीज़ प्रेडिक्टर या विसंगति डिटेक्टर को लागू करना संभव है जो सैंपल की स्ट्रीम को सुनता है और रियल-टाइम भविष्यवाणियां और चेतावनियां उत्पन्न करता है।
उदाहरण के लिए, इस टेस्ट को देखें जो विभिन्न RedisTimeSeries कमांड की सदस्यता लेता है और घटनाएं उत्पन्न करता है।
Redis on Flash के लिए Redis Enterprise समर्थन
संस्करण 1.6 से, RedisTimeSeries Redis on Flash में चल सकता है, लेकिन यह ध्यान रखना महत्वपूर्ण है कि RoF कुंजी स्तर पर लागू किया गया है। अर्थात्, संपूर्ण टाइम सीरीज़ का मान या तो FLASH या RAM पर रहता है।
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 के बारे में अधिक जानें।