RedisJSON এবং RediSearch আমাদের ক্লাউডে目前为止 সবচেয়ে জনপ্রিয় Redis মডিউল। (Fig. 1 দেখুন) RedisJSON এবং RediSearch-এর ডকার ইমেজ (Redis-এর সাথে বান্ডেল্ড) প্রতিদিন ২০০০-র অধিক বার পুল করা হয়। এইीलिए আমরা ইটামার হাবারকে, Redis-এর টেকনোলজি ইভ্যাঞ্জেলিস্ট, একজন দ্রষ্টা হিসেবে মনে করি যিনি ৪ বছর আগে প্রথম ভার্সনটি লিখেছিলেন। এপ্রিলে, আমরা RedisConf-এ JSON, ইন্ডেক্সিং এবং ফুল-টেক্সট সার্চ ক্যাপাবিলিটির সাথে সম্পর্কিত বেশ কিছু ঘোষণা করেছি। আজ, আমরা এই ক্যাপাবিলিটিগুলোর প্রাইভেট প্রিভিউ ঘোষণা করছি খুশি হয়ে।
এই ব্লগে, আমরা বর্তমান RedisJSON ক্যাপাবিলিটিগুলোর একটি ওভারভিউ দেব। তারপর আমরা এই প্রাইভেট প্রিভিউর নতুন ক্যাপাবিলিটিগুলোর সেকশনে ডাইভ করব। RediSearch ব্যবহার করে JSON ডকুমেন্টে ইন্ডেক্স, কোয়েরি, এবং ফুল-টেক্সট সার্চ করার ক্ষমতা এই রিলিজের সবচেয়ে কুল নতুন ফিচার। অবশেষে, আমরা আপনাকে দেখাবো কীভাবে দ্রুত শুরু করা যায়।
JSON ক্যাপাবিলিটিগুলো
যখন আপনার কাছে RedisJSON নেই, আপনি Redis-এ নেস্টেড ডকুমেন্ট মডেল করেন String ডেটা স্ট্রাকচার ব্যবহার করে।
কিন্তু, যদি আমাদের ডকুমেন্টের একটি সাবপার্ট আপডেট করতে হয় তখন কী?
অপারেশনের অ্যাটোমিসিটি সংরক্ষণ করতে, আমাদের করতে হবে:
- ডকুমেন্টের জন্য WATCH
- পূর্ববর্তী ভার্সন পড়ুন এবং ডিসিরিয়ালাইজ করুন
- আপডেটটি একটি Redis ট্রানজ্যাকশনে এম্বেড করুন
- JSON-এ সিরিয়ালাইজ করুন এবং ডকুমেন্ট আপডেট করুন
- ট্রানজ্যাকশন এক্সিকিউট করুন
এই ধাপগুলো রিট্রাই করতে হতে পারে যদি অন্য কোনো ক্লায়েন্ট এই প্রসেস চলাকালীন ডকুমেন্ট আপডেট করে।
তবে, RedisJSON-এর সাথে, আমরা এই আপডেটটি একক অ্যাটোমিক ট্রানজ্যাকশনে করতে পারি:
আরেকটি উদাহরণ দেখি, যেখানে আপনার কাছে একটি বড় JSON আছে, কিন্তু আপনার অ্যাপ্লিকেশনে শুধু সেই ডকুমেন্টের একটি সাবপার্ট দরকার।
RedisJSON ছাড়া:
আপনাকে করতে হবে:
- পুরো JSON স্ট্রিং রিট্রিভ করুন, স্ট্রিং হিসেবে সিরিয়ালাইজড
- JSON ডিসিরিয়ালাইজ করুন
- আপনার দরকারি সাবপার্ট এক্সট্র্যাক্ট করুন
RedisJSON-এর সাথে, আপনি আপনার প্রয়োজনীয় ডেটা মাত্র একটি কমান্ডে রিট্রিভ করতে পারেন, CPU সাইকেল, নেটওয়ার্ক ওভারহেড, এবং সবচেয়ে গুরুত্বপূর্ণ লেটেন্সি মিনিমাইজ করে।
আপনি দেখতে পাচ্ছেন, RedisJSON JSON ডকুমেন্ট ম্যানিপুলেশন সিম্পলিফাই করে। RedisJSON-এর বর্তমান GA ভার্সন (v1.0) সেটি কমিউনিটি ইতিমধ্যে ব্যাপকভাবে ব্যবহার করছে এবং String ডেটা স্ট্রাকচারের সাথে নেস্টেড স্ট্রাকচার মডেল করার কমियोंকে সমাধান করে। এখানে এর কিছু মূল ক্যাপাবিলিটির ওভারভিউ দেওয়া হলো।
Redis-এ একটি কী সংযুক্ত একটি JSON ডকুমেন্ট স্টোর (বা আপডেট) করা
একটি সাবপার্ট রিপ্লেস করা (যেমন একটি কী স্ট্রিং ভ্যালু)
একটি কালেকশন বা ম্যাপে একটি আইটেম যোগ করা
পুরো ডকুমেন্ট এক্সট্র্যাক্ট করা
JSONPath-এর একটি সাবসেট ব্যবহার করে এর একটি অংশ এক্সট্র্যাক্ট করা
RedisJSON 2.0: প্রাইভেট প্রিভিউ রিলিজ
আমরা এই ভার্সনটি RedisConf 2021-এ ঘোষণা করেছি, এবং আজ আমরা খুশি হচ্ছি ঘোষণা করতে যে এটি আমাদের Redis Enterprise কাস্টমারদের একটি নির্বাচিত গ্রুপের জন্য প্রাইভেট প্রিভিউ হিসেবে উপলব্ধ—এবং আমাদের কমিউনিটির জন্য রিলিজ ক্যান্ডিডেট হিসেবে। এই ভার্সনটির তিনটি বড় ফিচার আছে, অর্থাৎ, JSONPath এক্সপ্রেশন পূর্ন সমর্থন, Active-Active-এর সমর্থন (Redis Enterprise-এর সাথে), এবং RediSearch ব্যবহার করে JSON ডকুমেন্টে ইন্ডেক্স, কোয়েরি, এবং ফুল-টেক্সট সার্চ করার ক্ষমতা। কিন্তু এখানেও আরও আছে! নতুন গুডি গুলোতে ডুব দিই।
RUST-এ রি-রাইট করা
সিস্টেম প্রোগ্রামিং ল্যাঙ্গুয়েজ হলো ল্যাঙ্গুয়েজের একটি পরিবার যা দক্ষতার দিকে الأورিয়েন্টেড। এই ল্যাঙ্গুয়েজগুলিতে লেখা প্রোগ্রামগুলো সাধারণত লাইটওয়েট এবং সেরা পারফরম্যান্স প্রদান করে। এইीलिए Redis ঐতিহাসিকভাবে C-তে লেখা হয়েছে। এটি ব্যাখ্যা করে কেন Redis অত্যন্ত কম লেটেন্সি এবং হাই থ্রুপুট অর্জন করতে পারে। অধিকাংশ Redis মডিউল C, C++, বা Rust-এ লেখা থাকে, যা একই পরিবারের ল্যাঙ্গুয়েজ।
JSON خاصভাবে Rust কমিউনিটি দ্বারা খুব ভালো সার্ভ করা হয় যার মধ্যে খুব দ্রুত এবং দক্ষ JSON সিরিয়ালাইজেশন এবং JSONPath ইমপ্লিমেন্টেশন আছে। সেই ইমপ্লিমেন্টেশনগুলোর সুবিধা Redis ব্যবহারকারীদের দেওয়া স্বাভাবিক ছিল এবং এতে শুধু Redis মডিউল API এবং Rust-এর মধ্যে একটি ম্যাপিং প্রয়োজন ছিল।
JSONPath পূর্ন সমর্থন
এবং এখানে এই RUST রি-রাইটিং-এর সুবিধা। এই নতুন ভার্সনটি JSONPath-এর পূর্ণাঙ্গ সমর্থন অন্তর্ভুক্ত করে। এখন JSONPath এক্সপ্রেশনগুলোর সকল এক্সপ্রেসিভনেস ব্যবহার করা সম্ভব।
একটি JSON ডকুমেন্ট দেওয়া আছে
ওয়াইল্ডকার্ডস (পূর্বে প্রথম আইটেমটিক সীমাবদ্ধ ছিল)
স্লাইস এক্সট্র্যাক্ট করা
ফিল্টার এক্সপ্রেশন সহ একটি আরও উন্নত উদাহরণ
Active-Active-এর সমর্থন
Active-Active Redis Enterprise-এর দ্বারা প্রদত্ত একটি ফিচার। Active-Active আপনাকে আপনার ডাটাবেসকে অনেক জিওগ্রাফিক্যালি-ডিস্ট্রিবিউটেড Redis Enterprise ক্লাস্টারে রিপ্লিকেট করতে দেয়। ব্যবহারকারীরা সবচেয়ে নিকটবর্তী ক্লাস্টারের সাথে লোকাল রিড এবং রাইট লেটেন্সিতে কানেক্ট করতে পারে।
ইমপ্লিমেন্টেশনটি Conflict-free Replicated Data-Type (CRDT) টেকনোলজির ওপর ভিত্তি করে। Redis-এর সাপোর্টেড বেশিরাগ কোর ডেটা স্ট্রাকচারের জন্য এটি ইমপ্লিমেন্ট করার সময়, Redis একটি শক্তিশালী জ্ঞান এবং অভিজ্ঞতা অর্জন করেছে যা JSON-এর জন্য এই নতুন ইমপ্লিমেন্টেশন দ্বারা নিশ্চিত হয়েছে।
অ্যাপ্লিকেশন ডেভেলপাররা এখন JSON ডকুমেন্ট ব্যবহার করে জিও-ডিস্ট্রিবিউটেড অ্যাপ্লিকেশন বিল্ড করতে এই নির্ভর করতে পারেন। দুইটি ক্লাস্টারের সাথে একটি Active-Active এনভায়রনমেন্টে অপারেশনের সেকুয়েন্সের একটি উদাহরণ এখানে দেওয়া হলো:
প্রতিটি অপারেশনের ডিটেইল দেখি:
- T1: একটি ক্লায়েন্ট ক্লাস্টার ১-এ একটি JSON ডকুমেন্ট সেট করে।
- T2: সিঙ্ক্রোনাইজেশন প্রসেস ডকুমেন্টটি ক্লাস্টার ২-এ রিপ্লিকেট করে।
- T3: দুটি ক্লাস্টারেই একই ডকুমেন্ট থাকে।
- T4: একটি ক্লায়েন্ট ক্লাস্টার ১-এ colors অ্যারেতে ব্লু কালার যোগ করে, এবং, সমকালীনভাবে, অন্য একটি ক্লায়েন্ট ক্লাস্টার ২-এ একই অ্যারেতে গ্রিন কালার যোগ করে।
- T5: সিঙ্ক্রোনাইজেশন প্রসেস অপারেশনটি মার্জ করে এবং দুটি ক্লাস্টারেই ডকুমেন্ট আপডেট করে।
- T6: দুটি ক্লাস্টারেই একই ডকুমেন্ট থাকে।
যখন এই ক্যাপাবিলিটি পাবলিক প্রিভিউতে যাবে তখন আমরা সকল সিঙ্ক্রোনাইজেশন ফ্লো নিয়ে আরও আলোচনা করব, কিন্তু আপনি যদি এই ক্যাপাবিলিটিতে আগ্রহী হন, তবে এখনই support@redis.com-এ যোগাযোগ করুন।
RediSearch 2.2: প্রাইভেট প্রিভিউ রিলিজ
এই ব্লগটি RediSearch 2.2-এর প্রাইভেট প্রিভিউর উপলব্ধতা ঘোষণা করছে (আমাদের Redis Enterprise কাস্টমারদের একটি নির্বাচিত গ্রুপের জন্য প্রাইভেট প্রিভিউ হিসেবে এবং আমাদের কমিউনিটির জন্য রিলিজ ক্যান্ডিডেট হিসেবে)।
এই সেকশনে আমরা RediSearch-এর এই নতুন রিলিজ দ্বারা প্রদত্ত নতুন ফিচারগুলো বর্ণনা করব। কিন্তু প্রথমে, এখানে একটি কারণ দেওয়া হলো কেন আমরা এই দুটি জনপ্রিয় মডিউল একসাথে রিলিজ করছি:
JSON ডকুমেন্টের ইন্ডেক্সিং, কোয়েরি করা, এবং ফুল-টেক্সট সার্চ
এই নির্দিষ্ট নতুন ফিচারটি Redis-এর JSON ক্যাপাবিলিটিকে একtação নতুন লেভেলে নিয়ে যাবে। একটি Key-Value স্টোর হওয়ার ব أبعدে যাওয়া পর্যন্ত, RediSearch হ্যাশের ওপর ইন্ডেক্সিং এবং সার্চ ক্যাপাবিলিটি প্রদান করত। हुडের নিচে, RedisJSON 2.0 একটি ইন্টারনাল পাবলিক API এক্সপোজ করে। ইন্টারনাল, কারণ এই API একটি Redis নোডের ভিতরে চলমান অন্যান্য মডিউলগুলোর কাছে এক্সপোজ করা হয়। পাবলিক, কারণ যেকোনো মডিউল এই API কনসিউম করতে পারে। RediSearch 2.2ও তাই করে!
অন্যান্য মডিউলগুলোর কাছে আপনার ক্যাপাবিলিটি এক্সপোজ করে, RedisJSON RediSearch-কে JSON ডকুমেন্ট ইন্ডেক্স করার ক্ষমতা দিয়েছে যাতে ব্যবহারকারীরা কন্টেন্ট ইন্ডেক্স এবং কোয়েরি করে ডকুমেন্ট খুঁজে পেতে পারে। এই কম্বাইনড মডিউলগুলো আপনাকে একটি শক্তিশালী, কম লেটেন্সি, JSON-ওরিয়েন্টেড ডকুমেন্ট ডাটাবেস দেয়!
দেখি এটি কেমন দেখাবে।
আমাদের প্রথমে JSON.SET কমান্ড ব্যবহার করে ডাটাবেসে একটি JSON ডকুমেন্ট পপুলেট করতে হবে।
একটি নতুন ইন্ডেক্স তৈরি করতে, আমরা FT.CREATE কমান্ড ব্যবহার করি। ইন্ডেক্সের স্কিমা এখন JSONPath এক্সপ্রেশন এক্সেপ্ট করে। এক্সপ্রেশনের রেজাল্ট ইন্ডেক্স হয় এবং একটি অ্যাট্রিবিউটের সাথে অ্যাসোসিয়েট হয় (এখানে: title)।
আমরা এখন একটি সার্চ কোয়েরি করতে পারি এবং FT.SEARCH ব্যবহার করে আমাদের JSON ডকুমেন্ট খুঁজে বের করতে পারি:
JSON ডকুমেন্টের ওপর অ্যাগ্রিগেশন
অ্যাগ্রিগেশন RediSearch-এর একটি শক্তিশালী ফিচার যা অ্যানালিটিক্যাল রিপোর্ট তৈরি করতে বা ফ্যাসেটেড সার্চ স্টাইল কোয়েরি পারফর্ম করতে ব্যবহার করা যায়। এখন যেহেতু RediSearch JSON ডকুমেন্ট এক্সেস করতে পারে, JSONPath এক্সপ্রেশন ব্যবহার করে একটি JSON ডকুমেন্ট থেকে যেকোনো ভ্যালু লোড করা সম্ভব এবং এটি একটি পাইপলাইনে ব্যবহার করা যায় ভ্যালুটি ইন্ডেক্স করা থাকে না কেন।
একটি ইন্ডেক্স তৈরি করুন:
ডাটাবেসে একটি JSON ডকুমেন্ট যোগ করুন:
এবং JSON ডকুমেন্ট থেকে এক্সট্র্যাক্ট করা দুটি न्यूमেরিক ভ্যালু ব্যবহার করে একটি সিম্পল কম্পিউটেশন করুন:
ইন্ডেক্সিং স্ট্র্যাটেজিতে বেশি ফ্লেক্সিবিলিটি
RediSearch-এর নতুন ভার্সনের সাথে, একই ভ্যালু (হ্যাশে ফিল্ড, বা JSON ডকুমেন্ট থেকে JSON ভ্যালু) কে ভিন্ন প্যারামিটারসহ ইন্ডেক্স করা এখন সম্ভব। এখানে একটি টিপিক্যাল ইউজ কেস, যা এই নতুন ফিচার দ্বারা সমাধান হয়েছে:
একটি ডাটাবেস থাকতে পারে যাতে ডকুমেন্টগুলো ক্যাটাগরিতে পড়ে।
TAG টাইপ ব্যবহার করে আপনি সহজে আপনার সার্চ রেজাল্ট যেকোনো ক্যাটাগরিতে ফিল্টার করতে পারেন:
কিন্তু যদি আপনি ক্যাটাগরিতে ফুল-টেক্সট সার্চও করতে চান?
আপনার 지금까지, হ্যাশের সাথে, আপনাকে ভ্যালুটিকে দুটি ফিল্ডে ডুপ্লিকেট করতে হতো, যা দ্বিগুণ মেমরি খাওয়াত।
এখানেই FT.CREATE…AS অনেক হ্যান্ডি হয়ে উঠেছে। আমাদের সুন্দর এবং সিম্পল ডকুমেন্টে ফিরে যাই:
…এবং নতুন AS ফিচার ব্যবহার করি:
…এবং…
বিঙ্গো! আমরা এখন একটি ট্যাগ দিয়ে ফিল্টার করতে পারি, এবং একই ফিল্ডে ফুল-টেক্সট সার্চও করতে পারি, ডেটা ডুপ্লিকেট না করে।
কোয়েরি প্রোফাইলিং
অধিকাংশ Redis কমান্ডের টাইম কমপ্লেক্সিটি ভালোভাবে ডকুমেন্টেড। উদাহরণস্বরূপ, HMGET O(N) কমপ্লেক্সিটির সাথে আসে, "যেখানে N হলো রিকোয়েস্ট করা ফিল্ডের সংখ্যা।" RediSearch-এর সাথে, এডভান্সড কোয়েরি লিখা সম্ভব। FT.SEARCH এবং FT.AGGREGATE কমান্ডের কমপ্লেক্সিটি, যাহা হোক, কোয়েরির কমপ্লেক্সিটির ওপর ডিপেন্ড করে।
আমরা আপনাকে কোয়েরি এক্সিকিউট হওয়ার সময় हुडের নিচে কী ঘটছে সেটি বুঝতে টুল দিতে চেয়েছি, যাতে আপনি বুঝতে পারেন কোথায় সময় ব্যয় হচ্ছে, এবং কোয়েরিটি কীভাবে অপ্টিমাইজ করা যায়। নতুন FT.PROFILE কমান্ড একটি ট্রি রিটার্ন করে যা RediSearch কোয়েরি এক্সিকিউট করার জন্য ব্যবহৃত মূল ধাপগুলো দেখায়। প্রতিটি ধাপের জন্য, একটি টাইম ইনফরমেশন দেওয়া থাকে।
তাহলে ফাজি সার্চ সহ একটি কোয়েরি করলে RediSearch-এর ভিতরে কী ঘটে?
একটি উদাহরণ দেখি:
আমরা আমাদের কোয়েরি প্রোফাইল করার জন্য প্রস্তুত। প্রোফাইলিং রান করি এবং প্রোফাইলিং রেজাল্ট ডিকম্পোজ করি।
redis.cloud:6379> FT.PROFILE idx SEARCH LIMITED QUERY "%hello%"
প্রথমে আমরা রেজাল্ট পাই। প্রোফাইলিং কোয়েরি যা রিটার্ন করে তা চেক করার জন্য উপযোগী।
এখানে টোটাল টাইম, যাকে "profile time" বলা হয়, কারণ এতে প্রোফাইল ইনফরমেশন কালেক্ট করার সময় অন্তর্ভুক্ত থাকে।
কোয়েরি পার্স করতে এবং এক্সিকিউশন প্ল্যান বিল্ড করতে ব্যয় হওয়া টাইম:
ডিকশনারিতে ফাজি ম্যাচ খুঁজে বের করতে ব্যয় হওয়া টাইম:
এবং শেষে, আপনি কখনো চিন্তা করেছেন কীভাবে একটি সার্চ রেজাল্ট বিল্ড করা হয়? আমাদের প্রতিটি ডকুমেন্টের জন্য ফুল-টেক্সট স্কোর কম্পিউট করতে হয়, স্কোর অনুযায়ী সর্ট করতে হয়, এবং শেষে ফিল্ডগুলো লোড করতে হয়। এই ইনফরমেশন দিয়ে আপনি বটলनेक শনাক্ত করতে পারেন, কোয়েরি দ্রুত করতে পারেন, এবং সার্ভারের পারফরম্যান্স উন্নত করতে পারেন।
শুরু কীভাবে করবেন
আমরা মনে করি এই নতুন ক্যাপাবিলিটিগুলো অ্যাপ্লিকেশন ডেভেলপাররা এবং Redis কমিউনিটির জন্য গেম চেঞ্জার। এখানে শুরু করার উপায় দেওয়া হলো।
প্রিভিউর ডকার ইমেজ ব্যবহার করুন
শুরু করতে আপনি নিচের ডকার ইমেজটি :preview ট্যাগসহ পুল করতে পারেন:
docker run -p 6379:6379 redis/redismod:preview
বিকল্পভাবে, আপনি উভয় রিপোজিটরিতে RC1 রিলিজ ট্যাগ (RediSearch-এর জন্য v2.2.0, RedisJSON-এর জন্য v2.0.0) থেকে কম্পাইল করে সেগুলো Redis-এ লোড করতে পারেন।
একবার আপনি আপ এবং রানিং হলে, আপনি উপরের সকল কমান্ড বা এই কুইকস্টার্ট গাইডের সাথে চেষ্টা করতে পারেন। আমরা RedisMart নিয়ে একটি ব্লগ সিরিজও লঞ্চ করব, একটি অনলাইন রিটেল অ্যাপ্লিকেশন যা আমরা RedisConf 2021-এর কী-নোটে শোकेস করেছিলাম। RedisMart RediSearch এবং RedisJSON-কে জিও-ডিস্ট্রিবিউটেড ম্যানারে ডিপ্লয় করে সেরা অনলাইন রিটেল এক্সপেরিয়েন্স ডেলিভার করে। এই সিরিজে, আমরা ধাপে ধাপে দেখাবো আমরা কীভাবে এই অ্যাপ্লিকেশনটি বিল্ড করেছি।
কম্প্যাটিবল ক্লায়েন্টের সর্বশেষ ভার্সন ব্যবহার করে ডেভেলপ করুন
নিচের ক্লায়েন্টের তালিকা বর্তমানে আপগ্রেড করা হচ্ছে যাতে আপনি নতুন ফিচারগুলো ভালো ডেভেলপার এক্সপেরিয়েন্সের সাথে ব্যবহার করতে পারেন। সর্বশেষ রিলিজ এবং/অথবা পুল রিকোয়েস্ট চেক করুন (এই মুহূর্তে যাদিকবু legtöbbই প্রিভিউ ভার্সনকে মাস্টার ব্রাঞ্চে সাপোর্ট করছে)।
| RedisJSON | RediSearch | |
| Node.js | redis-modules-sdk | redis-modules-sdk |
| Java | JredisJSON | JRediSearch |
| .NET | NRedisJSON | NRediSearch |
| Python | redisjson-py | redisearch-py |
কমিউনিটির সাথে যোগদান করুন
আমরা যেকোনো ফিডব্যাক, বাগ রিপোর্ট, ফিচার রিকোয়েস্টের স্বাগত জানাই যতক্ষণ না আমরা General Availability-তে কাজ করছি। ডকুমেন্টেশন ওয়েবসাইটগুলোতে বা RediSearch (GitHub-এ) বা RedisJSON (GitHub-এ) রিপোজিটরিতে ফিডব্যাক দিন, অথবা Discord-এ আমাদের সাথে যোগাযোগ করুন।