Multi-threaded Step এবং Parallel Steps কনফিগারেশন

Spring Batch Parallel Processing - স্প্রিং ব্যাচ (Spring Batch) - Java Technologies

296

Multi-threaded Step এবং Parallel Steps কি?

Multi-threaded Step এবং Parallel Steps দুটি গুরুত্বপূর্ণ কনফিগারেশন যা স্প্রিং ব্যাচে পারফরম্যান্স এবং স্কেলেবিলিটি উন্নত করার জন্য ব্যবহৃত হয়। এদের মাধ্যমে আপনি ব্যাচ প্রসেসিংয়ের কাজগুলোর কার্যকারিতা বাড়াতে পারেন, বিশেষ করে যখন বড় ডেটাসেট নিয়ে কাজ করছেন।

  1. Multi-threaded Step: এটি একটি Step এর মধ্যে একাধিক থ্রেড ব্যবহার করে প্রসেসিং করার পদ্ধতি। একক Step-এ একাধিক থ্রেড ব্যবহার করলে প্রসেসিং আরও দ্রুত হয়, কারণ বিভিন্ন আইটেম সমান্তরালভাবে প্রক্রিয়া করা হয়।
  2. Parallel Steps: এটি একাধিক Step কে একসাথে চালানোর জন্য ব্যবহৃত হয়। প্রতিটি Step আলাদা থ্রেডে চলতে পারে, ফলে একাধিক Step একসাথে কাজ করে এবং প্রসেসিং আরও দ্রুত হয়।

Multi-threaded Step

স্প্রিং ব্যাচে TaskExecutor ব্যবহার করে একটি Step এর মধ্যে মাল্টি-থ্রেডিং কনফিগার করা যায়। এর মাধ্যমে, একাধিক থ্রেড ব্যবহার করে একই Step এর মধ্যে বিভিন্ন আইটেম প্রসেস করা যায়। এটি বিশেষভাবে বড় ডেটাসেটের জন্য কার্যকরী।

Multi-threaded Step কনফিগারেশন উদাহরণ:

import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.step.tasklet.TaskletStep;
import org.springframework.batch.core.tasklet.Tasklet;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.task.TaskExecutor;
import org.springframework.core.task.SimpleAsyncTaskExecutor;

@Configuration
public class BatchConfig {

    @Bean
    public TaskExecutor taskExecutor() {
        return new SimpleAsyncTaskExecutor(); // TaskExecutor for multi-threading
    }

    @Bean
    public Step multiThreadedStep(StepBuilderFactory stepBuilderFactory, Tasklet tasklet, TaskExecutor taskExecutor) {
        return stepBuilderFactory.get("multiThreadedStep")
                .tasklet(tasklet)
                .taskExecutor(taskExecutor) // Configure multi-threading
                .throttleLimit(5) // Maximum number of threads
                .build();
    }
}

এখানে:

  • SimpleAsyncTaskExecutor ব্যবহার করা হয়েছে যা একটি সহজ TaskExecutor যা মাল্টি-থ্রেডিংকে সক্ষম করে।
  • throttleLimit(5) দিয়ে আমরা থ্রেডের সংখ্যা সীমিত করেছি (এখানে ৫টি থ্রেড ব্যবহার হবে)।

Multi-threaded Step এর সুবিধা:

  • পারফরম্যান্স বৃদ্ধি: একই সময় একাধিক আইটেম প্রসেস করার জন্য থ্রেড ব্যবহার করা হয়, ফলে প্রসেসিং দ্রুত হয়।
  • স্কেলেবিলিটি: বড় ডেটাসেট দ্রুত প্রসেস করা যায়, কারণ একাধিক থ্রেড কাজ করছে।

Parallel Steps

Parallel Steps কনফিগারেশন আপনাকে একাধিক Step একসাথে চালানোর সুযোগ দেয়। এটি ব্যাচ প্রসেসিংয়ের জন্য কার্যকরী যেখানে একাধিক Step এর কাজ আলাদা আলাদা থ্রেডে চলতে পারে, এবং পুরো Job একই সময় সম্পন্ন হয়।

স্প্রিং ব্যাচে Parallel Steps কনফিগার করতে FlowJob এবং Flow ব্যবহার করা হয়।

Parallel Steps কনফিগারেশন উদাহরণ:

import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.job.flow.Flow;
import org.springframework.batch.core.job.flow.FlowJob;
import org.springframework.batch.core.job.flow.support.SimpleFlow;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ParallelBatchConfig {

    @Bean
    public Step step1(StepBuilderFactory stepBuilderFactory) {
        return stepBuilderFactory.get("step1")
                .tasklet((contribution, chunkContext) -> {
                    System.out.println("Step 1 running");
                    return null;
                })
                .build();
    }

    @Bean
    public Step step2(StepBuilderFactory stepBuilderFactory) {
        return stepBuilderFactory.get("step2")
                .tasklet((contribution, chunkContext) -> {
                    System.out.println("Step 2 running");
                    return null;
                })
                .build();
    }

    @Bean
    public Flow flow1(Step step1, Step step2) {
        SimpleFlow flow = new SimpleFlow("parallelFlow");
        flow.add(step1);
        flow.add(step2);
        return flow;
    }

    @Bean
    public FlowJob parallelJob(Flow flow1) {
        return new FlowJob("parallelJob", flow1);
    }
}

এখানে:

  • step1 এবং step2 দুটি আলাদা Step তৈরি করা হয়েছে।
  • SimpleFlow ব্যবহার করে এই দুটি Step একই Flow তে যোগ করা হয়েছে।
  • FlowJob দিয়ে একাধিক Step এর execution কে একসাথে ট্রিগার করা হয়েছে।

Parallel Steps এর সুবিধা:

  • বিভিন্ন কাজ একসাথে সম্পন্ন করা: একাধিক Step একসাথে কার্যকর হওয়ায় সময় সাশ্রয় হয়।
  • একাধিক কাজের সমান্তরাল কার্যক্রম: একাধিক স্টেপের কার্যক্রম একত্রে সমাপ্ত হয়, যা স্কেলেবিলিটি বাড়ায়।

Multi-threaded Step এবং Parallel Steps এর মধ্যে পার্থক্য

FeatureMulti-threaded StepParallel Steps
কাজের ধরণএকক Step এর মধ্যে একাধিক থ্রেড ব্যবহার করা হয়।একাধিক Step সমান্তরালভাবে চালানো হয়।
থ্রেড সংখ্যানির্দিষ্ট থ্রেডের সংখ্যা (throttleLimit) নিয়ন্ত্রণ করা হয়।প্রতিটি Step আলাদাভাবে রান করা হয়।
ব্যবহারএকক Step এর জন্য দ্রুত প্রসেসিং।একাধিক Step একসাথে সম্পন্ন করতে ব্যবহৃত।
প্রসেসিং স্কেলএকক Step এর মধ্যে মাল্টি-থ্রেড প্রসেসিং।বিভিন্ন Step একই সময়ে চালানো।
এফেক্টিভনেসডেটার মধ্যে সমান্তরাল প্রসেসিং সম্ভব নয়, শুধুমাত্র Step এর মধ্যে।একাধিক Step একসাথে প্রসেস করা যায়।

সারাংশ

স্প্রিং ব্যাচে Multi-threaded Step এবং Parallel Steps দুটি শক্তিশালী কনফিগারেশন যা আপনার ব্যাচ প্রসেসিংয়ের কার্যকারিতা এবং স্কেলেবিলিটি উন্নত করতে সাহায্য করে। Multi-threaded Step একক Step এর মধ্যে একাধিক থ্রেড ব্যবহার করে দ্রুত প্রসেসিং সক্ষম করে, যখন Parallel Steps একাধিক Step কে একসাথে চালিয়ে সামগ্রিক প্রসেসিং সময় কমিয়ে দেয়। এই কনফিগারেশনগুলো বিশেষভাবে বড় ডেটাসেটের জন্য উপযোগী, যেখানে প্রসেসিং দ্রুত এবং স্কেলেবল হতে হয়।

Content added By
Promotion

Are you sure to start over?

Loading...