Spring Batch একটি শক্তিশালী ফ্রেমওয়ার্ক যা ব্যাচ প্রসেসিংয়ের জন্য ব্যবহৃত হয়, যেমন বড় ডেটাসেটের প্রক্রিয়াকরণ, ডেটা ট্রান্সফরমেশন, এবং ডেটা মাইগ্রেশন। Spring Batch এর একটি গুরুত্বপূর্ণ উপাদান হলো Step, যা একটি নির্দিষ্ট ব্যাচ কাজ সম্পাদন করে। Step দুটি প্রধান ধরনের হতে পারে: Chunk-based এবং Tasklet-based।
এই দুইটি ধরনের Step এর কাজ আলাদা, এবং এগুলির মাধ্যমে ডেটা প্রসেসিংয়ের বিভিন্ন শৈলী ব্যবহার করা যায়।
Chunk-based Step
Chunk-based Step হলো এমন একটি প্রসেসিং মডেল যেখানে ডেটাকে ছোট ছোট অংশ (chunk) এ বিভক্ত করে একাধিক রেকর্ড একসঙ্গে প্রসেস করা হয়। একটি chunk-এ অনেকগুলো আইটেম হতে পারে, এবং প্রতিটি chunk প্রসেস করার পর, সেই chunk এর জন্য একত্রিত হয়ে একটি কমিট (commit) করা হয়।
Chunk-based Step এর কাজ:
- ItemReader: এটি ডেটা রিড করে (যেমন, ডাটাবেস থেকে, ফাইল থেকে বা অন্য কোনো সোর্স থেকে)। এটি একে একে ডেটার আইটেম পাঠায়।
- ItemProcessor: এই স্টেপে ডেটার আইটেমগুলোর উপর প্রক্রিয়া বা ট্রান্সফরমেশন (transformation) করা হয়। এটি একটি আইটেমকে গ্রহণ করে এবং তাকে কোনোভাবে পরিবর্তন করে।
- ItemWriter: প্রসেস হওয়া আইটেমগুলোকে ডাটাবেসে, ফাইলে বা অন্য কোনো টার্গেট আউটপুটে লিখে দেয়।
- Committer: প্রতিটি chunk প্রসেস হওয়ার পরে,
ItemWriterদিয়ে ডেটা কমিট করা হয়। অর্থাৎ, chunk এর সমস্ত আইটেম একত্রে প্রক্রিয়াকৃত হয়ে আউটপুটে লেখা হয়।
Chunk-based Step উদাহরণ:
@Bean
public Step step1() {
return stepBuilderFactory.get("step1")
.<Person, Person> chunk(10) // প্রতি 10টি আইটেমের পরে কমিট হবে
.reader(personReader())
.processor(personProcessor())
.writer(personWriter())
.build();
}
@Bean
public ItemReader<Person> personReader() {
return new PersonItemReader(); // ডেটা রিডারের উদাহরণ
}
@Bean
public ItemProcessor<Person, Person> personProcessor() {
return new PersonItemProcessor(); // ডেটা প্রসেসরের উদাহরণ
}
@Bean
public ItemWriter<Person> personWriter() {
return new PersonItemWriter(); // ডেটা রাইটারের উদাহরণ
}
এখানে, chunk(10) নির্দেশ করে যে প্রতি 10টি আইটেম প্রসেস হওয়ার পর কমিট করা হবে। এটি ItemReader, ItemProcessor, এবং ItemWriter সমন্বয়ে কাজ করে।
Chunk-based Step এর সুবিধা:
- Batch Size Control: একযোগভাবে অনেক আইটেম প্রসেস করা হয়, ফলে মেমরি ব্যবহারের পরিমাণ নিয়ন্ত্রণ করা যায়।
- Transaction Management: প্রতিটি chunk আলাদা আলাদা ট্রানজেকশনে প্রক্রিয়াকৃত হয়, যা ডেটা কমিট করতে সাহায্য করে।
- Error Handling: একটি chunk এর মধ্যে কোনো সমস্যা হলে, সেই chunk পুনরায় প্রসেস করা যায়।
Tasklet-based Step
Tasklet-based Step হলো এমন একটি প্রসেসিং মডেল যেখানে একটি নির্দিষ্ট কাজ (task) একবারে সম্পন্ন করা হয়। এখানে ডেটার chunk ভাগ করা হয় না, বরং একটি নির্দিষ্ট কাজ একটি স্টেপে সম্পন্ন হয়, যেমন ডেটাবেস টেবিল ক্লিয়ার করা, ফাইল মুছে ফেলা বা কোনো নির্দিষ্ট স্ট্যাটাস আপডেট করা। Tasklet একটি প্রক্রিয়া বা কাজের উপর দৃষ্টি নিবদ্ধ করে, যা সাধারণত Void ধরনের কাজ হয়।
Tasklet-based Step এর কাজ:
- Tasklet: এটি সাধারণত একটি নির্দিষ্ট কাজের কার্যক্রম সম্পাদন করে, যেমন ডেটাবেস টেবিল মুছে ফেলা বা রিপোর্ট তৈরি করা। Tasklet একটি নির্দিষ্ট কাজ করার জন্য তৈরি করা হয়, এবং এটি শুধুমাত্র একটি স্টেপে একবার রান হয়।
- ExecutionContext: Tasklet স্টেপে কাজ করার সময়,
ExecutionContextব্যবহার করে আপনি স্টেপের মধ্যে স্টেট সংরক্ষণ করতে পারেন, যা পরবর্তী রানগুলোর জন্য দরকারি হতে পারে।
Tasklet-based Step উদাহরণ:
@Bean
public Step step2() {
return stepBuilderFactory.get("step2")
.tasklet(new Tasklet() {
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
System.out.println("Tasklet is executing");
return RepeatStatus.FINISHED; // কাজ সম্পন্ন হলে।
}
})
.build();
}
এখানে একটি Tasklet তৈরি করা হয়েছে যা একটি কাজ সম্পাদন করবে, যেমন কনসোল এ "Tasklet is executing" মেসেজ প্রিন্ট করবে।
Tasklet-based Step এর সুবিধা:
- Simple Tasks: ছোট, সহজ এবং একক কাজের জন্য উপযোগী।
- Flexibility: Tasklet দিয়ে একক কাজ যেমন রিপোর্ট জেনারেশন, ফাইল অপারেশন বা ক্লিনআপ কাজ করতে পারেন।
- No Chunking: Tasklet কোনো chunk বা ব্যাচ প্রসেসিংয়ের সাথে সম্পর্কিত নয়। এটি একক কাজ হিসেবেই কাজ করে।
Chunk এবং Tasklet ভিত্তিক Step এর তুলনা
| Feature | Chunk-based Step | Tasklet-based Step |
|---|---|---|
| Data Processing | ডেটার আইটেমগুলো chunk আকারে প্রসেস করা হয়। | একক কাজ (task) হিসাবে একবারেই কাজ করা হয়। |
| Use Case | বড় আকারের ডেটা প্রসেসিং (যেমন ডেটাবেস থেকে তথ্য সংগ্রহ করা)। | ছোট কাজ, যেমন ক্লিনআপ বা রিপোর্ট তৈরি। |
| Error Handling | Chunk প্রক্রিয়াকরণের মধ্যে ত্রুটি ঘটলে পুরো chunk পুনরায় প্রসেস করা যায়। | কোনো ত্রুটি হলে পুরো task পুনরায় চেষ্টা করা যায়। |
| Transaction Management | প্রতিটি chunk আলাদা আলাদা ট্রানজেকশনে সম্পাদিত হয়। | একটি ট্রানজেকশনে সম্পূর্ণ task সম্পন্ন হয়। |
| Complexity | বেশি জটিল এবং ডেটার সাথে কাজ করতে উপযোগী। | সহজ, ছোট কাজগুলোর জন্য উপযোগী। |
সারাংশ
Spring Batch এ Chunk-based Step এবং Tasklet-based Step দুটি আলাদা ধরনের প্রসেসিং মডেল। Chunk-based Step বৃহত্তর ডেটাসেট নিয়ে কাজ করতে উপযোগী, যেখানে ডেটা ছোট ছোট অংশে ভাগ করে প্রসেস করা হয় এবং প্রতিটি chunk প্রসেস করার পর ডেটা কমিট করা হয়। অন্যদিকে, Tasklet-based Step একক কাজের জন্য ব্যবহৃত হয়, যেখানে একটি নির্দিষ্ট কাজ একবারে সম্পন্ন হয়। উভয় মডেলই Spring Batch এ ব্যাচ প্রসেসিংয়ের জন্য গুরুত্বপূর্ণ ভূমিকা পালন করে, এবং উপযুক্ত পরিস্থিতিতে প্রতিটি মডেল ব্যবহার করা যেতে পারে।
Read more