আজ, আমরা RedisTimeSeries 1.6-এর জেনারেল অ্যাভেইলেবিলিটি ঘোষণা করে খুশি হচ্ছি। এই ব্লগ পোস্টে এখন উপলব্ধ প্রধান নতুন ফিচারগুলো ডিটেইল করা হয়েছে।
RedisTimeSeries সম্পর্কে
RedisTimeSeries Redis-এর জন্য একটি হাই-পারফরম্যান্স, মেমরি-ফার্স্ট টাইম-সিরিজ ডেটা স্ট্রাকচার। RedisTimeSeries টাইম সিরিজ মাল্টি-টেন্যান্সি সাপোর্ট করে (এটি একসাথে অনেক টাইম সিরিজ ধারণ করতে পারে) এবং একই সাথে এই টাইম সিরিজগুলো এক্সেস করতে একাধিক ক্লায়েন্টকে সার্ভ করতে পারে। এখন এটি Redis Stack-এর অংশ হিসেবেও উপলব্ধ।
RedisTimeSeries 1.6-এ প্রধান নতুন ফিচারগুলো
- এনহান্সড কুয়েরি ক্যাপাবিলিটি
- ক্রস-টাইম সিরিজ অ্যাগ্রিগেশন
- টাইমস্ট্যাম্প বা স্যাম্পল ভ্যালু দ্বারা ফিল্টারিং রেজাল্ট
- কোন লেবেলগুলো রিট্রিভ করা হবে সেটি সিলেক্ট করা
- অ্যাগ্রিগেশন বাকেট আলাইন করা
স্যাম্পল ডিলিট করা
- ইম্প্রুভড পারফরম্যান্স
- KeySpace নোটিফিকেশন
- Redis on Flash-এর জন্য Redis Enterprise সাপোর্ট
এনহান্সড কুয়েরি ক্যাপাবিলিটি
ক্রস-টাইম সিরিজ অ্যাগ্রিগেশন
ভার্সন 1.6-এর আগে, শুধু একটি টাইপের অ্যাগ্রিগেশন সম্ভব ছিল:
- একটি সিঙ্গল টাইম সিরিজের জন্য –
ইকুইডিউরেশনাল টাইমফ্রেমের ওভার স্যাম্পল অ্যাগ্রিগেট করা।
ভার্সন 1.6 থেকে, দুটি নতুন অ্যাগ্রিগেশন টাইপ সম্ভব:
- একাধিক টাইম সিরিজের জন্য –
সমান টাইমস্ট্যাম্পযুক্ত স্যাম্পলগুলো টাইম সিরিজের সেটের ওভার অ্যাগ্রিগেট করা। - একাধিক টাইম সিরিজের জন্য –
প্রথমে, প্রতিটি টাইম সিরিজ ইকুইডিউরেশনাল টাইমফ্রেমের ওভার অ্যাগ্রিগেট করা, তারপর, প্রতিটি টাইমফ্রেমের জন্য, টাইম সিরিজের সেটের ওভার রেজাল্টগুলো অ্যাগ্রিগেট করা।
প্রথম নতুন অ্যাগ্রিগেশন টাইপটি ডেমো করি। প্রথম, দুটি স্টক তৈরি করি, এবং তাদের প্রাইস ৩টি আলাদা টাইমস্ট্যাম্পে যোগ করি:
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ক্লজ টাইম সিরিজকে আইডেন্টিক্যাল টাইপ ভ্যালুযুক্ত গ্রুপে ভাগ করে, এবং তারপর, প্রতিটি টাইমস্ট্যাম্পের জন্য, সমান টাইপ ভ্যালু শেয়ার করা সকল সিরিজকে max অ্যাগ্রিগেটর ব্যবহার করে অ্যাগ্রিগেট করে।
FILTER label=valueTS.MRANGE এবং TS.MREVRANGE দ্বারা সাপোর্টেড। অতিরিক্ত ফিল্টারিং ক্লজও সাপোর্টেড (ডকুমেন্টেশন দেখুন)।
এরপর, আমরা দ্বিতীয় নতুন অ্যাগ্রিগেশন টাইপটি ডেমো করব:
প্রথম, দুটি স্টক তৈরি করি, এবং তাদের প্রাইস ৯টি আলাদা টাইমস্ট্যাম্পে যোগ করি।
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
এখন, প্রতিটি স্টকের জন্য, আমরা ১০০০ মিলিসেকেন্ড টাইম ফ্রেম প্রতি গড় স্টক প্রাইস ক্যালকুলেট করব, এবং তারপর সেটি টাইমফ্রেমের জন্য ম্যাক্সিমাম গড়যুক্ত স্টকটি রিট্রিভ করব:
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 দ্বারা সাপোর্টেড।
Reducer হতে পারে sum, min, বা max।
টাইমস্ট্যাম্প বা স্যাম্পল ভ্যালু দ্বারা ফিল্টারিং রেজাল্ট
TS.RANGE, TS.REVRANGE, TS.MRANGE, এবং TS.MREVRANGE ব্যবহার করার সময়, আপনি সবসময় সকল স্যাম্পল রিট্রিভ বা অ্যাগ্রিগেট করতে চাও না।
[FILTER_BY_TS ts...]ব্যবহার করে আপনি স্যাম্পলকে স্পেসিফিক টাইমস্ট্যাম্পের একটি লিস্ট দ্বারা ফিল্টার করতে পারেন।
[FILTER_BY_VALUE min max]ব্যবহার করে আপনি স্যাম্পলকে মিনিমাম এবং ম্যাক্সিমাম ভ্যালু দ্বারা ফিল্টার করতে পারেন।
উদাহরণস্বরূপ, একটি স্যাম্পলড মেট্রিক বিবেচনা করুন যেখানে নরমাল ভ্যালু -১০০ এবং ১০০ এর মাঝপথে, কিন্তু ৯৯৯৯ ভ্যালু ব্যাড মেজারমেন্টের ইন্ডিকেশন হিসেবে ব্যবহৃত হয়।
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 ব্যবহার করার সময়, আমরা সবসময় ম্যাচ করা টাইম সিরিজের সাথে asoshiated সকল লেবেলের ভ্যালু চাই না, বরং শুধু সিলেক্টেড লেবেলের ভ্যালু চাই।
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
ম্যাচ করা টাইম সিরিজের সাথে asoshiated সকল লেবেল পেতে আমরা
WITHLABELSব্যবহার করব:
redis:6379> TS.MGET WITHLABELS FILTER type=temp
1) 1) "temp:TLV" |
কিন্তু ধরে নিন আমরা শুধু location চাই, আমরা
SELECTED_LABELS:ব্যবহার করতে পারি
redis:6379> TS.MGET SELECTED_LABELS location FILTER type=temp
1) 1) "temp:TLV" |
অ্যাগ্রিগেশন বাকেট আলাইন করা
মান লিন আপনি গড় দৈনিক তাপমাত্রা পেতে চান, কিন্তু আপনার 'দিন' ০৬:০০-তে শুরু হয়। এই কেসে, আমরা ইন্টারভালগুলোকে ০৬:০০ থেকে ০৫:৫৯-এ আলাইন করতে চাব, ০০:০০ থেকে ২৩:৫৯-এ না।
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১০ সেট করা মানে একটি বাকেট টাইম ১০-এ শুরু হওয়া উচিত, এবং সকল বাকেট (প্রতিটি ২০ মিলিসেকেন্ড ডিউরেশন) সেই অনুযায়ী আলাইন হয়।
যখন রেঞ্জ কুয়েরির জন্য স্টার্ট টাইমস্ট্যাম্প এক্সপ্লিসিটলি স্টেট করা থাকে (না '-'), তখন ALIGN সেট করাও সম্ভব সেটি টাইমে '–' বা '
start' সেট করলে।
redis:6379> TS.RANGE stock:A 5 + ALIGN – AGGREGATION min 20
1) 1) (integer) 985 |
একইভাবে, যখন রেঞ্জ কুয়েরির জন্য এন্ড টাইমস্ট্যাম্প এক্সপ্লিসিটলি স্টেট করা থাকে (না '+'), তখন
ALIGNসেট করাও সম্ভব সেটি টাইমে '+' বা 'end' সেট করলে।
স্যাম্পল ডিলিট করা
TS.DEL একটি দেয়া টাইম সিরিজে দুটি টাইমস্ট্যাম্পের মধ্যে স্যাম্পল ডিলিট করার অনুমতি দেয়।
উদাহরণস্বরূপ,
TS.DEL stock:A 1020 1050১০২০ এবং ১০৫০-এর মাঝপথে (ইনক্লूसিভ) টাইমস্ট্যাম্পযুক্ত সকল স্যাম্পল ডিলিট করবে। রিটার্নড ভ্যালু হলো ডিলিট করা স্যাম্পলের সংখ্যা।
ইম্প্রুভড পারফরম্যান্স
অনেক অপ্টিমাইজেশন ইমপ্লিমেন্ট করা হয়েছে, এবং অধিকাংশ কুয়েরি এখন RedisTimeSeries 1.4-এর চেয়ে অনেক দ্রুত এক্সিকিউট হবে।
নিচের টেবিলটি সিঙ্গল নোডে অর্জনযোগ্য কুয়েরি পার সেকেন্ডের সংখ্যা ডিটেইল করে TSBS কুয়েরির জন্য (যেটি আমরা এখানে বর্ণনা করেছি)। টেবিলটি শুধু TSBS কুয়েরির সাবসেট লিস্ট করে যেগুলো ভার্সন 1.4-এ সাপোর্টেড ছিল।
| Query type | 1.4 queries/sec | v1.6 queries/sec | % change (higher-better) |
| 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-এর তুলনায়।
KeySpace নোটিফিকেশন
Redis KeySpace নোটিফিকেশন 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-এর অংশ। আপনি লেটেস্ট 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-এ।