কম্পিউটার টিউটোরিয়াল

Redis OM for Python: স্মুথ অবজেক্ট ম্যাপিং এবং ফ্লুয়েন্ট কুয়েরি

Redis এবং Python-এর জন্য স্মুথ অবজেক্ট ম্যাপিং এবং ফ্লুয়েন্ট কুয়েরি

আমি Redis OM for Python উপস্থাপন করতে উত্সাহিত, যা Redis-এর জন্য একটি শক্তিশালী নতুন ডেভেলপার-সেন্ট্রিক লাইব্রেরি যা আপনাকে অবজেক্ট ম্যাপিং, ডেটা ভ্যালিডেশন, এবং আরও অনেক কিছু দেয়।

Redis OM for Python-এর এই প্রিভিউ রিলিজ আপনাকে ডিক্লেরেটিভ মডেল দিয়ে ডেটা মডেল করতে দেয় যা SQLAlchemy, Peewee, এবং Django ORM-এর মতো অবজেক্ট-রিলেশনাল ম্যাপার (ORM) ব্যবহারকারীদের জন্য খুব পরিচিত লাগবে।

কিন্তু এখানেই শেষ নয়! প্রতিটি Redis OM মডেল একটি Pydantic মডেলও, তাই আপনি Pydantic-এর শক্তিশালী এবং এক্সটেনসিবল ডেটা ভ্যালিডেশন ফিচারগুলো ব্যবহার করতে পারেন। আরও, Redis OM মডেলগুলো যেকোনো জায়গায় কাজ করবে যেখানে একটি পাইথন লাইব্রেরি Pydantic মডেল এক্সপেক্ট করে। তাই, আপনি একটি Redis OM মডেল FastAPI-তে ব্যবহার করে API এন্ডপয়েন্টের জন্য অটোমেটিক ভ্যালিডেশন এবং API ডকুমেন্টেশন জেনারেট করতে পারেন।

আমার প্রিয় একটি অন্য ফিচার হলো Redis OM ফ্লুয়েন্ট কুয়েরি এক্সপ্রেশন এবং সেকেন্ডারি ইন্ডেক্স সাপোর্ট করে। Redis OM for Python একই লাইব্রেরিতে অ্যাসিনক্রোনাস (asyncio) এবং সিনক্রোনাস প্রোগ্রামিং দুটোই সাপোর্ট করে। এবং অসাধারণ ফিচারগুলোর তালিকা চলছে!

এই লাইব্রেরি কীভাবে বানানো হয়েছে এবং কিছু কী ফিচারের পেছনের কাহিনী জানতে পড়তে থাকুন। অথবা, আপনি কোড 갖고 খেলতে প্রস্তুত হলে, গেটিং স্টার্টেড টিউটোরিয়াল চেক আউট করুন।

Redis-এর জন্য ডিক্লেরেটিভ মডেল

ডেভেলপাররা সাধারণত Redis ক্লায়েন্ট লাইব্রেরি ব্যবহার করে Redis ডেটা স্ট্রাকচার (যেমন: হ্যাশ) তৈরি করে এবং তারপর সেগুলোর বিপরীতে কমান্ড রান করে।

অনেক লোক এই কমান্ড-বেসড ইন্টারফেস পছন্দ করেন কারণ এটি রিলেশনাল ডেটাবেসে SQL কুয়েরি লিখার চেয়ে সহজ। কিন্তু আপনি শেষ কবে SQL লিখেছিলেন? আধুনিক ওয়েব ফ্রেমওয়ার্ক ব্যবহারকারী ডেভেলপাররা ORMs ব্যবহার করতে পছন্দ করেন, বিশেষ করে ডিক্লেরেটিভ মডেলস।

ORM-র যা বিষয় আমাকে সবচেয়ে ভালো লাগে সেটি হলো এটি আপনার সমস্যা সমাধানের সাথে সম্পর্কিত না হওয়া জটিলতা অনেক হয়ে দিয়ে। আমরা Redis OM তৈরি করেছি যাতে আপনি سرانোর আপনি Redis-এ একই অভিজ্ঞতা পেতে পারেন।

হ্যাশ নাকি JSON, আপনার পছন্দ

Redis OM for Python-এ আপনার মডেল বানানোর জন্য দুটি বেস মডেল ক্লাস রয়েছে: HashModel এবং JsonModel।

ওপেন-সোর্স Redis ব্যবহারকারী HashModel ব্যবহার করে ডেটা Redis-এ হ্যাশ হিসেবে স্টোর করতে পারেন, যেখানে RedisJSON মডিউল ইনস্টল করা থাকে বা যারা Redis Enterprise Cloud বা Software ব্যবহার করেন, তারা JsonModel ব্যবহার করে ডেটা নেটিভ JSON অবজেক্ট হিসেবে স্টোর করতে পারেন। আমি পরে এই দুটোর পার্থক্য নিয়ে কথা বলব, কিন্তু এখন আমরা HashModel ব্যবহার করব।

সংক্ষিপ্ত মডেল ডেফিনিশন

এই উদাহরণ Redis OM কোডটি দেখুন যা একটি Customer মডেল ডিফাইন করে এবং সেটি ব্যবহার করে Redis-এ ডেটা সেভ করে:

এই সংক্ষিপ্ত মডেল ডেফিনিশন আপনাকে `get()` এবং `save()` মেথডের মত মেথডগুলো দিয়ে দেয়। পর্দার পিছনে, এই মেথডগুলো Redis হ্যাশে ডেটা ম্যানেজ করে।

কিন্তু Redis OM এর কাজ এখানেই শেষ নয়। এটি গ্লোবালি ইউনিক এবং সোর্টেবল প্রাইমারি কি들도 জেনারেট করে। এই পার্টটি সুপার ইউজফুল, তাই আমি ব্যাখ্যা করছি কিভাবে এটি কাজ করে।

গ্লোবালি ইউনিক প্রাইমারি কি

Redis OM প্রতিটি মডেল ইনস্ট্যান্সের জন্য অটোমেটিক্যালি একটি গ্লোবালি ইউনিক প্রাইমারি কি জেনারেট করে। আপনি এই প্রাইমারি কি ব্যবহার করে Redis-এ মডেল ডেটা সেভ এবং রিট্রিভ করতে পারেন।

এই প্রাইমারি কিগুলো গ্লোবালি ইউনিক হওয়ার গ্যারান্টি দেয়, কিন্তু এগুলো সম্পূর্ণরূপে ক্লায়েন্ট সাইডে জেনারেট হয় Redis-এ কোনো রিকোয়েস্ট ছাড়াই। এগুলো সোর্টেবল এবং কম্প্যাক্টও। এই সব সম্ভব হয়েছে Universally Unique Lexicographically Sortable Identifiers (ULID) স্পেসিফিকেশনের فضلে।

Redis OM for Python: স্মুথ অবজেক্ট ম্যাপিং এবং ফ্লুয়েন্ট কুয়েরি

Redis OM প্রাইমারি কিগুলো ULIDs, courtesy of python-ulid। ULID স্পেসিফিকেশন সম্পর্কে এখানে আরও পড়তে পারেন। এটি খুব কুল!

এই প্যারসিস্টেন্স ফিচারের বাইরেও, আপনি Pydantic দিয়ে ডেটা ভ্যালিডেশন পাওয়া যাচ্ছে। দেখি কিভাবে ভ্যালিডেশন কাজ করে।

Pydantic দিয়ে ডেটা ভ্যালিডেশন

Redis এবং রিলেশনাল ডেটাবেসের মধ্যে একটি পার্থক্য হলো Redis স্কিমা এনফোর্স করে না, তাই আপনি Redis-এ একটি স্ট্রিং লিখে পরে সেটিকে একটি নাম্বার দিয়ে ওভাররাইট করতে পারেন। এটি রিলেশনাল ডেটাবেসের চেয়ে বেশি ফ্লেক্সিবল, কিন্তু এর মানে অ্যাপ্লিকেশনগুলো ডেটা ভ্যালিডেশনের জন্য দায়বদ্ধ।

আমরা মনে করি আপনাকে আপনার অ্যাপ্লিকেশনে ভ্যালিডেশন হ্যান্ডেল করার সেরা উপায় বের করতে হবে না, তাই প্রতিটি Redis OM মডেল একটি Pydantic মডেলও। এর মানে আপনি আপনার মডেলের টাইপ হিন্টসের ভিত্তিতে Pydantic ভ্যালিডেশন পাবেন, এবং স্ট্যান্ডার্ড Pydantic হুকস দিয়ে ভ্যালিডেশন কন্ট্রোল করতে পারবেন, যার মধ্যে কাস্টম ভ্যালিডেটরও রয়েছে।

এখানে কিছু উদাহরণ কোড যা দেখাচ্ছে কিভাবে ভ্যালিডেশন কাজ করে:

যদি Redis OM for Python শুধু প্যারসিস্টেন্স মেথড এবং ডেটা ভ্যালিডেশন দিত, আমি মনে করতাম এটি খুব কুল। কিন্তু আমরা আপনার জন্য আরও জটিলতা হ্যান্ডেল করতে চেয়েছিলাম, এবং সেজন্য আমাদের আপনাকে এক্সপ্রেসিভ কুয়েরি লিখতে হেল্প করতে হতো ঠিক ORM-এর মত। এরপর, আমি বলব কিভাবে এই কুয়েরিগুলো কাজ করে।

ফ্লুয়েন্ট কুয়েরি এক্সপ্রেশন

ORMs শুধু ডিক্লেরেটিভ মডেল দেয় না। সেগুলো একটি APIও দেয় যা আপনাকে প্রাইমারি কি ছাড়া অন্যান্য অ্যাট্রিবিউটের ভিত্তিতে ডেটা কুয়েরি করতে দেয়। সকল কাস্টমার যারা নির্দিষ্ট বয়সের ওপর, কাস্টমার যারা নির্দিষ্ট তারিখের আগে সাইন আপ করেছেন, ইত্যাদি কল্পনা করুন।

আউট অফ দ্য বক্স, Redis প্রাইমারি কি দিয়ে ডেটা লুকআপ করার বিষয়ে দুর্দান্ত। সেটি ত畢竟 একটি কি-ভ্যালু স্টোর যার ভ্যালুগুলো হলো ডেটা স্ট্রাকচার। কিন্তু Redis-এ কুয়েরি এবং সেকেন্ডারি ইন্ডেক্সিং সিস্টেম নেই, তাই আপনি যদি ডেটা ইন্ডেক্স এবং কুয়েরি করতে চান, তবে আপনাকে নিজে ইন্ডেক্সগুলো জটিলভাবে ম্যানেজ করতে হয়।

এখানেও, আমরা এই জটিলতা আপনার জন্য হ্যান্ডেল করতে চেয়েছিলাম, তাই আমরা একটি অপরিহার্য Redis মডিউলের উপর ফ্লুয়েন্ট কুয়েরি এক্সপ্রেশন বিল্ড করেছি: RediSearch। RediSearch একটি সোর্স-অভেইলেবল মডিউল যা আপনাকে কুয়েরি এবং ইন্ডেক্সিং ক্যাপাবিলিটি দেয় যা Redis-এ মিসিং।

দেখি কী হয় যদি আমরা আমাদের Customer মডেলের কিছু ফিল্ডকে `index=True` হিসেবে মার্ক করি। এখন, আমরা মডেলটি ব্যবহার করে কুয়েরি করতে পারি:

এই এক্সপ্রেশন সিন্ট্যাক্সটি পরিচিত লাগতে পারে—এটি Peewee, SQLAlchemy, এবং Django ORM-এর যা বিষয়গুলো আমাকে পছন্দ সেগুলোর ব্লেন্ড।

এম্বেডেড মডেলস

আপনি Redis-এ জটিল ডেটা মডেল করলে, আপনি অবশ্যই এম্বেডেড ডেটা স্টোর করতে চাবেন। আপনি যদি Redis হ্যাশ ব্যবহার করে কাস্টমার ডেটা মডেল করেন, তবে আপনি কাস্টমারের শিপিং অ্যাড্রেসগুলো একটি কাস্টমারের হ্যাশের ভিতর স্টোর করতে চাইতে পারেন। দুর্ভাগ্যক্রমে, Redis হ্যাশ নেস্টেড কন্টেইনার যেমন লিস্ট, সেট, বা অন্যান্য হ্যাশ স্টোর করতে পারে না, তাই এটি কাজ করে না।

এখানেই JSON অবজেক্ট হিসেবে ডেটা স্টোর করা সেন্স মেক করে। আপনি যদি কাস্টমার ডেটা JSON ডকুমেন্ট হিসেবে মডেল করেন, তবে আপনি একটি সিঙ্গল কাস্টমারের রেকর্ডের ভিতর যা ইচ্ছা এম্বেড করতে পারেন।

কিন্তু Redis নেটিভভাবে JSON সাপোর্ট করে না। এটিই কারণ আমরা সোর্স-অভেইলেবল RedisJSON মডিউল তৈরি করেছি। RedisJSON Redis কে একটি ডকুমেন্ট ডেটাবেস হিসেবে ব্যবহার করা সম্ভব করে, কমপ্লেক্স JSON অবজেক্ট সহজে স্টোর এবং কুয়েরি করতে দিয়ে।

Redis OM for Python-এ, যদি আপনার Redis ইনস্ট্যান্সে RedisJSON ইনস্টল করা থাকে, তবে আপনি JsonModel ক্লাস ব্যবহার করতে পারেন। এই মডেল ক্লাস আপনাকে JsonModels কে অন্যান্য JsonModels-এর ভিতর এম্বেড করতে দেয়। কাস্টমারদের অর্ডারের একটি অ্যারে থাকতে পারে, যেকোনো অর্ডারের আইটেমের একটি অ্যারে থাকতে পারে, ইত্যাদি কল্পনা করুন।

Redis OM for Python-এ এম্বেডেড JSON মডেলগুলো কেমন দেখে:

আপনি শুধু কমপ্লেক্স JSON অবজেক্ট স্টোর করার ফ্লেক্সিবিলিটি পাবেন না, Redis OM for Python এই নেস্টেড স্ট্রাকচারগুলোকে নিয়ে অবগত এবং আপনাকে সেগুলোর বিপরীতে কুয়েরি এক্সপ্রেশন লিখতে দেয়। অসাধারণ!

Redis OM for Python ট্রাই করা

আশা করি আপনি বুঝতে পারছেন Redis OM for Python নিয়ে আমি কতটা এক্সাইটেড। আমি বর্তমান পাইথন ইকোসিস্টেমের সেরা কিছু একসাথে আনতে পারেছি যাতে Redis ডেভেলপাররা যে জটিলতা মাথা খারাপ করেন, আমার মতে কারোই করতে হবে না।

আপনার ইনтереস্ট জেগে উঠলে, গেটিং স্টার্টেড টিউটোরিয়াল চেক আউট করুন। Redis OM for Python একটি খুব প্রারম্ভিক পর্যায়ে, যাকে আমরা "Preview" বলে। তাই রাফ স্পটগুলো রয়েছে, বাগ খুঁজে পাবেন, এবং আমরা এখনো কমপ্লিট ডকুমেন্টেশন ডেলিভার করার জন্য কাজ করছি। কিন্তু ভিশনটি আছে, এবং আমি আপনাকে চেক আউট করতে উত্সাহিত করছি।

শেষে, আমি বলব যে আমরা ডিক্লেরেটিভ ডেটা মডেলস দিয়ে শুরু করেছি, কিন্তু আমাদের আরও অনেক কিছু বিল্ড করতে বাকি— ডেটা মডেলিং এবং তার বাইরেও। আরও এক্সাইটিং Redis OM ফিচারের জন্য 지켜 দেখুন!

  1. RediSearch 2.0: Redis-এর জন্য নেক্সট-জেন রিয়েল-টাইম সার্চ

  2. Grafana এখন Redis সমর্থন করে: নতুন ডেটা সোর্স প্লাগ-ইন পরিচিতি

  3. রেডিস লঞ্চপ্যাড: সবচেয়ে প্রিয় ডেটাবেসের শক্তি আনলক করা

  4. Serverless Redis ক্যাশিং দিয়ে Strapi পারফরম্যান্স বাড়ান