Redis और Python के लिए सहज ऑब्जेक्ट मैपिंग और फ्लुएंट क्वेरी
मैं Python के लिए Redis OM पेश करने के लिए उत्साहित हूं, Redis के लिए एक शक्तिशाली नई डेवलपर-केंद्रित लाइब्रेरी जो आपको ऑब्जेक्ट मैपिंग, डेटा सत्यापन, और बहुत कुछ जैसी सुविधाएं देती है।
Redis OM for Python का यह पूर्वावलोकन रिलीज आपको घोषणात्मक मॉडल के साथ डेटा मॉडल करने देता है जो SQLAlchemy, Peewee, और Django ORM जैसे ऑब्जेक्ट-रिलेशनल मैपर्स (ORMs) के उपयोगकर्ताओं को घर जैसा महसूस कराएगा।
लेकिन इससे भी अधिक! प्रत्येक Redis OM मॉडल एक Pydantic मॉडल भी है, इसलिए आप Pydantic की मजबूत और विस्तार योग्य डेटा सत्यापन सुविधाओं का उपयोग कर सकते हैं। इसके अलावा, Redis OM मॉडल कहीं भी काम करेंगे जहां एक Python लाइब्रेरी Pydantic मॉडल की अपेक्षा करती है। इसलिए, आप FastAPI के साथ एक Redis OM मॉडल का उपयोग API एंडपॉइंट के लिए स्वचालित रूप से सत्यापन और API दस्तावेज़ उत्पन्न करने के लिए कर सकते हैं।
मेरे दिल के प्रिय एक और विशेषता यह है कि Redis OM फ्लुएंट क्वेरी अभिव्यक्तियों और सेकेंडरी इंडेक्स का समर्थन करता है। Redis OM for Python एक ही लाइब्रेरी में एसिंक्रोनस (asyncio) और सिंक्रोनस प्रोग्रामिंग दोनों का समर्थन करता है। और भयानक सुविधाओं की सूची जारी है!
यह जानने के लिए पढ़ना जारी रखें कि मैंने इस लाइब्रेरी को कैसे बनाया और कुछ प्रमुख सुविधाओं के बारे में पर्दे के पीछे के विवरण। या, यदि आप कोड के साथ खेलने के लिए तैयार हैं, तो आरंभ करने वाला ट्यूटोरियल देखें।
Redis के लिए घोषणात्मक मॉडल
डेवलपर्स आमतौर पर Redis को क्लाइंट लाइब्रेरी के माध्यम से एक्सेस करते हैं ताकि Redis डेटा संरचनाएं (जैसे, हैश) बनाई जा सकें और फिर उनके खिलाफ कमांड चलाए जा सकें।
बहुत से लोग इस कमांड-आधारित इंटरफेस का आनंद लेते हैं क्योंकि यह एक रिलेशनल डेटाबेस के साथ SQL क्वेरी लिखने से सरल है। लेकिन आपने आखिरी बार SQL कब लिखा था? आधुनिक वेब फ्रेमवर्क का उपयोग करने वाले डेवलपर्स घोषणात्मक मॉडल के साथ विशेष रूप से ORMs का उपयोग करते हैं।
मुझे ORMs के बारे में जो पसंद है वह यह है कि वे बहुत सी जटिलता को हटा देते हैं जो उस समस्या से संबंधित नहीं है जिसे आप हल करने की कोशिश कर रहे हैं। हमने Redis OM बनाया ताकि आप अंततः Redis के साथ वही अनुभव प्राप्त कर सकें।
हैश या JSON, आपकी पसंद
Redis OM for Python में दो बेस मॉडल क्लास शामिल हैं जिनका उपयोग आप अपने मॉडल बनाने के लिए कर सकते हैं: HashModel और JsonModel.
ओपन-सोर्स Redis उपयोगकर्ता डेटा को Redis में हैश के रूप में स्टोर करने के लिए HashModel का उपयोग कर सकते हैं, जबकि जिन उपयोगकर्ताओं के पास RedisJSON Redis मॉड्यूल स्थापित है या Redis Enterprise Cloud या Software का उपयोग कर रहे हैं, वे डेटा को नेटिव JSON ऑब्जेक्ट के रूप में स्टोर करने के लिए JsonModel का उपयोग कर सकते हैं। मैं बाद में इन क्लासेस के बीच अंतर के बारे में अधिक बात करूंगा, लेकिन अभी के लिए, हम HashModel. का उपयोग करेंगे।
संक्षिप्त मॉडल परिभाषाएं
इस उदाहरण Redis OM कोड को देखें जो एक Customer मॉडल को परिभाषित करता है और इसका उपयोग Redis में डेटा सहेजने के लिए करता है:
यह संक्षिप्त मॉडल परिभाषा तुरंत आपको `get()` और `save()` जैसी विधियां देती है। पर्दे के पीछे, ये विधियां Redis हैश में डेटा का प्रबंधन करती हैं।
Redis OM हालांकि बहुत कुछ करता है। यह विश्व स्तर पर अद्वितीय और सॉर्टेबल प्राथमिक कुंजी भी उत्पन्न करता है। यह हिस्सा सुपर उपयोगी है, तो मुझे समझाने दें कि यह कैसे काम करता है।
वैश्विक रूप से अद्वितीय प्राथमिक कुंजी
Redis OM प्रत्येक मॉडल इंस्टेंस के लिए स्वचालित रूप से एक विश्व स्तर पर अद्वितीय प्राथमिक कुंजी उत्पन्न करता है। आप इस प्राथमिक कुंजी का उपयोग Redis में मॉडल डेटा को सहेजने और पुनर्प्राप्त करने के लिए कर सकते हैं।
ये प्राथमिक कुंजी विश्व स्तर पर अद्वितीय होने की गारंटी है, लेकिन वे Redis को किसी भी अनुरोध के बिना पूरी तरह से क्लाइंट में उत्पन्न होते हैं। वे सॉर्टेबल और कॉम्पैक्ट भी हैं। यह सब यूनिवर्सली यूनिक लेक्सिकोग्राफिकली सॉर्टेबल आइडेंटिफायर्स (ULID) विशिष्टता के लिए धन्यवाद संभव है।
Redis OM प्राथमिक कुंजी ULIDs हैं, python-ulid के सौजन्य से। आप यहां ULID विशिष्टता के बारे में अधिक पढ़ सकते हैं। यह बहुत अच्छा है!
इन दृढ़ता सुविधाओं के अलावा, हालांकि, आपको Pydantic के साथ डेटा सत्यापन भी मिलता है। आइए देखें कि सत्यापन कैसे काम करता है।
Pydantic के साथ डेटा सत्यापन
Redis और रिलेशनल डेटाबेस के बीच एक अंतर यह है कि Redis स्कीमा को लागू नहीं करता है, इसलिए आप Redis में एक स्ट्रिंग लिख सकते हैं और बाद में इसे एक नंबर से ओवरराइट कर सकते हैं। यह रिलेशनल डेटाबेस की तुलना में अधिक लचीला है, लेकिन इसका मतलब यह भी है कि एप्लिकेशन डेटा सत्यापन के लिए जिम्मेदार हैं।
हम सोचते हैं कि आपको अपने एप्लिकेशन में सत्यापन को संभालने का सबसे अच्छा तरीका निकालने की आवश्यकता नहीं होनी चाहिए, इसलिए प्रत्येक Redis OM मॉडल एक Pydantic मॉडल भी है। इसका मतलब है कि आपको अपने मॉडल में टाइप हिंट के आधार पर Pydantic सत्यापन मिलता है, और आप मानक Pydantic हुक के माध्यम से सत्यापन को नियंत्रित कर सकते हैं, जिसमें कस्टम वैलिडेटर शामिल हैं।
यहां कुछ उदाहरण कोड है जो दिखाता है कि सत्यापन कैसे काम करता है:
यदि Redis OM for Python केवल आपको दृढ़ता विधियां और डेटा सत्यापन देता, तो मुझे लगता कि यह बहुत अच्छा है। लेकिन हम आपके लिए और भी अधिक जटिलता को संभालना चाहते थे, और ऐसा करने के लिए हमें आपको ठीक वैसे ही अभिव्यंजक क्वेरी लिखने में मदद करने की आवश्यकता थी जैसे आप ORM के साथ करेंगे। अगला, मैं इस बारे में बात करूंगा कि ये क्वेरी कैसे काम करती हैं।
फ्लुएंट क्वेरी अभिव्यक्तियां
ORMs सिर्फ आपको घोषणात्मक मॉडल नहीं देते। वे एक API भी प्रदान करते हैं जो आपको प्राथमिक कुंजी के अन्य विशेषताओं के आधार पर डेटा के लिए क्वेरी करने देता है। एक निश्चित आयु से अधिक सभी ग्राहकों को ढूंढना, एक निश्चित तारीख से पहले साइन अप करने वाले ग्राहकों को ढूंढना, आदि की कल्पना करें।
बॉक्स से बाहर, Redis प्राथमिक कुंजी के साथ डेटा को देखने में बहुत अच्छा है। यह आखिरकार एक Key-Value स्टोर है जिसके मान डेटा संरचनाएं हैं। लेकिन Redis में क्वेरीइंग और सेकेंडरी इंडेक्सिंग सिस्टम शामिल नहीं है, इसलिए यदि आप डेटा को इंडेक्स और क्वेरी करना चाहते हैं, तो आपको जटिल तरीकों से इंडेक्स को स्वयं प्रबंधित करना होगा।
यहां फिर से, हम आपके लिए इस जटिलता को संभालना चाहते थे, इसलिए हमने एक आवश्यक Redis मॉड्यूल: RediSearch के शीर्ष पर फ्लुएंट क्वेरी अभिव्यक्तियों का निर्माण किया। RediSearch एक स्रोत-उपलब्ध मॉड्यूल है जो आपको Redis से गायब क्वेरीइंग और इंडेक्सिंग क्षमताएं देता है।
आइए देखें कि क्या होता है यदि हम अपने Customer मॉडल पर कुछ फ़ील्ड को `index=True` के रूप में चिह्नित करते हैं। अब, हम मॉडल का उपयोग करके क्वेरी कर सकते हैं:
यह अभिव्यक्ति सिंटैक्स परिचित लग सकता है—यह Peewee, SQLAlchemy, और Django ORM के बारे में मुझे जो पसंद है उसका मिश्रण है।
एम्बेडेड मॉडल
जैसे ही आप Redis के साथ जटिल डेटा मॉडल करते हैं, आप अनिवार्य रूप से एम्बेडेड डेटा स्टोर करना चाहते हैं। यदि आप Redis हैश का उपयोग करके ग्राहक डेटा मॉडल कर रहे थे, तो आप एक व्यक्तिगत ग्राहक के हैश के भीतर ग्राहक के शिपिंग पते जैसे डेटा को स्टोर करना चाह सकते हैं। दुर्भाग्य से, Redis हैश List, Set, या अन्य हैश जैसे नेस्टेड कंटेनर को स्टोर नहीं कर सकते, इसलिए यह काम नहीं करता।
यहां वह जगह है जहां डेटा को नेटिव 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 के बारे में कितना उत्साहित हूं। मैंने वर्तमान Python पारिस्थितिकी तंत्र के कुछ सर्वश्रेष्ठ को एक साथ लाने के लिए काम किया है ताकि Redis डेवलपर्स के लिए उस जटिलता को संभाला जा सके, जो मेरी राय में, किसी को भी निपटना नहीं चाहिए।
अगर मैंने आपकी रुचि बढ़ाई है, तो आरंभ करने वाला ट्यूटोरियल देखें। Redis OM for Python एक बहुत प्रारंभिक चरण में है, जिसे हम "पूर्वावलोकन" कहते हैं। इसलिए खुरदुरे धब्बे हैं, आप बग में चलेंगे, और हम पूर्ण दस्तावेज़ीकरण देने के लिए अभी भी काम कर रहे हैं। लेकिन दृष्टि वहां है, और मैं आपको इसे देखने के लिए प्रोत्साहित करता हूं।
अंत में, मैं कहूंगा कि हमने घोषणात्मक डेटा मॉडल के साथ शुरुआत की, लेकिन हम बनाना चाहते हैं—डेटा मॉडलिंग के लिए और उससे आगे दोनों के लिए बहुत कुछ। अधिक रोमांचक Redis OM सुविधाओं के लिए बने रहें!