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

अपस्टैश रेडिस कैशिंग के साथ Prisma ORM परफॉरमेंस बूस्ट करें

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

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

इस ब्लॉग पोस्ट में, हम पता लगाएंगे कि कैश-असाइड तकनीक का उपयोग करके Prisma को अपस्टैश रेडिस के साथ कैसे इंटीग्रेट करें, डेटाबेस लोड कम करें, और एप्लिकेशन परफॉरमेंस को बूस्ट करें।

Prisma क्या है?

Prisma सेट अप करने से पहले, आइए कुछ टर्म्स देखें और Prisma क्या करता है।

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

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

एक ORM डेटाबेस टेबल्स को प्रोग्रामेटिक लैंग्वेज क्लासेस या मॉडल्स में मैप करता है। टेबल में प्रत्येक रो क्लास के एक इंस्टेंस से मेल खाता है। यह मूल रूप से डेटा मॉडलिंग है जो हम ऑब्जेक्ट-ओरिएंटेड लैंग्वेजेज में लिखे गए अपने एप्लिकेशन में करते हैं। ORM यह हमारे लिए करता है और SQL क्वेरीज़ लिखने के बजाय मेथड्स प्रदान करता है। प्रोग्रामर ऑब्जेक्ट्स या क्लासेस पर मेथड्स कॉल करके CRUD ऑपरेशन कर सकता है।

उदाहरण के लिए, रॉ SQL में users टेबल को क्वेरी करना ऐसा दिखता है:

SELECT * FROM users WHERE id = 1;

ORM का उपयोग करके, वही क्वेरी ऐसी दिख सकती है:

const user = await user.findUnique({ where: { id: 1 } });

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

Prisma सॉफ्टवेयर एप्लिकेशन में सबसे आम और उपयोग में आसान ORMs में से एक है।

यहां कुछ संकेतक हैं कि Prisma एक अच्छा ORM विकल्प क्यों है:

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

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

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

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

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

Prisma सेटअप

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

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

हमें पहले sqlite3 इंस्टॉल करना चाहिए ताकि यह सुनिश्चित हो सके कि हमारा ऐप SQLite डेटाबेस से कनेक्ट और इंटरैक्ट कर सके। जैसा कि मैंने उल्लेख किया, SQLite सेटअप सिर्फ यह प्रदर्शित करने के लिए है कि Prisma डेटाबेस के साथ कैसे काम करता है। यदि आपकी कोई अन्य प्राथमिकताएं हैं, तो आप Prisma डॉक्स में अपने डेटाबेस टाइप के साथ Prisma के इंटीग्रेशन को ढूंढ सकते हैं।

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

npm install sqlite3

अब हमें Prisma CLI इंस्टॉल करना चाहिए ताकि Prisma ORM का उपयोग किया जा सके।

npm install prisma --save-dev

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

npx prisma init

अब, हम Prisma स्कीमा को परिभाषित करेंगे। आइए एक एडिटर में prisma/schema.prisma फ़ाइल खोलें।

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

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

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? 
}

जैसा कि हम देख सकते हैं, हम डेटाबेस URL देते हैं, इसके टाइप को इंगित करके। वैसे, अपने प्रोजेक्ट में DATABASE_URL एनवायरनमेंट वेरिएबल सेट करना न भूलें। अन्य डेटाबेस टाइप्स से कनेक्ट करने के लिए, आप Prisma डॉक्स चेक कर सकते हैं। हमारे सैंपल केस में, हम इसे केवल file:./dev.db पर सेट कर सकते हैं।

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

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

npx prisma migrate dev --name init 

Prisma ORM के साथ हमारा SQLite डेटाबेस अब तैयार है।

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

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

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

"Create database" बटन पर क्लिक करके एक रेडिस डेटाबेस बनाएं और पॉप-अप मोडल में चरणों को पूरा करें।

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

अपस्टैश रेडिस कैशिंग के साथ Prisma ORM परफॉरमेंस बूस्ट करें

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

npm install @upstash/redis

फिर हमें अपस्टैश कंसोल से अपना रेडिस एंडपॉइंट और पासवर्ड लेना चाहिए। फिर, उस कोड में रेडिस क्लाइंट को कॉन्फ़िगर करें जिससे हम अपस्टैश रेडिस से कनेक्ट करने जा रहे हैं।

अपस्टैश रेडिस के साथ Prisma क्वेरीज़ कैश करना

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

import { Redis } from '@upstash/redis'; 
import { PrismaClient } from "@prisma/client"; 
const prisma = new PrismaClient(); 
const redis = new Redis({ 
  url: '', 
  token: '', 
}) 
async function getUser(userId: string) { 
  const cacheKey = `user:${userId}`; 
  // कैश जांचें 
  const cachedUser = await redis.get(cacheKey); 
  if (cachedUser) { 
    console.log("Cache hit"); 
    return JSON.parse(cachedUser); 
  } 
  // डेटाबेस क्वेरी करें 
  console.log("Cache miss"); 
  const user = await prisma.user.findUnique({ 
    where: { 
      id: userId 
    }, 
  }); 
  // कैश में स्टोर करें 
  if (user) { 
    await redis.set(cacheKey, JSON.stringify(user), { 
      ex: 3600 
    }); // 1 घंटे के लिए कैश करें 
  } 
  return user; 
}

जैसा कि इस उदाहरण में देखा जा सकता है, prisma.<tableName>.findUnique() मेथड क्वेरी की शर्तों को परिभाषित करने वाले पैरामीटर के साथ डेवलपर्स को कोड फॉर्मेट में SQL डेटाबेस को क्वेरी करने में सक्षम बनाता है।

सिर्फ एक उदाहरण के रूप में, हम findMany() फंक्शन का उपयोग करके यूजर टेबल में सभी यूजर्स को प्राप्त कर सकते हैं जैसा कि नीचे दिखाया गया है:

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

निष्कर्ष

इस ब्लॉग पोस्ट में, हमने Prisma को अपस्टैश रेडिस के साथ इंटीग्रेट करने के बारे में जाना Prisma क्वेरीज़ को कैश करने के लिए।

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

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

  1. C++ में एक रेखा पर अधिकतम बिंदु C++ में एक रेखा पर अधिकतम बिंदु

    मान लीजिए हमारे पास एक 2D तल है। हमें उन अधिकतम बिंदुओं की संख्या ढूंढनी है जो एक ही सीधी रेखा पर स्थित हैं। तो यदि बिंदु इस तरह हैं -तो 4 बिंदु हैंइसे हल करने के लिए, हम निम्नलिखित चरणों का पालन करेंगे -n := बिंदुओं की संख्या, यदि n < 3, तो n लौटाएंans := 2i को 1 से n - 1 तक की रेंज मेंcount := 0इं

  1. अपने प्रोजेक्ट में Django डिबग टूलबार कैसे जोड़ें? अपने प्रोजेक्ट में Django डिबग टूलबार कैसे जोड़ें?

    Django टूलबॉक्स एक डिबगिंग टूल है जिसका उपयोग डेटाबेस क्वेरीज, Django वेबसाइट लोडिंग स्पीड, और कई अन्य चीजों को डीबग करने के लिए किया जाता है। डिबग टूलबार डेवलपर्स के बीच बहुत लोकप्रिय है और हर कोई इसका उपयोग कर रहा है। तो, आइए देखें कि इसे कैसे इम्प्लीमेंट किया जाए। उदाहरण ऐप बनाएं myapp नाम से

  1. HTML onkeypress इवेंट एट्रिब्यूट HTML onkeypress इवेंट एट्रिब्यूट

    विवरण HTML onkeypress इवेंट एट्रिब्यूट तब ट्रिगर होता है जब उपयोगकर्ता कीबोर्ड पर कोई कुंजी दबाता है। सिंटैक्स <tagname onkeypress=script>Content</tagname> उदाहरण आइए HTML onkeypress इवेंट एट्रिब्यूट का एक उदाहरण देखें: <!DOCTYPE html> <html> <head> <style>