আমার আগের ব্লগ পোস্টে, আমরা ক্যাশিং এর সুবিধা, সাধারণ ক্যাশিং কৌশল, কিভাবে বিভিন্ন কোড নমুনায় Upstash Redis ব্যবহার করে SQL ডাটা ক্যাশে করা যায় তা দেখেছি।
যেহেতু আমরা Upstash Redis এর সাথে SQL কোয়েরি ক্যাশ করার বিশদ এবং সুবিধাগুলি পরীক্ষা করেছি, এখন আমরা আরও এগিয়ে গিয়ে কিছু অ্যাকশন দেখতে পারি। এই উদ্দেশ্যে, ডাটাবেস কোয়েরির জন্য Upstash Redis-এর সাথে ক্যাশিং কীভাবে কাজ করে তা দেখতে আমরা সাধারণত ব্যবহৃত ORM, Prisma দিয়ে শুরু করতে পারি।
এই ব্লগ পোস্টে, আমরা এক্সপ্লোর করব কিভাবে প্রিজমার সাথে আপস্ট্যাশ রেডিসকে একীভূত করতে ক্যাশে-সাইড টেকনিক ব্যবহার করে, ডাটাবেস লোড কমাতে এবং অ্যাপ্লিকেশন কর্মক্ষমতা বৃদ্ধি করে ক্যাশে প্রশ্নগুলিকে ক্যাশে করতে হয়৷
প্রিজমা কি?
প্রিজমা সেট আপ করার আগে, আসুন কিছু শর্ত এবং প্রিজমা কি করে তা দেখে নিই।
প্রথমত, প্রিজমা হল একটি অবজেক্ট রিলেশনাল ম্যাপার (ORM) টুল যা অ্যাপ্লিকেশন এবং একটি ডাটাবেসের মধ্যে একটি ইন্টারফেস প্রদান করে।
ORM হল একটি প্রোগ্রামিং কৌশল যা ডেভেলপারদের কাঁচা SQL কোয়েরি লেখার পরিবর্তে উচ্চ-স্তরের, অবজেক্ট-ওরিয়েন্টেড কোড ব্যবহার করে একটি ডাটাবেসের সাথে যোগাযোগ করতে দেয়। সহজভাবে, এটি একটি সেতু প্রদান করে যা রিলেশনাল ডাটাবেস এবং অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং ভাষাকে সংযুক্ত করে।
একটি ORM ম্যাপ ডাটাবেস টেবিল প্রোগ্রাম্যাটিক ভাষা ক্লাস বা মডেল. একটি টেবিলের প্রতিটি সারি একটি ক্লাসের একটি উদাহরণের সাথে মিলে যায়। এটি মূলত ডেটা মডেলিং যা আমরা অবজেক্ট-ওরিয়েন্টেড ভাষায় লেখা আমাদের অ্যাপ্লিকেশনগুলিতে করি। ORM এটি আমাদের জন্য তৈরি করে এবং এটি SQL কোয়েরি লেখার পরিবর্তে পদ্ধতি প্রদান করে। প্রোগ্রামার CRUD অপারেশন সঞ্চালনের জন্য অবজেক্ট বা ক্লাসের পদ্ধতিগুলিকে কল করতে পারে।
উদাহরণস্বরূপ, একটি users জিজ্ঞাসা করা কাঁচা এসকিউএল-এ টেবিল এইরকম দেখায়:
SELECT * FROM users WHERE id = 1; একটি ORM ব্যবহার করে, একই ক্যোয়ারী দেখতে এইরকম হতে পারে:
const user = await user.findUnique({ where: { id: 1 } }); সুতরাং, একটি ORM ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করার জন্য প্রয়োজনীয় কাজ করে এবং এক্সিকিউটেড প্রোগ্রামে আঁকা ডেটাকে কোডে ব্যবহারযোগ্য করে তোলে, যা ডেভেলপারকে দারুণ সুবিধা দেয়।
প্রিজমা হল সফ্টওয়্যার অ্যাপ্লিকেশনগুলির মধ্যে সবচেয়ে সাধারণ এবং সহজেই ব্যবহারযোগ্য ORMগুলির মধ্যে একটি৷
প্রিজমা কেন একটি ভাল ওআরএম পছন্দ তার কয়েকটি সূচক এখানে রয়েছে:
-
টাইপ-সেফ কোয়েরি :প্রিজমা আপনার ডাটাবেস স্কিমার উপর ভিত্তি করে একটি টাইপস্ক্রিপ্ট ক্লায়েন্ট স্বয়ংক্রিয়ভাবে তৈরি করে, যাতে আপনি রানটাইমের পরিবর্তে বিকাশের সময় ত্রুটিগুলি ধরতে পারেন।
-
সরলীকৃত ডেটা মডেলিং :
schema.prismaদিয়ে ফাইল, আপনি একটি ঘোষণামূলক সিনট্যাক্স ব্যবহার করে আপনার ডাটাবেস কাঠামো সংজ্ঞায়িত করতে পারেন, যা প্রিজমা প্রয়োজনীয় SQL বা API কলগুলিতে অনুবাদ করে। আমরা প্রিজমার মাধ্যমে টেবিল তৈরি করতে এই ফাইলটিতে একটি মডেল কীভাবে লিখতে হয় তার একটি উদাহরণ দেখব। -
মাল্টি-ডেটাবেস সমর্থন :Prisma PostgreSQL, MySQL, SQLite, MongoDB এবং আরও অনেক কিছুর মতো জনপ্রিয় ডাটাবেসের সাথে কাজ করে। আপনি প্রিজমা ডক্সে ডেটাবেসগুলি খুঁজে পেতে পারেন৷
৷ -
মাইগ্রেশন ম্যানেজমেন্ট :প্রিজমা আপনার কোডবেসের সাথে আপনার ডাটাবেস স্কিমাকে সিঙ্কে রাখার জন্য একটি সহজে ব্যবহারযোগ্য মাইগ্রেশন সিস্টেম প্রদান করে৷
ডাটাবেস ব্যবস্থাপনাকে আরও সহজ করার জন্য প্রিজমা CLI এবং স্টুডিও (একটি ওয়েব-ভিত্তিক ডাটাবেস GUI) প্রদান করে।
প্রিজমা সেটআপ
এখন, আসুন দেখি কিভাবে এটি ইনস্টল করা হয় এবং এটি একটি অ্যাপ্লিকেশনে কিভাবে কাজ করে।
যেহেতু এই ব্লগ পোস্টের মূল ফোকাস হচ্ছে প্রিজমা কোয়েরি ক্যাশ করা, তাই প্রিজমা কাজ করার জন্য কিছু প্রিজমা অপারেশন করার জন্য আমরা স্থানীয় ভাষায় খুব সাধারণ SQLite ডাটাবেস ব্যবহার করতে পারি।
আমাদের sqlite3 ইনস্টল করা উচিত প্রথমে নিশ্চিত করতে যে আমাদের অ্যাপ SQLite ডাটাবেসের সাথে সংযোগ করতে এবং তার সাথে ইন্টারঅ্যাক্ট করতে পারে। যেমনটি আমি উল্লেখ করেছি, SQLite সেটআপ শুধুমাত্র একটি ডাটাবেসের সাথে প্রিজমা কীভাবে কাজ করে তা প্রদর্শনের জন্য। আপনার যদি অন্য কোনো পছন্দ থাকে, তাহলে আপনি Prisma ডক্সে প্রিজমার সাথে আপনার ডাটাবেস প্রকারের ইন্টিগ্রেশন খুঁজে পেতে পারেন।
টার্মিনালে প্রজেক্ট ডিরেক্টরিতে যান এবং এখানে SQLite ইনস্টল করুন।
npm install sqlite3 প্রিজমা ওআরএম ব্যবহার করতে সক্ষম হওয়ার জন্য এখন আমাদের প্রিজমা সিএলআই ইনস্টল করা উচিত।
npm install prisma --save-dev
তারপর প্রিজমা শুরু করুন। এই আরম্ভ একটি prisma তৈরি করবে একটি schema.prisma সহ ডিরেক্টরি ফাইল schema.prisma ফাইল যেখানে আপনি আপনার ডাটাবেস গঠন (মডেল, ক্ষেত্র, ইত্যাদি) সংজ্ঞায়িত করেন।
npx prisma init
এখন, আমরা প্রিজমা স্কিমা সংজ্ঞায়িত করব। চলুন prisma/schema.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?
}
আমরা দেখতে পাচ্ছি, আমরা ডাটাবেস ইউআরএল দিই, এর ধরন নির্দেশ করে। যাইহোক, আপনার প্রকল্পে একটি DATABASE_URL পরিবেশ পরিবর্তনশীল সেট করতে ভুলবেন না। অন্যান্য ডাটাবেস ধরনের সংযোগের জন্য, আপনি প্রিজমা ডক্স চেক করতে পারেন। আমাদের নমুনার ক্ষেত্রে, আমরা এটিকে file:./dev.db এ সেট করতে পারি .
তা ছাড়াও, আমরা user সংজ্ঞায়িত করি সারণি তার কলামগুলিকে তাদের প্রকার এবং সীমাবদ্ধতার সাথে সংজ্ঞায়িত করে। আপনি আপনার প্রয়োজন অনুযায়ী বিভিন্ন ডাটাবেস প্রকারের সাথে আরও পরিশীলিত মডেল তৈরি করতে পারেন। কিন্তু এই ডেমোর জন্য, আমরা এই মৌলিক সেটআপের সাথে যেতে পারি।
প্রয়োজনীয় টেবিল তৈরি করে ডাটাবেসের সাথে আমাদের স্কিমা সিঙ্ক করতে, আমাদের মাইগ্রেশন কমান্ড চালানো উচিত। –name পতাকা এই মাইগ্রেশনের নাম দেয়, এটি স্কিমা পরিবর্তনগুলিকে ট্র্যাক করা সহজ করে তোলে৷
npx prisma migrate dev --name init
Prisma ORM সহ আমাদের SQLite ডাটাবেস এখন প্রস্তুত।
Upstash Redis সেটআপ
এটি সম্পূর্ণ করার জন্য দ্রুততম বিভাগ। আমরা এই পদক্ষেপটি হাজার বার করেছি। যাইহোক, আমরা এই ব্লগ পোস্টটিকে শুরু থেকে একটি সম্পূর্ণ নির্দেশিকা তৈরি করার জন্য এখানে দ্রুত পদক্ষেপগুলি অতিক্রম করব৷ যে কেউ এই পদক্ষেপগুলির যে কোনও একটি করেছে, তারা কেবল তাদের প্রয়োজনীয় পদক্ষেপগুলিতে যেতে পারে৷
৷আমরা Upstash কনসোলের মাধ্যমে একটি Redis ডাটাবেস তৈরি করব।
আসুন "ডেটাবেস তৈরি করুন" বোতামে ক্লিক করে একটি রেডিস ডাটাবেস তৈরি করি এবং পপ আপ হওয়া মডেলের ধাপগুলি সম্পূর্ণ করি৷
ডাটাবেসের অঞ্চল নির্বাচন করার সময় Upstash Redis ডাটাবেসের পঠিত প্রতিলিপি নির্বাচন করতে ভুলবেন না। আপনি আমার আগের ব্লগ পোস্টে গ্লোবাল রেডিসের সুবিধাগুলি খুঁজে পেতে পারেন৷
৷

রেডিস ডাটাবেস প্রস্তুত। আমাদের আপস্ট্যাশ রেডিস সেটআপে একমাত্র অবশিষ্ট জিনিসটি হল আমাদের অ্যাপ্লিকেশনে রেডিস ক্লায়েন্টের আরম্ভ করা। এর জন্য, আমাদের প্রথমে Upstash Redis SDK ইনস্টল করতে হবে।
npm install @upstash/redis তারপরে আমাদের উচিত আমাদের Redis এন্ডপয়েন্ট এবং Upstash কনসোল থেকে পাসওয়ার্ড। তারপরে, Redis ক্লায়েন্টকে সেই কোডে কনফিগার করুন যা আমরা Upstash Redis এর সাথে সংযোগ করতে যাচ্ছি।
Upstash Redis এর সাথে প্রিজমা কোয়েরি ক্যাশ করা
আমি এই ব্লগে আগে উল্লেখ করেছি, আমরা ক্যাশে-সাইড কৌশল ব্যবহার করব। এটি করার জন্য, আমরা প্রথমে ক্যাশে পরীক্ষা করব যে প্রদত্ত ক্যোয়ারী দ্বারা অনুরোধ করা ডেটা বিদ্যমান কিনা। যদি বিদ্যমান থাকে, তাহলে আমরা 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() প্যারামিটার সহ পদ্ধতি যা কোয়েরির শর্তগুলিকে সংজ্ঞায়িত করে ডেভেলপারদের একটি কোড বিন্যাসে এসকিউএল ডাটাবেস অনুসন্ধান করতে সক্ষম করে৷
একটি উদাহরণ হিসাবে, আমরা findMany() ব্যবহার করে ব্যবহারকারী টেবিলের সমস্ত ব্যবহারকারীকে পুনরুদ্ধার করতে পারি নিচের মত ফাংশন:
const user = await prisma.user.findMany(); উপসংহার
এই ব্লগ পোস্টে, আমরা প্রিজমা প্রশ্নগুলি ক্যাশ করার জন্য আপস্ট্যাশ রেডিসের সাথে কীভাবে প্রিজমাকে একীভূত করব তা দেখেছি৷
Prisma এবং Upstash Redis উভয়ই বেশ সোজা এবং ব্যবহার করা সহজ। তাদের বিকাশকারী-বান্ধব আর্কিটেকচার ছাড়াও, তারা বেশ প্রভাবশালী। প্রিজমা তার ম্যাপিং বৈশিষ্ট্যের জন্য টন বিকাশের সময় বাঁচাতে পারে যা কোডিং বিন্যাসে ডেটাবেস পরিচালনা সক্ষম করে। Upstash Redis-এর সাথে ক্যাশিং প্রিজমা কোয়েরিগুলি ডেটা পুনরুদ্ধারের বিলম্বকে উল্লেখযোগ্যভাবে হ্রাস করতে পারে এবং অ্যাপ্লিকেশনটির প্রধান SQL ডাটাবেসের উপর লোড কমাতে পারে।
আমি আশা করি এই ব্লগটি আপনাকে সাহায্য করবে!