Batch Processing হল একটি পদ্ধতি যেখানে একাধিক ডেটাবেজ অপারেশন (যেমন ইনসার্ট, আপডেট বা ডিলিট) একসঙ্গে কার্যকর করা হয়। এটি একাধিক ট্রানজেকশন পরিচালনা করার পরিবর্তে একটি ট্রানজেকশনে সম্পন্ন করে ডেটাবেজ অপারেশনের কার্যকারিতা এবং পারফরম্যান্স বৃদ্ধি করে।
Spring ORM Hibernate ব্যবহার করে Batch Processing সহজে বাস্তবায়ন করতে পারে।
Batch Processing কেন প্রয়োজন?
- কর্মক্ষমতা বৃদ্ধি: একাধিক কোয়েরি একবারে এক্সিকিউট করা হয়।
- ডেটাবেস কানেকশন হ্রাস: একাধিক অপারেশন একক ট্রানজেকশনে সম্পন্ন হয়।
- কম মেমোরি ব্যবহার: বড় আকারের ডেটা অপারেশনের জন্য কার্যকর।
Hibernate এর মাধ্যমে Batch Processing বাস্তবায়ন
১. Hibernate কনফিগারেশন
Hibernate এর hibernate.jdbc.batch_size প্রপার্টি ব্যবহার করে ব্যাচ প্রসেসিং সক্রিয় করতে হয়।
উদাহরণ:
hibernate.jdbc.batch_size=20
এটি নির্দেশ করে একবারে ২০টি অপারেশন ব্যাচ হিসেবে সম্পন্ন করা হবে।
২. উদাহরণ কোড: Batch Insert
@Service
public class EmployeeService {
@Autowired
private SessionFactory sessionFactory;
@Transactional
public void saveEmployeesBatch(List<Employee> employees) {
Session session = sessionFactory.getCurrentSession();
int batchSize = 20; // প্রতিটি ব্যাচে ২০টি রেকর্ড প্রক্রিয়া হবে
for (int i = 0; i < employees.size(); i++) {
session.save(employees.get(i));
if (i % batchSize == 0) {
session.flush(); // ডেটা ডেটাবেজে লিখুন
session.clear(); // Hibernate ক্যাশ পরিষ্কার করুন
}
}
}
}
বর্ণনা:
session.save()দিয়ে প্রতিটি অবজেক্ট সেভ করা হয়।session.flush()ডেটাবেজে ব্যাচ রাইট অপারেশন সম্পন্ন করে।session.clear()Hibernate এর ক্যাশ পরিষ্কার করে পরবর্তী ব্যাচের জন্য প্রস্তুত করে।
৩. কন্ট্রোলার উদাহরণ
@RestController
@RequestMapping("/employees")
public class EmployeeController {
@Autowired
private EmployeeService employeeService;
@PostMapping("/batch")
public void saveEmployeesBatch(@RequestBody List<Employee> employees) {
employeeService.saveEmployeesBatch(employees);
}
}
বর্ণনা:
/employees/batchএপিআই ব্যবহার করে একাধিক এমপ্লয়ি ব্যাচ হিসেবে ইনসার্ট করা যায়।
JPA এর মাধ্যমে Batch Processing বাস্তবায়ন
উদাহরণ কোড
@Service
public class EmployeeService {
@Autowired
private EntityManager entityManager;
@Transactional
public void saveEmployeesBatch(List<Employee> employees) {
int batchSize = 20; // প্রতিটি ব্যাচে ২০টি রেকর্ড প্রক্রিয়া হবে
for (int i = 0; i < employees.size(); i++) {
entityManager.persist(employees.get(i));
if (i % batchSize == 0) {
entityManager.flush(); // ডেটা ডেটাবেজে লিখুন
entityManager.clear(); // EntityManager ক্যাশ পরিষ্কার করুন
}
}
}
}
বর্ণনা:
entityManager.persist()দিয়ে ডেটা ইনসার্ট করা হয়।entityManager.flush()ডেটা ব্যাচ হিসেবে ডেটাবেজে পাঠায়।entityManager.clear()মেমোরি ব্যবহারের দক্ষতার জন্য ক্যাশ পরিষ্কার করে।
Spring Batch ব্যবহার করে Batch Processing
Spring ORM এর পরিবর্তে আপনি Spring Batch Framework ব্যবহার করেও বড় আকারের ডেটা প্রসেস করতে পারেন। এটি আরও শক্তিশালী এবং উন্নত ফিচার সরবরাহ করে।
সুবিধা ও সীমাবদ্ধতা
সুবিধা:
- কার্যকারিতা বৃদ্ধি।
- কম কানেকশন খরচ।
- বড় ডেটাসেট পরিচালনা সহজ।
সীমাবদ্ধতা:
- জটিল কোয়েরি পরিচালনার ক্ষেত্রে সমস্যা হতে পারে।
- ক্যাশ মেমোরি পূর্ণ হলে OutOfMemoryError হতে পারে।
Batch Processing সঠিকভাবে ব্যবহৃত হলে এটি ডেটাবেজ অপারেশনের সময় এবং খরচ কমিয়ে পারফরম্যান্স উন্নত করতে পারে।
Read more