Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Redis

अपस्टैश रेडिस कैशिंग के साथ प्रिज्मा ओआरएम प्रदर्शन को बढ़ावा दें

<पी> मेरे पिछले ब्लॉग पोस्ट में, हमने कैशिंग के लाभों, सामान्य कैशिंग तकनीकों, विभिन्न कोड नमूनों में अपस्टैश रेडिस का उपयोग करके SQL डेटा को कैश करने के तरीके के बारे में जाना।

<पी> जैसा कि हमने अपस्टैश रेडिस के साथ SQL क्वेरी को कैशिंग करने के विवरण और लाभों की जांच की, अब हम आगे बढ़ सकते हैं और कुछ क्रियाएं देख सकते हैं। इस उद्देश्य के लिए, हम आमतौर पर उपयोग किए जाने वाले ORM, प्रिज्मा से शुरुआत कर सकते हैं, ताकि यह देखा जा सके कि डेटाबेस क्वेरी के लिए अपस्टैश रेडिस के साथ कैशिंग कैसे काम करती है।

<पी> इस ब्लॉग पोस्ट में, हम कैश-असाइड तकनीक का उपयोग करके प्रश्नों को कैश करने, डेटाबेस लोड को कम करने और एप्लिकेशन प्रदर्शन को बढ़ावा देने के लिए अपस्टैश रेडिस को प्रिज्मा के साथ एकीकृत करने का तरीका जानेंगे।

प्रिज्मा क्या है?

<पी> प्रिज्मा स्थापित करने से पहले, आइए कुछ शर्तों की जाँच करें और देखें कि प्रिज्मा क्या करता है।

<पी> सबसे पहले, प्रिज्मा एक ऑब्जेक्ट रिलेशनल मैपर (ओआरएम) टूल है जो एप्लिकेशन और डेटाबेस के बीच एक इंटरफ़ेस प्रदान करता है।

<पी> ORM एक प्रोग्रामिंग तकनीक है जो डेवलपर्स को कच्चे SQL क्वेरी लिखने के बजाय उच्च-स्तरीय, ऑब्जेक्ट-ओरिएंटेड कोड का उपयोग करके डेटाबेस के साथ इंटरैक्ट करने की अनुमति देती है। बस, यह एक पुल प्रदान करता है जो रिलेशनल डेटाबेस और ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषाओं को जोड़ता है।

<पी> एक ORM डेटाबेस तालिकाओं को प्रोग्रामेटिक भाषा कक्षाओं या मॉडलों में मैप करता है। तालिका की प्रत्येक पंक्ति एक वर्ग के उदाहरण से मेल खाती है। यह मूल रूप से डेटा मॉडलिंग है जो हम ऑब्जेक्ट-ओरिएंटेड भाषाओं में लिखे गए अपने अनुप्रयोगों में करते हैं। ORM इसे हमारे लिए बनाता है और यह SQL क्वेरी लिखने के बजाय तरीके प्रदान करता है। प्रोग्रामर CRUD संचालन करने के लिए ऑब्जेक्ट या क्लास पर विधियों को कॉल कर सकता है।

<पी> उदाहरण के लिए, users को क्वेरी करना कच्चे SQL में तालिका इस तरह दिखती है:

SELECT * FROM users WHERE id = 1;
<पी> ORM का उपयोग करते हुए, वही क्वेरी इस तरह दिख सकती है:

const user = await user.findUnique({ where: { id: 1 } });
<पी> इसलिए, एक ORM डेटाबेस के साथ इंटरैक्ट करने और निष्पादित प्रोग्राम में खींचे गए डेटा को कोड में प्रयोग करने योग्य बनाने के लिए आवश्यक कार्य करता है, जिससे डेवलपर को बड़ी सुविधा मिलती है।

<पी> प्रिज्मा सॉफ़्टवेयर अनुप्रयोगों में सबसे आम और उपयोग में आसान ORM में से एक है।

<पी> यहां कुछ संकेतक दिए गए हैं कि क्यों प्रिज्मा एक अच्छा ओआरएम विकल्प है:

  • <पी> प्रकार-सुरक्षित क्वेरी :प्रिज्मा आपके डेटाबेस स्कीमा के आधार पर एक टाइपस्क्रिप्ट क्लाइंट को स्वतः उत्पन्न करता है, जिससे यह सुनिश्चित होता है कि आप रनटाइम के बजाय विकास के दौरान त्रुटियों को पकड़ सकें।

  • <पी> सरलीकृत डेटा मॉडलिंग :schema.prisma के साथ फ़ाइल में, आप एक घोषणात्मक सिंटैक्स का उपयोग करके अपनी डेटाबेस संरचना को परिभाषित कर सकते हैं, जिसे प्रिज्मा आवश्यक SQL या API कॉल में अनुवादित करता है। हम प्रिज्मा के माध्यम से तालिका उत्पन्न करने के लिए इस फ़ाइल में एक मॉडल कैसे लिखें इसका एक उदाहरण देखेंगे।

  • <पी> मल्टी-डेटाबेस समर्थन :प्रिज्मा PostgreSQL, MySQL, SQLite, MongoDB और अन्य जैसे लोकप्रिय डेटाबेस के साथ काम करता है। आप प्रिज्मा डॉक्स में डेटाबेस का पता लगा सकते हैं।

  • <पी> प्रवासन प्रबंधन :प्रिज्मा आपके डेटाबेस स्कीमा को आपके कोडबेस के साथ सिंक में रखने के लिए उपयोग में आसान माइग्रेशन सिस्टम प्रदान करता है।

<पी> डेटाबेस प्रबंधन को और भी आसान बनाने के लिए प्रिज्मा सीएलआई और स्टूडियो (एक वेब-आधारित डेटाबेस जीयूआई) भी प्रदान करता है।

प्रिज्मा सेटअप

<पी> अब, आइए देखें कि इसे कैसे इंस्टॉल किया जाता है और यह किसी एप्लिकेशन में कैसे काम करता है।

<पी> चूँकि इस ब्लॉग पोस्ट का मुख्य फोकस प्रिज्मा क्वेरीज़ को कैशिंग करना है, हम प्रिज्मा की कार्यप्रणाली को प्रदर्शित करने के लिए कुछ प्रिज्मा ऑपरेशन करने के लिए स्थानीय रूप से एक बहुत ही सरल SQLite डेटाबेस का उपयोग कर सकते हैं।

<पी> हमें sqlite3 इंस्टॉल करना चाहिए सबसे पहले यह सुनिश्चित करें कि हमारा ऐप SQLite डेटाबेस से कनेक्ट और इंटरैक्ट कर सके। जैसा कि मैंने बताया, SQLite सेटअप केवल यह प्रदर्शित करने के लिए है कि प्रिज्मा डेटाबेस के साथ कैसे काम करता है। यदि आपकी कोई अन्य प्राथमिकताएं हैं, तो आप प्रिज्मा डॉक्स में प्रिज्मा के साथ अपने डेटाबेस प्रकार का एकीकरण पा सकते हैं।

<पी> टर्मिनल में प्रोजेक्ट डायरेक्टरी पर जाएं और यहां SQLite इंस्टॉल करें।

npm install sqlite3
<पी> अब हमें प्रिज्मा ओआरएम का उपयोग करने में सक्षम होने के लिए प्रिज्मा सीएलआई स्थापित करना चाहिए।

npm install prisma --save-dev
<पी> फिर प्रिज्मा को इनिशियलाइज़ करें। यह आरंभीकरण एक prisma बनाएगा schema.prisma वाली निर्देशिका फ़ाइल. schema.prisma फ़ाइल वह जगह है जहां आप अपनी डेटाबेस संरचना (मॉडल, फ़ील्ड इत्यादि) को परिभाषित करते हैं

npx prisma init
<पी> अब, हम प्रिज्मा स्कीमा को परिभाषित करेंगे। चलिए prisma/schema.prisma खोलें एक संपादक में फ़ाइल करें।

<पी> इस फ़ाइल में तीन ब्लॉक हैं. पहला ब्लॉक जनरेटर है जो आपके Node.js एप्लिकेशन में उपयोग किए गए क्लाइंट को उत्पन्न करने के लिए प्रिज्मा को कॉन्फ़िगर करता है। दूसरा डेटासोर्स ब्लॉक है। इस ब्लॉक में, हम प्रिज्मा को कनेक्ट करने के लिए अपने डेटाबेस के बारे में आवश्यक जानकारी देंगे। अंतिम ब्लॉक में डेटाबेस मॉडल शामिल हैं जिन्हें हम अपने डेटाबेस में तालिकाओं और डेटा प्रकारों और बाधाओं सहित उनके क्षेत्रों को परिभाषित कर सकते हैं।

<पी> आइए नीचे एक उदाहरण देखें।

generator client {
 provider = "prisma-client-js"
}
datasource db {
 provider = "sqlite"
 url = env("DATABASE_URL")
}
model user {
 id Int @id @default(autoincrement())
 name String
 email String @unique
 age Int?
}
<पी> जैसा कि हम देख सकते हैं, हम डेटाबेस का प्रकार बताकर उसे यूआरएल देते हैं। वैसे, अपने प्रोजेक्ट में DATABASE_URL पर्यावरण चर सेट करना न भूलें। अन्य डेटाबेस प्रकारों को जोड़ने के लिए, आप प्रिज्मा डॉक्स की जांच कर सकते हैं। हमारे नमूना मामले में, हम इसे केवल file:./dev.db पर सेट कर सकते हैं .

<पी> इसके अलावा, हम user को परिभाषित करते हैं तालिका के स्तंभों को उनके प्रकारों और बाधाओं के साथ परिभाषित करके। आप अपनी आवश्यकता के अनुसार विभिन्न डेटाबेस प्रकारों के साथ अधिक परिष्कृत मॉडल बना सकते हैं। लेकिन इस डेमो के लिए, हम इस बुनियादी सेटअप के साथ जा सकते हैं।

<पी> आवश्यक तालिकाएँ बनाकर अपनी स्कीमा को डेटाबेस के साथ सिंक करने के लिए, हमें माइग्रेशन कमांड चलाना चाहिए। –name फ़्लैग इस माइग्रेशन को नाम देता है, जिससे स्कीमा परिवर्तनों को ट्रैक करना आसान हो जाता है।

npx prisma migrate dev --name init
<पी> प्रिज्मा ORM के साथ हमारा SQLite डेटाबेस अब तैयार है।

अपस्टैश रेडिस सेटअप

<पी> यह पूरा होने वाला सबसे तेज़ अनुभाग है। हमने यह कदम हज़ार बार किया है. हालाँकि, हम इस ब्लॉग पोस्ट को शुरू से ही एक संपूर्ण मार्गदर्शिका बनाने के लिए यहां भी शीघ्रता से कदम उठाएंगे। किसी ने भी इनमें से कोई भी कदम उठाया है, वे बस उन कदमों पर जा सकते हैं जिनकी उन्हें आवश्यकता है।

<पी> हम अपस्टैश कंसोल के माध्यम से एक रेडिस डेटाबेस बनाएंगे।

<पी> आइए "डेटाबेस बनाएं" बटन पर क्लिक करके एक रेडिस डेटाबेस बनाएं और सामने आए मोडल में दिए गए चरणों को पूरा करें।

<पी> डेटाबेस के क्षेत्र का चयन करते समय अपस्टैश रेडिस डेटाबेस की पढ़ी गई प्रतिकृतियों का चयन करना न भूलें। आप मेरे पिछले ब्लॉग पोस्ट में वैश्विक रेडिस के लाभों के बारे में जान सकते हैं।

<पी> अपस्टैश रेडिस कैशिंग के साथ प्रिज्मा ओआरएम प्रदर्शन को बढ़ावा दें

<पी> रेडिस डेटाबेस तैयार है. हमारे अपस्टैश रेडिस सेटअप में एकमात्र शेष चीज़ हमारे एप्लिकेशन में रेडिस क्लाइंट का आरंभीकरण है। इसके लिए हमें सबसे पहले अपस्टैश रेडिस एसडीके इंस्टॉल करना होगा।

npm install @upstash/redis
<पी> फिर हमें अपस्टैश कंसोल से अपना रेडिस एंडपॉइंट और पासवर्ड चाहिए। फिर, रेडिस क्लाइंट को उस कोड में कॉन्फ़िगर करें जिसे हम अपस्टैश रेडिस से कनेक्ट करने जा रहे हैं।

अपस्टैश रेडिस के साथ प्रिज्मा क्वेरीज़ को कैशिंग करना

<पी> जैसा कि मैंने इस ब्लॉग में पहले बताया था, हम कैश-असाइड रणनीति का उपयोग करेंगे। ऐसा करने के लिए, हम पहले कैश की जांच करेंगे कि दी गई क्वेरी द्वारा अनुरोधित डेटा मौजूद है या नहीं। यदि मौजूद है, तो हम इसे अपस्टैश रेडिस से लाएंगे और वापस कर देंगे। अन्यथा, हम उपरोक्त अनुभाग में उत्पन्न प्रिज्मा क्लाइंट का उपयोग करके SQL डेटाबेस को क्वेरी करेंगे और SQL डेटाबेस से पुनर्प्राप्त डेटा के साथ कैश को पॉप्युलेट करेंगे।

import { Redis } from '@upstash/redis';
import { PrismaClient } from "@prisma/client";
 
const prisma = new PrismaClient();
 
const redis = new Redis({
 url: '<UPSTASH-REDIS-ENDPOINT>',
 token: '<UPSTASH-REDIS-TOKEN>',
})
 
async function getUser(userId: string) {
 const cacheKey = `user:${userId}`;
 
 // Check cache
 const cachedUser = await redis.get(cacheKey);
 if (cachedUser) {
 console.log("Cache hit");
 return JSON.parse(cachedUser);
 }
 
 // Query database
 console.log("Cache miss");
 const user = await prisma.user.findUnique({
 where: { id: userId },
 });
 // Store in cache
 if (user) {
 await redis.set(cacheKey, JSON.stringify(user), { ex: 3600 }); // Cache for 1 hour
 }
 return user;
}
<पी> जैसा कि इस उदाहरण में देखा जा सकता है, prisma.<tableName>.findUnique() पैरामीटर वाली विधि जो क्वेरी की शर्तों को परिभाषित करती है, डेवलपर्स को कोड प्रारूप में SQL डेटाबेस को क्वेरी करने में सक्षम बनाती है।

<पी> उदाहरण के तौर पर, हम findMany() का उपयोग करके उपयोगकर्ता तालिका में सभी उपयोगकर्ताओं को पुनः प्राप्त कर सकते हैं नीचे दिए अनुसार कार्य करें:

const user = await prisma.user.findMany();

निष्कर्ष

<पी> इस ब्लॉग पोस्ट में, हमने जाना कि प्रिज्मा प्रश्नों को कैशिंग करने के लिए प्रिज्मा को अपस्टैश रेडिस के साथ कैसे एकीकृत किया जाए।

<पी> प्रिज्मा और अपस्टैश रेडिस दोनों ही काफी सरल और उपयोग में आसान हैं। अपने डेवलपर-अनुकूल आर्किटेक्चर के अलावा, वे काफी प्रभावशाली हैं। प्रिज्मा अपने मैपिंग फीचर की बदौलत विकास का बहुत सारा समय बचा सकता है जो कोडिंग प्रारूप में डेटाबेस प्रबंधन को सक्षम बनाता है। अपस्टैश रेडिस के साथ प्रिज्मा क्वेरी को कैशिंग करने से डेटा पुनर्प्राप्ति की विलंबता भी काफी कम हो सकती है और एप्लिकेशन के मुख्य SQL डेटाबेस पर लोड कम हो सकता है।

<पी> मुझे आशा है कि यह ब्लॉग आप सभी की मदद करेगा!


  1. कैसे जांचें कि पृष्ठभूमि में कोई एंड्रॉइड एप्लिकेशन चल रहा है या नहीं? कैसे जांचें कि पृष्ठभूमि में कोई एंड्रॉइड एप्लिकेशन चल रहा है या नहीं?

    यह उदाहरण दर्शाता है कि मैं कैसे जांच सकता हूं कि पृष्ठभूमि में कोई एंड्रॉइड एप्लिकेशन चल रहा है या नहीं। चरण 1 - एंड्रॉइड स्टूडियो में एक नया प्रोजेक्ट बनाएं, फाइल ⇒ न्यू प्रोजेक्ट पर जाएं और एक नया प्रोजेक्ट बनाने के लिए सभी आवश्यक विवरण भरें। चरण 2 - निम्न कोड को res/layout/activity_main.xml मे

  1. अपनी प्रतिक्रियाशील साइट पर स्प्लैश वेक्टर ग्राफिक्स का उपयोग कैसे करें? अपनी प्रतिक्रियाशील साइट पर स्प्लैश वेक्टर ग्राफिक्स का उपयोग कैसे करें?

    आपकी प्रतिक्रियाशील साइट के ग्राफ़िक्स इसे धीमा कर सकते हैं, लेकिन वेक्टर ग्राफ़िक्स के साथ इसे संतुलित करने से बैंडविड्थ को कम करने में मदद मिल सकती है। इसके जरिए मोबाइल साइट पर भी कमाल के ग्राफिक्स बढ़िया काम करते हैं। आम तौर पर, इस उद्देश्य के लिए कैनवास और एसवीजी का उपयोग किया जाता है। मल्टीपल स

  1. HTML इनपुट बॉक्स को कैसे सीमित करें ताकि वह केवल संख्यात्मक इनपुट स्वीकार करे? HTML इनपुट बॉक्स को कैसे सीमित करें ताकि वह केवल संख्यात्मक इनपुट स्वीकार करे?

    संख्यात्मक इनपुट स्वीकार करने के लिए HTML इनपुट बॉक्स को सीमित करने के लिए, का उपयोग करें। इससे आपको एक न्यूमेरिक इनपुट फील्ड मिलेगा। इनपुट बॉक्स को नंबर तक सीमित करने के बाद, यदि कोई उपयोगकर्ता टेक्स्ट में प्रवेश करता है और सबमिट बटन दबाता है, तो निम्नलिखित देखा जा सकता है कृपया एक नंबर दर्ज करें