Hibernate বা JPA এর মাধ্যমে Batch Insert এবং Update পরিচালনা করলে ডাটাবেজে একাধিক রেকর্ড সংযোজন বা আপডেট করার পারফরম্যান্স উল্লেখযোগ্যভাবে বৃদ্ধি পায়। এটি বিশেষভাবে কার্যকর হয় বড় ডেটাসেট নিয়ে কাজ করার সময়।
Hibernate/JPA Batch Processing এর সুবিধা
- পারফরম্যান্স বৃদ্ধি: একাধিক রেকর্ড একত্রে প্রক্রিয়া করে ডাটাবেস অপারেশন দ্রুততর হয়।
- কম নেটওয়ার্ক ল্যাটেন্সি: প্রতিটি রেকর্ড আলাদাভাবে প্রক্রিয়াকরণের পরিবর্তে একাধিক রেকর্ড একত্রে পাঠানো হয়।
- ডাটাবেস সংস্থান সংরক্ষণ: ডাটাবেস সংযোগের ওপর চাপ কমায়।
Maven ডিপেনডেন্সি
Spring ORM এবং Hibernate ব্যবহার করতে প্রয়োজনীয় ডিপেনডেন্সি যোগ করুন:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.5.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
Hibernate Batch Processing কনফিগারেশন
Hibernate এর কনফিগারেশনে Batch Processing সক্রিয় করতে নিচের প্রপার্টি যুক্ত করতে হবে:
hibernate.jdbc.batch_size=20
hibernate.order_inserts=true
hibernate.order_updates=true
hibernate.jdbc.batch_versioned_data=true
Spring Configuration (Java-based):
@Bean
public LocalSessionFactoryBean sessionFactory(DataSource dataSource) {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
sessionFactory.setPackagesToScan("com.example.entity");
Properties hibernateProperties = new Properties();
hibernateProperties.put("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
hibernateProperties.put("hibernate.jdbc.batch_size", "20");
hibernateProperties.put("hibernate.order_inserts", "true");
hibernateProperties.put("hibernate.order_updates", "true");
sessionFactory.setHibernateProperties(hibernateProperties);
return sessionFactory;
}
মডেল ক্লাস তৈরি করা
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
@Column(name = "email")
private String email;
// Getters and Setters
}
Batch Insert পরিচালনা
Hibernate এর মাধ্যমে একাধিক রেকর্ড একসাথে Insert করা:
@Repository
public class UserDao {
@Autowired
private SessionFactory sessionFactory;
public void batchInsertUsers(List<User> users) {
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
int batchSize = 20; // Configured batch size
for (int i = 0; i < users.size(); i++) {
session.save(users.get(i));
if (i % batchSize == 0 && i > 0) {
session.flush();
session.clear();
}
}
transaction.commit();
session.close();
}
}
Batch Update পরিচালনা
Hibernate এর মাধ্যমে একাধিক রেকর্ড একসাথে Update করা:
@Repository
public class UserDao {
@Autowired
private SessionFactory sessionFactory;
public void batchUpdateUsers(List<User> users) {
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
int batchSize = 20; // Configured batch size
for (int i = 0; i < users.size(); i++) {
session.update(users.get(i));
if (i % batchSize == 0 && i > 0) {
session.flush();
session.clear();
}
}
transaction.commit();
session.close();
}
}
সার্ভিস লেয়ার
@Service
public class UserService {
@Autowired
private UserDao userDao;
public void saveUsersInBatch(List<User> users) {
userDao.batchInsertUsers(users);
}
public void updateUsersInBatch(List<User> users) {
userDao.batchUpdateUsers(users);
}
}
কন্ট্রোলার লেয়ার
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/batch-insert")
public ResponseEntity<String> batchInsert(@RequestBody List<User> users) {
userService.saveUsersInBatch(users);
return ResponseEntity.ok("Users inserted in batch successfully");
}
@PutMapping("/batch-update")
public ResponseEntity<String> batchUpdate(@RequestBody List<User> users) {
userService.updateUsersInBatch(users);
return ResponseEntity.ok("Users updated in batch successfully");
}
}
Hibernate Batch Processing এর সুবিধা
- উচ্চ পারফরম্যান্স: বড় ডেটাসেট প্রক্রিয়াকরণের সময় দ্রুত ফলাফল প্রদান।
- কম মেমরি ব্যবহৃত:
session.clear()এবংsession.flush()ব্যবহার করে মেমরি অপচয় রোধ। - ডাটাবেস ট্র্যাফিক হ্রাস: একসাথে একাধিক অপারেশন সম্পন্ন করার জন্য ডাটাবেসে কম ট্রিপ নেওয়া হয়।
Hibernate/JPA এর মাধ্যমে Batch Insert এবং Update পরিচালনা ডেটা-ইনটেনসিভ অ্যাপ্লিকেশনগুলোর কার্যক্ষমতা বাড়ানোর জন্য একটি অত্যন্ত কার্যকর কৌশল।