রিডিস এবং পাইথনের জন্য স্বজ্ঞাত অবজেক্ট ম্যাপিং এবং সাবলীল প্রশ্নগুলি
আমি পাইথনের জন্য Redis OM, Redis-এর জন্য একটি শক্তিশালী নতুন ডেভেলপার-কেন্দ্রিক লাইব্রেরি প্রবর্তন করতে পেরে আনন্দিত যেটি আপনাকে অবজেক্ট ম্যাপিং, ডেটা যাচাইকরণ এবং আরও অনেক কিছুর মতো বৈশিষ্ট্য দেয়।
পাইথনের জন্য Redis OM-এর এই প্রিভিউ রিলিজ আপনাকে ঘোষনামূলক মডেল সহ ডেটা মডেল করতে দেয় যা SQLAlchemy, Peewee, এবং Django ORM-এর মতো অবজেক্ট-রিলেশনাল ম্যাপার (ORM) ব্যবহারকারীদের কাছে সঠিক মনে হবে৷
কিন্তু আরো আছে! প্রতিটি Redis OM মডেলও একটি Pydantic মডেল, তাই আপনি Pydantic এর শক্তিশালী এবং এক্সটেনসিবল ডেটা বৈধতা বৈশিষ্ট্যগুলি ব্যবহার করতে পারেন। তাছাড়া, Redis OM মডেলগুলি যে কোনও জায়গায় কাজ করবে যেখানে একটি Python লাইব্রেরি Pydantic মডেলগুলি আশা করে৷ সুতরাং, আপনি API এন্ডপয়েন্টের জন্য স্বয়ংক্রিয়ভাবে যাচাই এবং API ডকুমেন্টেশন তৈরি করতে FastAPI সহ একটি Redis OM মডেল ব্যবহার করতে পারেন।
আমার হৃদয়ে প্রিয় আরেকটি বৈশিষ্ট্য হল Redis OM সাবলীল ক্যোয়ারী এক্সপ্রেশন এবং সেকেন্ডারি ইনডেক্স সমর্থন করে। পাইথনের জন্য Redis OM একই লাইব্রেরিতে অ্যাসিঙ্ক্রোনাস (অ্যাসিঙ্কিও) এবং সিঙ্ক্রোনাস প্রোগ্রামিং উভয়কেই সমর্থন করে। এবং দুর্দান্ত বৈশিষ্ট্যগুলির তালিকা চলছে!
আমি কীভাবে এই লাইব্রেরিটি তৈরি করেছি এবং কয়েকটি মূল বৈশিষ্ট্য সম্পর্কে কিছু নেপথ্যের বিশদ বিবরণ জানতে পড়া চালিয়ে যান। অথবা, আপনি যদি কোডের সাথে খেলতে প্রস্তুত হন, শুরু করার টিউটোরিয়ালটি দেখুন।
Redis-এর জন্য ঘোষণামূলক মডেল
বিকাশকারীরা সাধারণত Redis ডেটা স্ট্রাকচার তৈরি করতে একটি ক্লায়েন্ট লাইব্রেরির মাধ্যমে Redis অ্যাক্সেস করে (যেমন, হ্যাশ) এবং তারপর কমান্ড তাদের বিরুদ্ধে।
অনেক লোক এই কমান্ড-ভিত্তিক ইন্টারফেসটি উপভোগ করে কারণ এটি একটি রিলেশনাল ডাটাবেসের সাথে SQL কোয়েরি লেখার চেয়ে সহজ। কিন্তু শেষ কবে আপনি SQL লিখেছিলেন? আধুনিক ওয়েব ফ্রেমওয়ার্ক ব্যবহারকারী বিকাশকারীরা পরিবর্তে ORM ব্যবহার করে, বিশেষ করে ঘোষণামূলক মডেলগুলির সাথে৷
আমি ORM সম্পর্কে যা পছন্দ করি তা হল যে তারা অনেক জটিলতা দূর করে যা আপনি যে সমস্যার সমাধান করার চেষ্টা করছেন তার সাথে সম্পর্কিত নয়। আমরা Redis OM তৈরি করেছি যাতে আপনি অবশেষে Redis এর সাথে একই অভিজ্ঞতা পেতে পারেন।
হ্যাশ বা JSON, আপনার পছন্দ
পাইথনের জন্য Redis OM-তে দুটি বেস মডেল ক্লাস রয়েছে যা আপনি আপনার মডেলগুলি তৈরি করতে ব্যবহার করতে পারেন:HashModel এবং JsonModel।
ওপেন সোর্স Redis ব্যবহারকারীরা HashModel ব্যবহার করতে পারেন Redis-এ হ্যাশ হিসাবে ডেটা সংরক্ষণ করতে, যখন RedisJSON Redis মডিউল ইনস্টল করা আছে বা Redis Enterprise Cloud বা Software ব্যবহার করছেন তারা JsonModel ব্যবহার করতে পারেন JSON অবজেক্ট হিসাবে নেটিভভাবে ডেটা সংরক্ষণ করতে। আমি পরে এই ক্লাসগুলির মধ্যে পার্থক্য সম্পর্কে আরও কথা বলব, কিন্তু আপাতত, আমরা HashModel ব্যবহার করব।
সংক্ষিপ্ত মডেল সংজ্ঞা
এই উদাহরণটি দেখুন Redis OM কোড যা একটি গ্রাহক সংজ্ঞায়িত করে৷ মডেল এবং Redis এ ডেটা সংরক্ষণ করতে এটি ব্যবহার করে:
এই সংক্ষিপ্ত মডেল সংজ্ঞা অবিলম্বে আপনাকে `get()` এবং `save()` এর মত পদ্ধতি দেয়। পর্দার আড়ালে, এই পদ্ধতিগুলি রেডিস হ্যাশে ডেটা পরিচালনা করে৷
৷Redis OM যদিও আরো অনেক কিছু করে। এটি বিশ্বব্যাপী অনন্য এবং বাছাইযোগ্য প্রাথমিক কী তৈরি করে। এই অংশটি খুবই উপযোগী, তাই আমাকে ব্যাখ্যা করুন কিভাবে এটি কাজ করে।
বিশ্বব্যাপী অনন্য প্রাথমিক কী
Redis OM স্বয়ংক্রিয়ভাবে প্রতিটি মডেল উদাহরণের জন্য একটি বিশ্বব্যাপী অনন্য প্রাথমিক কী তৈরি করে। আপনি Redis-এ মডেল ডেটা সংরক্ষণ এবং পুনরুদ্ধার করতে এই প্রাথমিক কী ব্যবহার করতে পারেন।
এই প্রাথমিক কীগুলি বিশ্বব্যাপী অনন্য হওয়ার গ্যারান্টিযুক্ত, তবে সেগুলি Redis-কে কোনও অনুরোধ ছাড়াই সম্পূর্ণরূপে ক্লায়েন্টে তৈরি করা হয়। এগুলি বাছাইযোগ্য এবং কমপ্যাক্টও। এই সবই সম্ভব হয়েছে ইউনিভার্সলি ইউনিক লেক্সিকোগ্রাফিক্যালি সর্টেবল আইডেন্টিফায়ার (ইউএলআইডি) স্পেসিফিকেশনের জন্য।
Redis OM প্রাথমিক কীগুলি হল ULID, পাইথন-উলিডের সৌজন্যে। আপনি এখানে ULID স্পেসিফিকেশন সম্পর্কে আরও পড়তে পারেন। এটা খুব সুন্দর!এই অধ্যবসায়ের বৈশিষ্ট্যগুলি ছাড়াও, আপনি পাইডান্টিকের সাথে ডেটা বৈধতাও পান। আসুন জেনে নেই কিভাবে বৈধতা কাজ করে।
Pydantic এর সাথে ডেটা যাচাইকরণ
রেডিস এবং রিলেশনাল ডাটাবেসের মধ্যে একটি পার্থক্য হল যে রেডিস একটি স্কিমা প্রয়োগ করে না, তাই আপনি রেডিসে একটি স্ট্রিং লিখতে পারেন এবং তারপরে একটি সংখ্যা দিয়ে এটিকে ওভাররাইট করতে পারেন। এটি রিলেশনাল ডাটাবেসের চেয়ে বেশি নমনীয়, তবে এর মানে হল অ্যাপ্লিকেশনগুলি ডেটা যাচাইকরণের জন্য দায়ী৷
আমরা মনে করি আপনার অ্যাপ্লিকেশনগুলিতে বৈধতা পরিচালনা করার সর্বোত্তম উপায়টি খুঁজে বের করতে হবে না, তাই প্রতিটি Redis OM মডেলও একটি Pydantic মডেল। এর মানে হল আপনি আপনার মডেলের টাইপ ইঙ্গিতের উপর ভিত্তি করে Pydantic বৈধতা পাবেন এবং আপনি কাস্টম ভ্যালিডেটর সহ স্ট্যান্ডার্ড Pydantic হুকের মাধ্যমে বৈধতা নিয়ন্ত্রণ করতে পারবেন।
এখানে কিছু উদাহরণ কোড রয়েছে যা দেখায় কিভাবে বৈধতা কাজ করে:
যদি পাইথনের জন্য Redis OM শুধুমাত্র আপনাকে অধ্যবসায় পদ্ধতি এবং ডেটা বৈধতা দেয়, আমি মনে করি এটি বেশ দুর্দান্ত ছিল। কিন্তু আমরা আপনার জন্য আরও জটিলতা মোকাবেলা করতে চেয়েছিলাম, এবং এটি করার জন্য আমাদের আপনাকে অভিব্যক্তিপূর্ণ প্রশ্নগুলি লিখতে সাহায্য করতে হবে ঠিক যেমন আপনি একটি ORM এর সাথে করেন। এর পরে, আমি এই প্রশ্নগুলি কীভাবে কাজ করে সে সম্পর্কে কথা বলব।
ফ্লুয়েন্ট কোয়েরি এক্সপ্রেশন
ORM গুলি আপনাকে শুধুমাত্র ঘোষণামূলক মডেল দেয় না। তারা একটি API প্রদান করে যা আপনাকে অন্যান্য বৈশিষ্ট্যের উপর ভিত্তি করে ডেটা অনুসন্ধান করতে দেয় প্রাথমিক কী থেকে। একটি নির্দিষ্ট বয়সের বেশি সমস্ত গ্রাহকদের খুঁজে বের করার কল্পনা করুন, একটি নির্দিষ্ট তারিখের আগে সাইন আপ করা গ্রাহক, ইত্যাদি।
বাক্সের বাইরে, রেডিস একটি প্রাথমিক কী দিয়ে ডেটা খুঁজতে দুর্দান্ত। সর্বোপরি, এটি একটি কী-মানের স্টোর যার মানগুলি ডেটা স্ট্রাকচার। কিন্তু রেডিস একটি ক্যোয়ারী এবং সেকেন্ডারি ইনডেক্সিং সিস্টেম অন্তর্ভুক্ত করে না, তাই আপনি যদি ইনডেক্স করতে চান এবং ডেটা কোয়েরি করতে চান, তাহলে আপনাকে জটিল উপায়ে ইনডেক্সগুলি পরিচালনা করতে হবে৷
এখানে আবার, আমরা আপনার জন্য এই জটিলতাটি পরিচালনা করতে চেয়েছিলাম, তাই আমরা একটি অপরিহার্য রেডিস মডিউলের উপরে সাবলীল ক্যোয়ারী এক্সপ্রেশন তৈরি করেছি:RediSearch। RediSearch হল একটি উৎস-উপলব্ধ মডিউল যা আপনাকে রেডিস থেকে অনুপস্থিত কোয়েরি এবং ইন্ডেক্সিং ক্ষমতা দেয়৷
দেখা যাক আমাদের গ্রাহক -এ কয়েকটি ক্ষেত্র চিহ্নিত করলে কী হয় `সূচক=সত্য` হিসাবে মডেল। এখন, আমরা জিজ্ঞাসা করতে মডেলটি ব্যবহার করতে পারি:
এই অভিব্যক্তি সিনট্যাক্সটি পরিচিত মনে হতে পারে— এটি Peewee, SQLAlchemy এবং Django ORM সম্পর্কে আমার পছন্দের সবকিছুর মিশ্রণ।
এম্বেড করা মডেলগুলি
আপনি Redis এর সাথে জটিল ডেটা মডেল করার সময়, আপনি অনিবার্যভাবে এমবেডেড ডেটা সঞ্চয় করতে চান। আপনি যদি রেডিস হ্যাশ ব্যবহার করে গ্রাহকের ডেটা মডেলিং করেন তবে আপনি একজন গ্রাহকের হ্যাশের মধ্যে গ্রাহকের শিপিং ঠিকানার মতো ডেটা সংরক্ষণ করতে চাইতে পারেন। দুর্ভাগ্যবশত, Redis Hashes তালিকা, সেট বা অন্যান্য হ্যাশের মত নেস্টেড কন্টেনার সংরক্ষণ করতে পারে না, তাই এটি কাজ করে না।
এখানে একটি নেটিভ JSON অবজেক্ট হিসাবে ডেটা সংরক্ষণ করা অনেক অর্থপূর্ণ হতে পারে। আপনি যদি একটি JSON নথি হিসাবে গ্রাহক ডেটা মডেল করেন, তাহলে আপনি একক গ্রাহকের জন্য রেকর্ডের ভিতরে যা চান তা এম্বেড করতে পারেন৷
যাইহোক, Redis স্থানীয়ভাবে JSON সমর্থন করে না। ঠিক এই কারণেই আমরা সোর্স-উপলব্ধ RedisJSON মডিউল তৈরি করেছি। RedisJSON রেডিসকে ডকুমেন্ট ডাটাবেস হিসাবে ব্যবহার করা সম্ভব করে তোলে, সহজে জটিল JSON অবজেক্টগুলি সঞ্চয় এবং অনুসন্ধান করা।
Python এর জন্য Redis OM এর সাথে, যদি আপনার Redis উদাহরণে RedisJSON ইনস্টল করা থাকে, আপনি JsonModel ব্যবহার করতে পারেন ক্লাস এই মডেল ক্লাস আপনাকে JsonModels এম্বেড করতে দেয় অন্যান্য JsonModels-এর মধ্যে . কল্পনা করুন যে গ্রাহকদের অর্ডারের একটি বিন্যাস রয়েছে, যার প্রত্যেকটিতে আইটেমগুলির একটি বিন্যাস রয়েছে ইত্যাদি।
Python এর জন্য Redis OM এর সাথে এমবেড করা JSON মডেলগুলি দেখতে কেমন তা এখানে রয়েছে:
আপনি জটিল JSON অবজেক্টগুলিকে সঞ্চয় করার নমনীয়তাই পান না, কিন্তু Python-এর জন্য Redis OM এই নেস্টেড স্ট্রাকচারগুলি সম্পর্কে সচেতন এবং আপনাকে তাদের বিরুদ্ধে ক্যোয়ারী এক্সপ্রেশন লিখতে দেয়। অসাধারণ!
পাইথনের জন্য Redis OM চেষ্টা করা হচ্ছে
আমি আশা করি আপনি বলতে পারবেন যে আমি পাইথনের জন্য Redis OM সম্পর্কে কতটা উত্তেজিত। আমি রেডিস ডেভেলপারদের জটিলতা মোকাবেলা করার জন্য বর্তমান পাইথন ইকোসিস্টেমের সেরা কিছু একত্রে আনার জন্য কাজ করেছি যা আমার মতে, কাউকেই মোকাবেলা করতে হবে না।
আমি যদি আপনার আগ্রহ প্রকাশ করে থাকি, শুরু করার টিউটোরিয়ালটি দেখুন। পাইথনের জন্য Redis OM একটি খুব প্রাথমিক পর্যায়ে, যাকে আমরা "প্রিভিউ" বলি। তাই মোটামুটি দাগ রয়েছে, আপনি বাগগুলির মধ্যে পড়বেন এবং আমরা এখনও সম্পূর্ণ ডকুমেন্টেশন দেওয়ার জন্য কাজ করছি। কিন্তু দৃষ্টি আছে, এবং আমি আপনাকে এটি পরীক্ষা করার জন্য উত্সাহিত করি৷
৷পরিশেষে, আমি বলব যে আমরা ঘোষণামূলক ডেটা মডেল দিয়ে শুরু করেছি, তবে আমাদের আরও অনেক কিছু তৈরি করতে চাই - ডেটা মডেলিং এবং এর বাইরেও। আরও উত্তেজনাপূর্ণ Redis OM বৈশিষ্ট্যের জন্য সাথে থাকুন!