Java 8 এর পরে, CompletableFuture একটি নতুন কনকারেন্ট প্রোগ্রামিং ফিচার হিসেবে পরিচিতি পেয়েছে, যা অ্যাসিঙ্ক্রোনাস অপারেশন সহজ এবং কার্যকরীভাবে সম্পাদন করতে সাহায্য করে। MongoDB-র মতো ডেটাবেস সিস্টেমে অ্যাসিঙ্ক্রোনাস কোডের ব্যবহার অনেক গুরুত্বপূর্ণ, কারণ এটি সার্ভারের সাথে ইন্টারঅ্যাক্ট করার সময় অ্যাপ্লিকেশনকে ব্লক না করে পারফরম্যান্স উন্নত করতে সহায়ক।
এখানে আমরা আলোচনা করব কিভাবে CompletableFuture ব্যবহার করে MongoDB তে অ্যাসিঙ্ক্রোনাস অপারেশন সম্পাদন করা যায়, যাতে অ্যাপ্লিকেশন আরও প্রতিক্রিয়া সক্ষম (responsive) এবং স্কেলেবল হয়।
CompletableFuture কি?
CompletableFuture হল Java 8-এ পরিচিত একটি ক্লাস যা অ্যাসিঙ্ক্রোনাস (Asynchronous) প্রোগ্রামিংকে সহজ করে তোলে। এটি Future ইন্টারফেসের একটি উন্নত সংস্করণ, যা একটি নির্দিষ্ট সময় পরে প্রাপ্ত ফলাফল (result) প্রদান করে। এর মাধ্যমে আপনি নির্দিষ্ট একটি কাজের সমাপ্তি পর্যন্ত অপেক্ষা না করে অন্যান্য কাজ করতে পারেন।
CompletableFuture এর সুবিধা
- অ্যাসিঙ্ক্রোনাস এক্সিকিউশন: প্রোগ্রাম ব্লক না করে বাইরের কোডের কার্যকারিতা বজায় থাকে।
- চেইনিং এবং কম্বাইনিং: একাধিক অ্যাসিঙ্ক্রোনাস কাজের ফলাফল একত্রিত করা যায়।
- ব্যাপক কনকারেন্সি: একাধিক কাজকে প্যারালালভাবে চালানোর সুবিধা।
MongoDB তে CompletableFuture ব্যবহার
MongoDB-তে অ্যাসিঙ্ক্রোনাস অপারেশন করতে, MongoDB Java ড্রাইভার MongoCollection ক্লাসের find, insert, update, এবং delete পদ্ধতিগুলোর সাথে CompletableFuture ব্যবহার করা যেতে পারে। এতে অ্যাসিঙ্ক্রোনাসভাবে MongoDB ডেটাবেসে কার্যকলাপ পরিচালনা করা সম্ভব হয়, যা অ্যাপ্লিকেশনের পারফরম্যান্স বৃদ্ধি করে এবং সার্ভারের সাথে যোগাযোগের জন্য সময় নষ্ট হওয়া কমায়।
MongoDB-তে CompletableFuture এর সাথে অ্যাসিঙ্ক্রোনাস find অপারেশন
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class MongoAsync {
public static void main(String[] args) throws ExecutionException, InterruptedException {
MongoDatabase database = MongoDBConnection.getDatabase();
MongoCollection<Document> collection = database.getCollection("users");
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
collection.find(new Document("age", 30)).forEach(doc -> {
System.out.println(doc.toJson());
});
});
future.get(); // Ensures that the main thread waits for the async task to complete
}
}
এখানে, MongoDB তে find অপারেশনটি অ্যাসিঙ্ক্রোনাসভাবে সম্পন্ন হচ্ছে। CompletableFuture.runAsync ব্যবহার করে এই কোডটি main thread কে ব্লক না করে MongoDB তে ডেটা অনুসন্ধান করে এবং ফলাফল পর্দায় প্রদর্শন করে।
MongoDB-তে CompletableFuture ব্যবহার করে insert অপারেশন
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class MongoInsertAsync {
public static void main(String[] args) throws ExecutionException, InterruptedException {
MongoDatabase database = MongoDBConnection.getDatabase();
MongoCollection<Document> collection = database.getCollection("users");
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
Document doc = new Document("name", "Alice")
.append("age", 25)
.append("city", "New York");
collection.insertOne(doc);
System.out.println("Document inserted asynchronously.");
});
future.get(); // Wait for the async task to complete
}
}
এখানে, MongoDB তে insertOne অপারেশন অ্যাসিঙ্ক্রোনাসভাবে সম্পন্ন হচ্ছে এবং main thread ব্লক না হয়ে MongoDB তে ডেটা ইনসার্ট হয়ে যাচ্ছে।
CompletableFuture এবং MongoDB এর সম্মিলিত সুবিধা
১. অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং
MongoDB-তে অ্যাসিঙ্ক্রোনাস অপারেশন ব্যবহার করার মাধ্যমে, ডেটাবেস অপারেশনগুলি main thread থেকে আলাদা হয়ে চলে, এবং অ্যাপ্লিকেশনকে আরও দ্রুত এবং প্রতিক্রিয়া সক্ষম করে তোলে। এর ফলে দীর্ঘ সময়ের ব্যাকগ্রাউন্ড অপারেশন যেমন ডেটাবেস কোয়েরি, ডেটা ইনসার্ট ইত্যাদি সিস্টেমকে ব্লক না করে এক্সিকিউট হতে পারে।
২. প্যারালাল অপারেশন
CompletableFuture এর মাধ্যমে একাধিক MongoDB অপারেশনকে প্যারালালভাবে একসাথে সম্পাদন করা যেতে পারে। যেমন, একাধিক ডেটা ইনসার্ট বা আপডেট করার জন্য একাধিক CompletableFuture ব্যবহার করা।
৩. অ্যাপ্লিকেশন স্কেলেবিলিটি
যেহেতু অ্যাসিঙ্ক্রোনাস অপারেশনগুলি main thread থেকে আলাদা হয়ে চলে, তাই সিস্টেমে আরো অনেক কাজ একসাথে সম্পাদন করা যায়। এর ফলে অ্যাপ্লিকেশনটি আরও স্কেলেবল এবং উচ্চ পারফরম্যান্স যুক্ত হয়।
Java এর CompletableFuture ব্যবহার করে MongoDB তে অ্যাসিঙ্ক্রোনাস অপারেশনগুলি সম্পাদন করা যেতে পারে, যা অ্যাপ্লিকেশনগুলিকে দ্রুত, প্রতিক্রিয়া সক্ষম এবং স্কেলেবল করে তোলে। MongoDB ড্রাইভার এবং CompletableFuture এর সম্মিলিত ব্যবহার ডেটাবেস অপারেশনগুলির পারফরম্যান্স বৃদ্ধি করতে সহায়ক এবং সার্ভারের সাথে যোগাযোগের জন্য সময় নষ্ট হওয়া কমায়। MongoDB ডেটাবেসের সাথে কাজ করার সময় এটি একটি কার্যকর কৌশল, বিশেষত যখন উচ্চ-কার্যক্ষমতা এবং কম বিলম্বিত অ্যাপ্লিকেশন তৈরি করা হয়।
Read more