স্প্রিং ব্যাচ (Spring Batch) একটি শক্তিশালী ফ্রেমওয়ার্ক যা ব্যাচ প্রসেসিংয়ে সাহায্য করে, বিশেষ করে বড় আকারের ডেটা প্রক্রিয়া করতে। এর মধ্যে Chunk-based Processing একটি জনপ্রিয় প্যাটার্ন, যেখানে ডেটা ব্যাচে বিভক্ত হয়ে প্রসেস করা হয়। এই প্যাটার্নে ItemReader, ItemProcessor, এবং ItemWriter ব্যবহার করা হয় ডেটা পড়া, প্রসেস করা এবং লেখার জন্য।
এই তিনটি উপাদান একে অপরের সাথে কাজ করে ডেটা চাঙ্ক (Chunk) আকারে প্রসেস করতে সাহায্য করে। এর মাধ্যমে ডেটা আউটপুট করার আগে এর মধ্যে বিভিন্ন স্টেপে কাস্টম লজিক প্রয়োগ করা যায়।
Chunk-based Processing Overview
Chunk-based Processing হল একটি পদ্ধতি যেখানে ডেটা ছোট ছোট অংশে (চাঙ্ক) ভাগ করে প্রসেস করা হয়। এই পদ্ধতিতে, স্প্রিং ব্যাচ ডেটার একটি নির্দিষ্ট সংখ্যা (Item) ধরে একযোগে কাজ করে এবং একবারে সব ডেটা প্রসেস না করে ধাপে ধাপে কাজ সম্পন্ন করে।
প্রক্রিয়াটি সাধারণত এইভাবে চলে:
- ItemReader: ডেটা পড়ে।
- ItemProcessor: ডেটার উপর প্রক্রিয়া চালায়।
- ItemWriter: প্রক্রিয়াকৃত ডেটা লিখে।
ItemReader
ItemReader হল একটি ইন্টারফেস যা ডেটা পড়ে এবং প্রতি চাঙ্কে কতগুলো আইটেম রিটার্ন করে সেটি নির্ধারণ করে। এটি বিভিন্ন ডেটা সোর্স থেকে ডেটা পড়ার জন্য ব্যবহৃত হয়, যেমন ডেটাবেস, ফাইল, বা API।
ItemReader এর ভূমিকা:
- ডেটা পড়া: এটি মূলত ডেটা সোর্স থেকে ডেটা পড়ে এবং একটি আইটেম রিটার্ন করে। প্রতিটি আইটেম ব্যাচ প্রসেসিংয়ের অংশ হিসেবে গণনা করা হয়।
- EOF (End of File) চেক: ডেটা পড়া সম্পূর্ণ হলে, এটি EOF চেক করে এবং পরে আর কোনো আইটেম থাকলে false রিটার্ন করে।
উদাহরণ:
@Bean
public ItemReader<Product> itemReader() {
List<Product> products = Arrays.asList(new Product("Product1", 100), new Product("Product2", 200));
return new ListItemReader<>(products);
}
এখানে, ListItemReader ব্যবহার করা হয়েছে যা একটি তালিকা থেকে আইটেমগুলো পড়বে।
ItemProcessor
ItemProcessor একটি ইন্টারফেস যা ডেটা প্রসেসিংয়ের জন্য ব্যবহৃত হয়। এটি ItemReader দ্বারা পড়া ডেটা গ্রহণ করে এবং সেই ডেটা পরিবর্তন বা প্রসেস করে। এটি ডেটার মধ্যে ফিল্টারিং, ভ্যালিডেশন, বা ট্রান্সফরমেশন (যেমন ডেটা ফরম্যাট পরিবর্তন) করতে ব্যবহার করা হয়।
ItemProcessor এর ভূমিকা:
- ডেটা ট্রান্সফরমেশন: আইটেমের মান পরিবর্তন করা, যেমন কোনো ফিল্ডের মান গণনা, ফিল্টারিং বা কোন ব্যবসায়িক লজিক প্রয়োগ করা।
- ভ্যালিডেশন: যদি কোনো আইটেম ভ্যালিড না হয়, তবে এটি
nullরিটার্ন করতে পারে বা ব্যতিক্রম থ্রো করতে পারে।
উদাহরণ:
@Bean
public ItemProcessor<Product, Product> itemProcessor() {
return new ItemProcessor<Product, Product>() {
@Override
public Product process(Product item) throws Exception {
item.setPrice(item.getPrice() * 1.1); // Adding 10% tax
return item;
}
};
}
এখানে, ItemProcessor একটি প্রোডাক্টের মূল্যকে ১০% বৃদ্ধি করছে।
ItemWriter
ItemWriter একটি ইন্টারফেস যা ডেটা লেখার জন্য ব্যবহৃত হয়। এটি একটি চাঙ্কের সমস্ত আইটেম প্রক্রিয়া করার পর, সেই আইটেমগুলো একটি ডেস্টিনেশন (যেমন ডেটাবেস, ফাইল, ইত্যাদি) এ লিখে।
ItemWriter এর ভূমিকা:
- ডেটা লিখা: এটি একত্রিত আইটেমগুলো একটি নির্দিষ্ট ডেস্টিনেশনে লিখে। যেমন ডেটাবেসে ইনসার্ট করা বা ফাইলে লেখা।
- ব্যাচ আউটপুট: এটি একাধিক আইটেমকে একত্রে লেখা হয়, যা পারফরম্যান্স উন্নত করতে সাহায্য করে।
উদাহরণ:
@Bean
public ItemWriter<Product> itemWriter() {
return new ItemWriter<Product>() {
@Override
public void write(List<? extends Product> items) throws Exception {
for (Product product : items) {
System.out.println("Writing product: " + product.getName() + " with price " + product.getPrice());
}
}
};
}
এখানে, ItemWriter প্রক্রিয়া করা প্রোডাক্ট আইটেমগুলো কনসোলে লিখে।
Chunk-based Processing কনফিগারেশন
একটি সম্পূর্ণ Chunk-based Processing সেটআপ করার জন্য, আপনাকে Step কনফিগারেশন করতে হবে যেখানে ItemReader, ItemProcessor, এবং ItemWriter যুক্ত থাকবে। নিচে একটি উদাহরণ দেওয়া হলো:
@Bean
public Step step1() {
return stepBuilderFactory.get("step1")
.<Product, Product>chunk(10)
.reader(itemReader())
.processor(itemProcessor())
.writer(itemWriter())
.build();
}
@Bean
public Job job(JobRepository jobRepository, JobLauncher jobLauncher) {
return jobBuilderFactory.get("job")
.start(step1())
.build();
}
এখানে:
chunk(10)এর মানে হল যে প্রতিটি চাঙ্কে ১০টি আইটেম থাকবে।itemReader(),itemProcessor(), এবংitemWriter()যথাক্রমে আইটেম পড়া, প্রক্রিয়া এবং লেখা পরিচালনা করবে।
উপসংহার
স্প্রিং ব্যাচের Chunk-based Processing প্যাটার্নে ItemReader, ItemProcessor, এবং ItemWriter তিনটি গুরুত্বপূর্ণ উপাদান। ItemReader ডেটা পড়ে, ItemProcessor ডেটার উপর কাস্টম লজিক প্রয়োগ করে এবং ItemWriter প্রক্রিয়াকৃত ডেটা লেখে। এই পদ্ধতি ডেটা ব্যাচে প্রসেস করার জন্য খুবই কার্যকরী এবং পারফরম্যান্স উন্নত করতে সহায়তা করে, বিশেষ করে বড় আকারের ডেটা প্রক্রিয়া করতে।
Read more