Redis और Python के लिए सहज ऑब्जेक्ट मैपिंग और फ़्लुएंट क्वेरीज़
मैं पाइथन के लिए रेडिस ओएम पेश करने के लिए उत्साहित हूं, रेडिस के लिए एक शक्तिशाली नई डेवलपर-केंद्रित लाइब्रेरी जो आपको ऑब्जेक्ट मैपिंग, डेटा सत्यापन, और बहुत कुछ जैसी सुविधाएं प्रदान करती है।
पायथन के लिए रेडिस ओएम की यह पूर्वावलोकन रिलीज़ आपको घोषणात्मक मॉडल के साथ डेटा मॉडल करने देती है जो ऑब्जेक्ट-रिलेशनल मैपर (ओआरएम) जैसे SQLAlchemy, Peeeee, और Django ORM के उपयोगकर्ताओं के लिए घर पर सही महसूस करेगा।
लेकिन और भी है! प्रत्येक रेडिस ओएम मॉडल भी एक पाइडैंटिक मॉडल है, इसलिए आप पाइडैंटिक की मजबूत और एक्स्टेंसिबल डेटा सत्यापन सुविधाओं का उपयोग कर सकते हैं। इसके अलावा, रेडिस ओएम मॉडल कहीं भी काम करेगा जहां एक पायथन पुस्तकालय पाइडेंटिक मॉडल की अपेक्षा करता है। तो, आप एपीआई एंडपॉइंट के लिए एपीआई दस्तावेज को स्वचालित रूप से मान्य और उत्पन्न करने के लिए फास्टएपीआई के साथ एक रेडिस ओएम मॉडल का उपयोग कर सकते हैं।
मेरे दिल को प्रिय एक और विशेषता यह है कि रेडिस ओएम धाराप्रवाह क्वेरी अभिव्यक्तियों और माध्यमिक अनुक्रमणिका का समर्थन करता है। पायथन के लिए रेडिस ओएम भी एक ही पुस्तकालय में एसिंक्रोनस (एसिंसीओ) और सिंक्रोनस प्रोग्रामिंग दोनों का समर्थन करता है। और शानदार सुविधाओं की सूची जारी है!
यह जानने के लिए पढ़ना जारी रखें कि मैंने इस पुस्तकालय का निर्माण कैसे किया और कुछ प्रमुख विशेषताओं के बारे में पर्दे के पीछे का विवरण। या, यदि आप कोड के साथ खेलने के लिए तैयार हैं, तो आरंभ करना ट्यूटोरियल देखें।
Redis के लिए डिक्लेरेटिव मॉडल
डेवलपर आमतौर पर Redis डेटा संरचना create बनाने के लिए क्लाइंट लाइब्रेरी के माध्यम से Redis को एक्सेस करते हैं (उदा., हैश) और फिर कमांड उनके खिलाफ।
बहुत से लोग इस कमांड-आधारित इंटरफ़ेस का आनंद लेते हैं क्योंकि यह एक रिलेशनल डेटाबेस के साथ SQL क्वेरी लिखने से आसान है। लेकिन आपने आखिरी बार SQL कब लिखा था? आधुनिक वेब ढांचे का उपयोग करने वाले डेवलपर्स इसके बजाय ओआरएम का उपयोग करते हैं, खासकर घोषणात्मक मॉडल के साथ।
ओआरएम के बारे में मुझे जो पसंद है वह यह है कि वे बहुत सारी जटिलता को दूर करते हैं जो उस समस्या से संबंधित नहीं है जिसे आप हल करने का प्रयास कर रहे हैं। हमने Redis OM बनाया है ताकि आप अंततः Redis के साथ वही अनुभव प्राप्त कर सकें।
हैश या JSON, आपकी पसंद
पायथन के लिए रेडिस ओएम में दो आधार मॉडल वर्ग शामिल हैं जिनका उपयोग आप अपने मॉडल बनाने के लिए कर सकते हैं:HashModel और JsonModel.
ओपन-सोर्स रेडिस उपयोगकर्ता HashModel . का उपयोग कर सकते हैं Redis में डेटा को हैश के रूप में संग्रहीत करने के लिए, जबकि जिन उपयोगकर्ताओं के पास RedisJSON Redis मॉड्यूल स्थापित है या वे Redis Enterprise Cloud या सॉफ़्टवेयर का उपयोग कर रहे हैं, वे JsonModel का उपयोग कर सकते हैं डेटा को मूल रूप से JSON ऑब्जेक्ट्स के रूप में संग्रहीत करने के लिए। मैं इन कक्षाओं के बीच अंतर के बारे में बाद में बात करूंगा, लेकिन अभी के लिए, हम HashModel का उपयोग करेंगे।
संक्षिप्त मॉडल परिभाषाएं
इस उदाहरण पर एक नज़र डालें Redis OM कोड जो एक ग्राहक . को परिभाषित करता है मॉडल और डेटा को रेडिस में सहेजने के लिए इसका उपयोग करता है:
यह संक्षिप्त मॉडल परिभाषा आपको तुरंत 'प्राप्त ()' और 'सहेजें ()' जैसी विधियाँ प्रदान करती है। पर्दे के पीछे, ये तरीके रेडिस हैश में डेटा का प्रबंधन करते हैं।
रेडिस ओम हालांकि बहुत कुछ करता है। यह विश्व स्तर पर अद्वितीय और क्रमबद्ध प्राथमिक कुंजी भी उत्पन्न करता है। यह हिस्सा बहुत उपयोगी है, इसलिए मैं समझाता हूं कि यह कैसे काम करता है।
विश्व स्तर पर अद्वितीय प्राथमिक कुंजी
Redis OM स्वचालित रूप से प्रत्येक मॉडल उदाहरण के लिए एक विश्व स्तर पर अद्वितीय प्राथमिक कुंजी उत्पन्न करता है। Redis में मॉडल डेटा को सहेजने और पुनर्प्राप्त करने के लिए आप इस प्राथमिक कुंजी का उपयोग कर सकते हैं।
इन प्राथमिक कुंजियों को विश्व स्तर पर अद्वितीय होने की गारंटी है, लेकिन वे रेडिस के किसी भी अनुरोध के बिना क्लाइंट में पूरी तरह से उत्पन्न होते हैं। वे क्रमबद्ध और कॉम्पैक्ट भी हैं। यह सब यूनिवर्सली यूनिक लेक्सिकोग्राफ़िकली सॉर्टेबल आइडेंटिफ़ायर्स (ULID) स्पेसिफिकेशन की बदौलत संभव हुआ है।
Redis OM प्राथमिक कुंजियाँ ULIDs हैं, जो कि python-ulid के सौजन्य से हैं। आप यहां यूएलआईडी विनिर्देश के बारे में अधिक पढ़ सकते हैं। यह बहुत अच्छा है!इन दृढ़ता सुविधाओं के अलावा, हालांकि, आपको पाइडेंटिक के साथ डेटा सत्यापन भी मिलता है। आइए देखें कि सत्यापन कैसे काम करता है।
Pydantic के साथ डेटा सत्यापन
रेडिस और रिलेशनल डेटाबेस के बीच एक अंतर यह है कि रेडिस एक स्कीमा को लागू नहीं करता है, इसलिए आप रेडिस में एक स्ट्रिंग लिख सकते हैं और फिर इसे बाद में एक नंबर के साथ अधिलेखित कर सकते हैं। यह रिलेशनल डेटाबेस की तुलना में अधिक लचीला है, लेकिन इसका मतलब यह भी है कि एप्लिकेशन डेटा सत्यापन के लिए जिम्मेदार हैं।
हमें लगता है कि आपको अपने अनुप्रयोगों में सत्यापन को संभालने का सबसे अच्छा तरीका नहीं समझना चाहिए, इसलिए प्रत्येक रेडिस ओएम मॉडल भी एक पाइडैंटिक मॉडल है। इसका मतलब है कि आप अपने मॉडल में प्रकार के संकेतों के आधार पर पाइडैनटिक सत्यापन प्राप्त करते हैं, और आप कस्टम सत्यापनकर्ताओं सहित मानक पाइडेंटिक हुक के माध्यम से सत्यापन को नियंत्रित कर सकते हैं।
यहां कुछ उदाहरण कोड दिया गया है जो दिखाता है कि सत्यापन कैसे काम करता है:
यदि पाइथन के लिए रेडिस ओएम आपको केवल दृढ़ता के तरीके और डेटा सत्यापन देता है, तो मुझे लगता है कि यह बहुत अच्छा था। लेकिन हम आपके लिए और भी अधिक जटिलता को संभालना चाहते थे, और ऐसा करने के लिए हमें एक ओआरएम की तरह ही आपको अभिव्यंजक प्रश्न लिखने में मदद करने की आवश्यकता थी। इसके बाद, मैं इस बारे में बात करूंगा कि ये क्वेरी कैसे काम करती हैं।
धाराप्रवाह क्वेरी भाव
ओआरएम आपको केवल घोषणात्मक मॉडल नहीं देते हैं। वे एक एपीआई भी प्रदान करते हैं जो आपको अन्य attributes विशेषताओं के आधार पर डेटा के लिए क्वेरी करने देता है प्राथमिक कुंजी की तुलना में। एक निश्चित आयु से अधिक के सभी ग्राहकों, एक निश्चित तिथि से पहले साइन अप करने वाले ग्राहकों आदि को खोजने की कल्पना करें।
बॉक्स से बाहर, प्राथमिक कुंजी के साथ डेटा देखने में रेडिस बहुत अच्छा है। आखिरकार, यह एक की-वैल्यू स्टोर है जिसका मूल्य डेटा संरचनाएं हैं। लेकिन रेडिस में क्वेरी और सेकेंडरी इंडेक्सिंग सिस्टम शामिल नहीं है, इसलिए यदि आप डेटा को इंडेक्स और क्वेरी करना चाहते हैं, तो आपको जटिल तरीकों से इंडेक्स को स्वयं प्रबंधित करना होगा।
यहां फिर से, हम आपके लिए इस जटिलता को संभालना चाहते थे, इसलिए हमने एक आवश्यक रेडिस मॉड्यूल के शीर्ष पर धाराप्रवाह क्वेरी एक्सप्रेशन बनाए:RediSearch। RediSearch एक स्रोत-उपलब्ध मॉड्यूल है जो आपको Redis से अनुपलब्ध क्वेरी और अनुक्रमण क्षमता देता है।
आइए देखें कि क्या होता है यदि हम अपने ग्राहक . पर कुछ फ़ील्ड चिह्नित करते हैं मॉडल `इंडेक्स =ट्रू` के रूप में। अब, हम क्वेरी करने के लिए मॉडल का उपयोग कर सकते हैं:
यह एक्सप्रेशन सिंटैक्स जाना-पहचाना लग सकता है—यह उन सभी चीज़ों का मिश्रण है जो मुझे Peeeee, SQLAlchemy और Django ORM के बारे में पसंद हैं।
एम्बेडेड मॉडल
जैसा कि आप रेडिस के साथ जटिल डेटा मॉडल करते हैं, आप अनिवार्य रूप से एम्बेडेड डेटा को स्टोर करना चाहते हैं। यदि आप रेडिस हैश का उपयोग करके ग्राहक डेटा की मॉडलिंग कर रहे थे, तो हो सकता है कि आप ग्राहक के शिपिंग पते जैसे डेटा को एक व्यक्तिगत ग्राहक के हैश में संग्रहीत करना चाहें। दुर्भाग्य से, रेडिस हैश नेस्टेड कंटेनर जैसे सूची, सेट, या अन्य हैश को स्टोर नहीं कर सकता है, इसलिए यह काम नहीं करता है।
यहां वह जगह है जहां डेटा को मूल JSON ऑब्जेक्ट के रूप में संग्रहीत करना बहुत मायने रखता है। यदि आप ग्राहक डेटा को JSON दस्तावेज़ के रूप में मॉडल करते हैं, तो आप किसी एकल ग्राहक के लिए रिकॉर्ड में जो चाहें एम्बेड कर सकते हैं।
हालाँकि, रेडिस मूल रूप से JSON का समर्थन नहीं करता है। यही कारण है कि हमने स्रोत-उपलब्ध RedisJSON मॉड्यूल बनाया है। RedisJSON एक दस्तावेज़ डेटाबेस के रूप में Redis का उपयोग करना संभव बनाता है, जटिल JSON ऑब्जेक्ट्स को आसानी से संग्रहीत और क्वेरी करता है।
पायथन के लिए रेडिस ओएम के साथ, यदि आपके रेडिस इंस्टेंस में रेडिसजसन स्थापित है, तो आप JsonModel का उपयोग कर सकते हैं कक्षा। यह मॉडल वर्ग आपको JsonModels . एम्बेड करने देता है अन्य JsonModels . के भीतर . कल्पना कीजिए कि ग्राहकों के पास कई ऑर्डर हैं, जिनमें से प्रत्येक के पास कई आइटम हैं, इत्यादि।
यहां बताया गया है कि पाइथन के लिए रेडिस ओएम के साथ एम्बेडेड JSON मॉडल कैसा दिखता है:
न केवल आपको जटिल JSON ऑब्जेक्ट्स को स्टोर करने की सुविधा मिलती है, बल्कि Python के लिए Redis OM इन नेस्टेड संरचनाओं से अवगत है और आपको उनके विरुद्ध क्वेरी एक्सप्रेशन लिखने देता है। बहुत बढ़िया!
पायथन के लिए Redis OM आज़माना
मुझे उम्मीद है कि आप बता सकते हैं कि मैं पाइथन के लिए रेडिस ओएम को लेकर कितना उत्साहित हूं। मैंने रेडिस डेवलपर्स के लिए जटिलता को संभालने के लिए वर्तमान पायथन पारिस्थितिकी तंत्र में से कुछ को एक साथ लाने के लिए काम किया है, मेरी राय में, किसी को भी इससे निपटना नहीं चाहिए।
यदि मैंने आपकी रुचि को बढ़ाया है, तो आरंभ करना ट्यूटोरियल देखें। पायथन के लिए रेडिस ओएम बहुत प्रारंभिक चरण में है, जिसे हम "पूर्वावलोकन" कहते हैं। तो वहाँ मोटे धब्बे हैं, आप बग में भाग लेंगे, और हम अभी भी पूर्ण दस्तावेज देने के लिए काम कर रहे हैं। लेकिन दृष्टि है, और मैं आपको इसे देखने के लिए प्रोत्साहित करता हूं।
अंत में, मैं कहूंगा कि हमने घोषणात्मक डेटा मॉडल के साथ शुरुआत की, लेकिन हमारे पास और भी बहुत कुछ है जिसे हम बनाना चाहते हैं- डेटा मॉडलिंग और उससे आगे दोनों के लिए। अधिक रोमांचक रेडिस ओएम सुविधाओं के लिए बने रहें!