Entity Framework (EF) এর পারফরম্যান্স অপটিমাইজেশনকে আরও উন্নত করতে Caching এবং Compiled Queries ব্যবহার করা যেতে পারে। এই দুটি প্রযুক্তি আপনাকে ডেটাবেস থেকে ডেটা আনার সময় কার্যকারিতা বাড়াতে এবং অপ্রয়োজনীয় ডেটাবেস কুয়েরি এক্সিকিউশন কমাতে সাহায্য করে।
Caching
Caching হল একটি টেকনিক যা ডেটাবেসের রেসপন্স বা ক্যালকুলেশন রেজাল্টগুলিকে একটি দ্রুত অ্যাক্সেসযোগ্য অবস্থানে সংরক্ষণ করে, যাতে পরবর্তী অনুরোধগুলির জন্য সেই ডেটা পুনরায় ডেটাবেস থেকে আনা না লাগে। Caching ব্যবহারের মাধ্যমে, আপনি পরবর্তী কুয়েরিগুলির জন্য রেসপন্স টাইম কমাতে পারেন, যা পারফরম্যান্স বাড়ানোর জন্য কার্যকর।
EF Core তে, ডিফল্টভাবে, ডেটাবেস কুয়েরি রেজাল্ট গুলি In-memory Caching এ রাখা হয়। তবে আপনি Distributed Caching (যেমন Redis বা SQL Server Cache) অথবা Second Level Caching ব্যবহার করে পারফরম্যান্স আরও উন্নত করতে পারেন।
Example: Caching in EF Core with MemoryCache
public class StudentService
{
private readonly SchoolContext _context;
private readonly IMemoryCache _cache;
public StudentService(SchoolContext context, IMemoryCache cache)
{
_context = context;
_cache = cache;
}
public async Task<Student> GetStudentByIdAsync(int studentId)
{
var cacheKey = $"student-{studentId}";
if (!_cache.TryGetValue(cacheKey, out Student student))
{
student = await _context.Students
.FirstOrDefaultAsync(s => s.StudentId == studentId);
if (student != null)
{
_cache.Set(cacheKey, student, TimeSpan.FromMinutes(10));
}
}
return student;
}
}
এখানে, প্রথমে চেক করা হচ্ছে যে ক্যাশে এই তথ্যটি রয়েছে কিনা। যদি না থাকে, তবে ডেটাবেস থেকে রেকর্ড আনা হবে এবং সেটি ক্যাশে সংরক্ষিত হবে।
Compiled Queries
Compiled Queries হল এমন একটি কৌশল যেখানে EF Core কুয়েরি তৈরি হওয়ার পর, সেটি একবার কম্পাইল হয়ে যায় এবং পরবর্তী বার কুয়েরি এক্সিকিউশনের জন্য কম্পাইলড কুয়েরিটি ব্যবহৃত হয়। এই কৌশলটি কুয়েরি এক্সিকিউশন টাইম কমাতে সাহায্য করে, কারণ কুয়েরি পরবর্তী বার পার্স করা বা অপ্টিমাইজ করা লাগে না।
EF Core তে, আপনি CompiledQuery ব্যবহার করে কুয়েরি কম্পাইল করতে পারেন। এটি বিশেষভাবে উপকারী যখন একই কুয়েরি বারবার এক্সিকিউট করতে হয়।
Example: Using Compiled Query in EF Core
public class StudentService
{
private static readonly Func<SchoolContext, int, Task<Student>> _getStudentById =
EF.CompileAsyncQuery((SchoolContext context, int studentId) =>
context.Students.FirstOrDefaultAsync(s => s.StudentId == studentId));
private readonly SchoolContext _context;
public StudentService(SchoolContext context)
{
_context = context;
}
public Task<Student> GetStudentByIdAsync(int studentId)
{
return _getStudentById(_context, studentId);
}
}
এখানে, EF.CompileAsyncQuery ব্যবহার করে কুয়েরিটি কম্পাইল করা হয়েছে, এবং পরবর্তী কুয়েরি এক্সিকিউশনে এটি পুনরায় ব্যবহার করা হবে। এতে কুয়েরি অপটিমাইজেশন হয় এবং পারফরম্যান্স বৃদ্ধি পায়।
Caching এবং Compiled Queries এর পার্থক্য
- Caching মূলত ডেটার পুনঃপ্রাপ্তি কমানোর জন্য ব্যবহৃত হয়, যেখানে আপনি পূর্বের ডেটাবেস রেসপন্সগুলি মেমরিতে রাখেন এবং পরবর্তী অনুরোধগুলির জন্য দ্রুত অ্যাক্সেস প্রদান করেন।
- Compiled Queries কুয়েরি প্রক্রিয়া ত্বরান্বিত করতে ব্যবহৃত হয়, যেখানে একই কুয়েরি একাধিকবার এক্সিকিউট করার সময় তার পুনঃপ্রসেসিং কমিয়ে আনা হয়।
পারফরম্যান্স অপটিমাইজেশন
এ দুটি কৌশল একত্রে ব্যবহার করলে, আপনার অ্যাপ্লিকেশন অনেক দ্রুত এবং স্কেলেবল হতে পারে। Caching যেখানে ডেটার দ্রুত অ্যাক্সেস নিশ্চিত করে, সেখানে Compiled Queries কুয়েরি এক্সিকিউশনের গতিকে ত্বরান্বিত করে। এগুলি এমন অ্যাপ্লিকেশনে বিশেষভাবে কার্যকরী, যেখানে অনেক ডেটা নিয়ে কাজ করা হয় এবং ডেটাবেসের সাথে ক্রমাগত যোগাযোগ করা হয়।
এভাবে, Caching এবং Compiled Queries ব্যবহার করে Entity Framework তে পারফরম্যান্স উন্নয়ন করা সম্ভব।
Read more