Lazy Loading এবং Eager Loading হল ORM (Object-Relational Mapping) ফ্রেমওয়ার্ক যেমন Hibernate বা JPA-তে ডাটাবেজ থেকে ডাটা রিট্রিভ করার দুটি ভিন্ন স্ট্র্যাটেজি। এগুলি ডাটা লোড করার সময় পারফরম্যান্স অপ্টিমাইজ করার জন্য ব্যবহৃত হয়। Spring ORM এর মাধ্যমে Hibernate বা JPA-তে এগুলিকে সহজেই কনফিগার করা যায়।
Lazy Loading এবং Eager Loading এর ধারণা
Lazy Loading
- ডাটা তখনই লোড হয়, যখন এটি প্রথমবার অ্যাক্সেস করা হয়।
- এই পদ্ধতিতে মেমরি ব্যবহার কম হয় এবং অ্যাপ্লিকেশনের পারফরম্যান্স বৃদ্ধি পায়।
- এটি বড় ডেটাসেটের ক্ষেত্রে উপযোগী।
Eager Loading
- ডাটা অবজেক্ট তৈরি করার সময়ই ডাটাবেজ থেকে সমস্ত প্রাসঙ্গিক ডাটা লোড হয়।
- এটি সেই পরিস্থিতিতে কার্যকর যেখানে ডাটা আগে থেকেই প্রয়োজন হবে।
Spring ORM এ Lazy এবং Eager Loading কনফিগার করার পদ্ধতি
@OneToMany এবং @ManyToOne Mapping এর জন্য কনফিগারেশন
Hibernate বা JPA-তে @OneToMany, @ManyToOne, @OneToOne, এবং @ManyToMany রিলেশনশিপে Lazy এবং Eager Loading নির্ধারণ করা যায়।
উদাহরণ: Lazy Loading
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.OneToMany;
import java.util.List;
@Entity
public class Department {
@Id
private int id;
private String name;
@OneToMany(mappedBy = "department", fetch = jakarta.persistence.FetchType.LAZY)
private List<Employee> employees;
// Getter এবং Setter
}
উপরের উদাহরণে, fetch = FetchType.LAZY এর মাধ্যমে employees তালিকা Lazy Loading হিসাবে কনফিগার করা হয়েছে। এর অর্থ, employees অবজেক্ট ডাটাবেজ থেকে তখনই রিট্রিভ হবে, যখন এটি অ্যাক্সেস করা হবে।
উদাহরণ: Eager Loading
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.OneToMany;
import java.util.List;
@Entity
public class Department {
@Id
private int id;
private String name;
@OneToMany(mappedBy = "department", fetch = jakarta.persistence.FetchType.EAGER)
private List<Employee> employees;
// Getter এবং Setter
}
উপরের উদাহরণে, fetch = FetchType.EAGER এর মাধ্যমে employees তালিকা Eager Loading হিসাবে কনফিগার করা হয়েছে। এর অর্থ, Department অবজেক্ট লোড করার সময়ই সমস্ত employees ডাটা লোড হবে।
@ManyToOne Mapping এ ব্যবহার
Lazy Loading:
@ManyToOne(fetch = jakarta.persistence.FetchType.LAZY)
private Department department;
Eager Loading:
@ManyToOne(fetch = jakarta.persistence.FetchType.EAGER)
private Department department;
Default Behavior
- Hibernate বা JPA-তে
@OneToManyএবং@ManyToManyএর ডিফল্ট ফেচ মোড হল Lazy Loading। @ManyToOneএবং@OneToOneএর ডিফল্ট ফেচ মোড হল Eager Loading।
ডিফল্ট ফেচ মোড পরিবর্তন করার জন্য fetch প্যারামিটার ব্যবহার করতে হয়।
Lazy এবং Eager Loading এর ব্যবহার ক্ষেত্র
Lazy Loading
- যেখানে সমস্ত ডেটা একসঙ্গে প্রয়োজন হয় না।
- বড় ডেটাসেটের ক্ষেত্রে মেমরি ব্যবহারের দক্ষতা বাড়ানোর জন্য।
Eager Loading
- যেখানে সম্পর্কিত ডেটা আগে থেকেই প্রয়োজন।
- ছোট ডেটাসেট বা রিয়েল-টাইম অ্যাপ্লিকেশনে।
পারফরম্যান্স টিউনিং এর টিপস
- Lazy Loading ব্যবহার করুন বড় ডেটাসেটের ক্ষেত্রে।
- Eager Loading ব্যবহার করুন, যখন সম্পর্কিত ডেটা সবসময়ই প্রয়োজন।
- Spring ORM এবং Hibernate-এ JOIN FETCH বা EntityGraph ব্যবহার করে কাস্টম লোডিং কনফিগার করুন।
- N+1 প্রোবলেম এড়ানোর জন্য প্রয়োজনীয় ক্ষেত্রে Hibernate.initialize() মেথড ব্যবহার করুন।
Spring ORM এ Lazy এবং Eager Loading কনফিগারেশন ডাটা লোডিং কৌশলকে নিয়ন্ত্রণ করতে সাহায্য করে, যা অ্যাপ্লিকেশনের কার্যকারিতা এবং মেমরি ব্যবহারের দক্ষতাকে উন্নত করে।
Read more