Caching কি?
Caching হল একটি প্রক্রিয়া যেখানে তথ্যের একটি কপি দ্রুত অ্যাক্সেসের জন্য সিস্টেমে সংরক্ষণ করা হয়। যখন একটি ডেটা পুনরায় প্রয়োজন হয়, তখন সেটি সরাসরি মূল উৎস (যেমন, ডেটাবেস) থেকে না নিয়ে, কনফিগার করা ক্যাশ থেকে আনা হয়। এর ফলে অ্যাপ্লিকেশনটির পারফরম্যান্স উন্নত হয় এবং ডেটাবেস বা অন্য যেকোনো বহিরাগত পরিষেবায় কম লোড পড়ে।
TypeORM এর মাধ্যমে ডেটাবেস সম্পর্কিত ক্যাশিং ব্যবস্থাপনা করা সম্ভব, যা আপনাকে দ্রুত এবং দক্ষ ডেটা অ্যাক্সেসের সুবিধা দেয়।
Caching এর প্রয়োজনীয়তা
- পারফরম্যান্স বৃদ্ধি: ডেটাবেস থেকে প্রতিবার তথ্য নিয়ে আসার পরিবর্তে, ক্যাশিং সিস্টেম ব্যবহারের মাধ্যমে ডেটা দ্রুত পাওয়া যায়, ফলে সার্ভার পারফরম্যান্স অনেকটাই বৃদ্ধি পায়। এতে সার্ভারের লোড কমে এবং অ্যাপ্লিকেশনটি দ্রুত রেসপন্স দেয়।
- ডেটাবেসের উপর চাপ কমানো: ক্যাশিং ব্যবহারের মাধ্যমে ডেটাবেসে প্রতিবার একই কুয়েরি পাঠানো এড়ানো যায়, যা ডেটাবেসের উপর অপ্রয়োজনীয় চাপ কমায়। এতে ডেটাবেসের পারফরম্যান্সও উন্নত হয়।
- অন্তর্বর্তী ডেটা প্রদান: যখন ডেটাবেস বা সার্ভিসের কোনো অংশে সমস্যা হয়, তখন ক্যাশে থাকা ডেটা ব্যবহার করে অ্যাপ্লিকেশন চালু রাখা যায়, যা ইউজারের অভিজ্ঞতাকে ক্ষতিগ্রস্ত হতে দেয় না।
- ব্যবহারকারী অভিজ্ঞতা উন্নয়ন: ক্যাশিংয়ের মাধ্যমে দ্রুত লোডিং টাইম পাওয়া যায়, যার ফলে ব্যবহারকারীর অভিজ্ঞতা উন্নত হয়। এতে অ্যাপ্লিকেশনটি আরও প্রতিক্রিয়া প্রদানকারী এবং ব্যবহারকারী-বান্ধব হয়ে ওঠে।
TypeORM এ Caching ব্যবহার
TypeORM ডেটাবেসের জন্য ক্যাশিং সিস্টেম কনফিগার এবং ব্যবহারের সুবিধা প্রদান করে। TypeORM-এ ক্যাশিং ব্যবহারের মাধ্যমে আপনি কিছু সাধারণ অপারেশন যেমন find(), findOne(), count(), query() ইত্যাদি ক্যাশে রাখতে পারেন।
TypeORM ক্যাশিং এর ব্যবহার:
- Query Result Caching: TypeORM ক্যাশিংকে ডেটা ফেচিং অপারেশনের সাথে সংযুক্ত করে দেয়, যাতে একই কুয়েরি পুনরায় চালানো হলে আগের ফলাফল ব্যবহার করা যায়।
উদাহরণ:
import { createConnection } from "typeorm";
import { User } from "./entity/User";
createConnection().then(async connection => {
const userRepository = connection.getRepository(User);
// Enable query result caching for this query (with a 1000ms TTL)
const users = await userRepository.find({
cache: {
id: "users_cache", // Unique cache id
milliseconds: 1000 // TTL (Time To Live) in ms
}
});
console.log(users);
}).catch(error => console.log(error));
এখানে, find() ফাংশনটি ক্যাশিং সক্ষম করেছে এবং একটি নির্দিষ্ট TTL (Time To Live) দিয়ে সেটি ক্যাশে রাখবে। যখন একই কুয়েরি আবার চালানো হবে, তখন ক্যাশ থেকে ফলাফল নেয়া হবে, যদি ক্যাশের মেয়াদ শেষ না হয়ে থাকে।
- Global Caching Configuration: আপনি TypeORM-এ সার্বিক ক্যাশিং কনফিগারেশন করতে পারেন যা ডেটাবেসের সমস্ত কুয়েরি ও অপারেশনে ক্যাশিং প্রভাব ফেলবে।
উদাহরণ:
import { createConnection } from "typeorm";
import { User } from "./entity/User";
createConnection({
type: "mysql",
host: "localhost",
port: 3306,
username: "test",
password: "test",
database: "test",
entities: [User],
synchronize: true,
cache: true // Enable global query result caching
}).then(async connection => {
const userRepository = connection.getRepository(User);
// The query will be cached automatically as global cache is enabled
const users = await userRepository.find();
console.log(users);
}).catch(error => console.log(error));
এখানে, cache: true সিস্টেমের সারা ডেটাবেসের জন্য ক্যাশিং সক্রিয় করেছে, যার ফলে সমস্ত find(), findOne() ইত্যাদি অপারেশনে ক্যাশ ব্যবহৃত হবে।
TypeORM ক্যাশিং কনফিগারেশন এবং অপশনস
TypeORM ক্যাশিং ব্যবহারের জন্য বেশ কিছু কনফিগারেশন এবং অপশন রয়েছে:
- Cache ID: আপনি যে ক্যাশে ডেটা রাখছেন, তার একটি ইউনিক আইডি দিতে পারেন, যাতে পরে এটি সহজে রেফারেন্স করা যায়।
- Cache Time-to-Live (TTL): ক্যাশের মেয়াদ নির্ধারণ করা যায়। সাধারণত ক্যাশের মেয়াদ নির্ধারণ করা হয় মিলিসেকেন্ড এ, যেমন 1 সেকেন্ড = 1000 মিলিসেকেন্ড।
- Cache Options: আরও অনেক ক্যাশ অপশন রয়েছে যেমন
clear(ক্যাশ পরিষ্কার করার জন্য),duration(ক্যাশের মেয়াদ) ইত্যাদি।
উদাহরণ:
const result = await userRepository.find({
cache: {
id: "user_query_cache",
milliseconds: 5000 // Cache for 5 seconds
}
});
এখানে, ক্যাশটি 5 সেকেন্ডের জন্য থাকবে এবং পরবর্তী 5 সেকেন্ডের মধ্যে একই কুয়েরি করা হলে আগের ক্যাশড ফলাফল রিটার্ন করবে।
ক্যাশিং এবং ডেটাবেসের মধ্যে পার্থক্য
| ক্যারেক্টার | Caching | Database |
|---|---|---|
| পারফরম্যান্স | দ্রুত অ্যাক্সেস, কম লোড | ধীর, কারণ প্রতিবার ডেটাবেস থেকে তথ্য আনতে হয় |
| ব্যবহার | বার বার ব্যবহৃত একই তথ্য দ্রুত অ্যাক্সেস করার জন্য | পরিবর্তনশীল এবং আপডেট করা তথ্যের জন্য |
| দ্বৈততা | ক্যাশে একাধিক অ্যাক্সেসের জন্য একক কপি | ডেটাবেসে প্রতিবার কুয়েরি চালানোর প্রয়োজন |
| ট্রান্সেকশনাল | না, ক্যাশে সাধারণত সিঙ্ক্রোনাস নয় | হ্যাঁ, ট্রান্সেকশনাল এবং এক্সিডেন্টাল ডিলিট/আপডেট সাপোর্ট করে |
সারাংশ
Caching একটি গুরুত্বপূর্ণ কৌশল যা অ্যাপ্লিকেশন পারফরম্যান্স এবং ডেটাবেস লোড কমানোর জন্য ব্যবহৃত হয়। TypeORM ক্যাশিং সমর্থন করে, যার মাধ্যমে আপনি ডেটাবেসের ফলাফল ক্যাশে রেখে ডেটা পুনরায় লোড করার সময় দ্রুত অ্যাক্সেস পেতে পারেন। এটি query result caching এর মাধ্যমে করা হয়, যা ডেটাবেস অপারেশনকে আরো দ্রুত করে তোলে। ক্যাশিং ব্যবহারে আপনার অ্যাপ্লিকেশনটি আরও প্রতিক্রিয়া প্রাপ্ত এবং কার্যকরী হবে, যেহেতু এটি ডেটাবেসে অপ্রয়োজনীয় লোড কমাবে এবং দ্রুততম ফলাফল প্রদান করবে।
Read more