Hazelcast একটি শক্তিশালী ডিস্ট্রিবিউটেড কম্পিউটিং প্ল্যাটফর্ম, যা ডিস্ট্রিবিউটেড টাস্ক এক্সিকিউশন, ডেটা প্রসেসিং এবং কমপ্লেক্স কম্পিউটেশনাল কার্যক্রম পরিচালনার জন্য ব্যবহৃত হয়। এটি মাল্টিপল সার্ভার বা নোডের মধ্যে কাজের লোড এবং ডেটা ভাগ করে, যা একে একে ফাস্ট এবং স্কেলেবল সিস্টেম তৈরি করতে সহায়ক। ডিস্ট্রিবিউটেড কম্পিউটিংয়ের জন্য Hazelcast নিম্নলিখিত সুবিধাগুলি প্রদান করে।
ExecutorService Hazelcast-এর একটি শক্তিশালী বৈশিষ্ট্য যা ডিস্ট্রিবিউটেড টাস্ক এক্সিকিউশন এবং কাজের বিভাজন সমর্থন করে। এটি বড় পরিমাণের কাজ একাধিক নোডে ভাগ করে এবং প্রতিটি নোডে সেই কাজ সম্পন্ন করার জন্য টাস্ক পাঠায়। এর ফলে, প্রক্রিয়াগুলি দ্রুত সম্পন্ন হয় এবং প্রক্রিয়াকরণের সময় কমে যায়।
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.ExecutorService;
import com.hazelcast.core.ExecutionCallback;
public class HazelcastExecutorServiceExample {
public static void main(String[] args) {
HazelcastInstance hz = Hazelcast.newHazelcastInstance();
ExecutorService executor = hz.getExecutorService("myExecutor");
// Define a simple task
Runnable task = () -> {
System.out.println("Executing task in distributed mode!");
};
// Execute the task on multiple nodes
executor.submit(task);
// Add callback to handle completion
executor.submit(task, new ExecutionCallback<Void>() {
@Override
public void onResponse(Void response) {
System.out.println("Task completed successfully");
}
@Override
public void onFailure(Throwable t) {
System.out.println("Task failed with exception: " + t);
}
});
}
}
Hazelcast Entry Processors ব্যবহার করে ডিস্ট্রিবিউটেড ডেটা প্রক্রিয়াকরণ করতে পারে। Entry Processor হল একটি কম্পিউটেশনাল ইউনিট যা Hazelcast-এর ডিস্ট্রিবিউটেড IMap অথবা অন্যান্য ডেটা স্ট্রাকচারে পরিচালিত হয়। Entry Processors ডেটার উপরে সরাসরি কাজ করে এবং Distributed Computing প্রক্রিয়া চালাতে সাহায্য করে, যেমন: ডেটা আপডেট করা, মান গণনা করা, অথবা কমপ্লেক্স ডেটা প্রসেসিং।
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.IMap;
import com.hazelcast.map.EntryProcessor;
import java.util.Map;
public class HazelcastEntryProcessorExample {
public static void main(String[] args) {
HazelcastInstance hz = Hazelcast.newHazelcastInstance();
IMap<Integer, String> map = hz.getMap("myMap");
// Adding some data to IMap
map.put(1, "One");
map.put(2, "Two");
// Create and submit an EntryProcessor to process map entries
map.executeOnEntries(new EntryProcessor<Integer, String, String>() {
@Override
public String process(Map.Entry<Integer, String> entry) {
String value = entry.getValue();
entry.setValue(value.toUpperCase()); // Convert to uppercase
return value;
}
});
// Verify that the values have been processed
System.out.println("Map entry after processing: " + map.get(1)); // Output: ONE
}
}
Hazelcast MapReduce সমর্থন করে, যা একটি ডিস্ট্রিবিউটেড কম্পিউটিং প্যাটার্ন, যা ডেটাকে ম্যাপ স্টেজে ভাগ করে এবং রিডিউস স্টেজে সংক্ষেপ করে। Hazelcast MapReduce API ব্যবহার করে, এটি বৃহৎ ডেটাসেটের উপরে কাজ করতে সক্ষম হয় এবং পারালাল প্রসেসিং নিশ্চিত করে।
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.mapreduce.Job;
import com.hazelcast.mapreduce.Mapper;
import com.hazelcast.mapreduce.Reducer;
import com.hazelcast.mapreduce.KeyValueSource;
import java.util.Map;
public class HazelcastMapReduceExample {
public static void main(String[] args) {
HazelcastInstance hz = Hazelcast.newHazelcastInstance();
// Create a sample map
Map<Integer, String> map = hz.getMap("sampleMap");
map.put(1, "apple");
map.put(2, "banana");
map.put(3, "orange");
// Define a MapReduce Job
Job<Integer, String> job = hz.getJobTracker("myJob").newJob(KeyValueSource.fromMap(map));
// Define a Mapper
job.mapper(new Mapper<Integer, String, String, Integer>() {
@Override
public void map(Integer key, String value, Context<String, Integer> context) {
context.emit(value, 1); // Emit each fruit name with count 1
}
});
// Define a Reducer
job.reducer(new Reducer<String, Integer>() {
@Override
public Integer reduce(String key, Iterable<Integer> values) {
int sum = 0;
for (Integer value : values) {
sum += value;
}
return sum;
}
});
// Execute the MapReduce job
Map<String, Integer> result = job.submit().get();
System.out.println(result); // Output: {banana=1, orange=1, apple=1}
}
}
Hazelcast Distributed Locking সমর্থন করে, যা ডিস্ট্রিবিউটেড সিস্টেমে একাধিক নোডের মধ্যে সিঙ্ক্রোনাইজেশনের জন্য ব্যবহৃত হয়। এটি সাধারণত তখন ব্যবহার করা হয় যখন একাধিক প্রক্রিয়া একই ডেটা বা রিসোর্স অ্যাক্সেস করতে চায় এবং আপনি নিশ্চিত করতে চান যে, একসাথে শুধুমাত্র একটি প্রক্রিয়া ওই রিসোর্সটি অ্যাক্সেস করতে পারবে।
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.ILock;
public class HazelcastDistributedLockExample {
public static void main(String[] args) {
HazelcastInstance hz = Hazelcast.newHazelcastInstance();
ILock lock = hz.getLock("myLock");
try {
// Acquire the lock
lock.lock();
System.out.println("Lock acquired, performing the task...");
// Simulate task
Thread.sleep(2000); // Task execution
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
// Release the lock
lock.unlock();
System.out.println("Lock released.");
}
}
}
Distributed Computing with Hazelcast ব্যবহার করে আপনি ডিস্ট্রিবিউটেড টাস্ক এক্সিকিউশন, ডেটা প্রসেসিং, ও কমপ্লেক্স কম্পিউটেশনাল কাজ করতে পারেন। Hazelcast এর ExecutorService, Entry Processors, MapReduce এবং Distributed Locking এর মাধ্যমে, আপনি একটি দ্রুত, স্কেলেবল এবং ফল্ট টলারেন্ট
সিস্টেম তৈরি করতে সক্ষম হবেন।
Hazelcast ExecutorService একটি শক্তিশালী মেকানিজম যা ডিস্ট্রিবিউটেড টাস্ক এক্সিকিউশন সমর্থন করে। এটি একাধিক নোডে কাজগুলি বিতরণ করতে এবং সেগুলির কার্যকারিতা সমন্বয় করতে ব্যবহৃত হয়। Hazelcast-এর ExecutorService ডিস্ট্রিবিউটেড কম্পিউটিং প্ল্যাটফর্মের অন্যতম গুরুত্বপূর্ণ বৈশিষ্ট্য, যা একাধিক সার্ভারে কাজগুলি সমান্তরালে চালানো সম্ভব করে এবং স্কেলেবিলিটি নিশ্চিত করে।
ExecutorService হল একটি API যা বিভিন্ন task বা কাজ এক্সিকিউট করতে ব্যবহৃত হয়, এবং Hazelcast এর মাধ্যমে এটি ডিস্ট্রিবিউটেড পরিবেশে কাজগুলিকে একাধিক নোডে বিতরণ করে। Hazelcast ExecutorService স্বয়ংক্রিয়ভাবে কাজগুলি বিভিন্ন নোডে বিতরণ করে এবং এগুলির ফলাফল সংগ্রহ করে, যাতে ডিস্ট্রিবিউটেড অ্যাপ্লিকেশন উন্নত পারফরম্যান্সে কাজ করতে পারে।
Hazelcast ExecutorService প্রধানত তিনটি মৌলিক উপাদান নিয়ে কাজ করে:
Hazelcast ExecutorService ব্যবহার করে একাধিক নোডে কাজ বিতরণ করার একটি সাধারণ উদাহরণ:
প্রথমে Hazelcast ইনস্ট্যান্স তৈরি করতে হবে এবং এর মাধ্যমে ExecutorService গ্রহণ করতে হবে:
HazelcastInstance hz = Hazelcast.newHazelcastInstance();
ExecutorService executor = hz.getExecutorService("myExecutor");
এখন একটি Runnable টাস্ক তৈরি করা যাক যা ক্লাস্টারের সব নোডে রান করবে:
Runnable task = () -> {
System.out.println("Task executed on: " + Thread.currentThread().getName());
};
এখন, ExecutorService এর মাধ্যমে এই টাস্ক ক্লাস্টারের সব নোডে ডিসপ্যাচ করা হবে:
executor.submitToAllMembers(task);
Callable টাস্ক ব্যবহার করলে আপনি ফিউচার রিটার্ন করতে পারবেন, যা কাজটি সম্পন্ন হওয়ার পর একটি ফলাফল প্রদান করে। উদাহরণ:
Callable<String> callableTask = () -> {
return "Task executed on: " + Thread.currentThread().getName();
};
Future<String> future = executor.submitToAllMembers(callableTask);
String result = future.get(); // Blocking call until task finishes
System.out.println(result);
Hazelcast ExecutorService হল একটি শক্তিশালী টুল যা ডিস্ট্রিবিউটেড পরিবেশে কাজগুলি সমান্তরালে এক্সিকিউট করতে সাহায্য করে। এটি ডিস্ট্রিবিউটেড টাস্ক এক্সিকিউশন, অ্যাসিঙ্ক্রোনাস প্রসেসিং, এবং স্কেলেবিলিটি বাড়াতে সহায়ক। Hazelcast ExecutorService ব্যবহারের মাধ্যমে বড় সিস্টেমে পারফরম্যান্স বাড়ানো যায় এবং কাজগুলো আরও কার্যকরীভাবে পরিচালনা করা যায়।
Hazelcast-এর EntryProcessor একটি শক্তিশালী ডেটা প্রসেসিং কৌশল, যা ডিস্ট্রিবিউটেড ম্যাপ বা অন্যান্য ডিস্ট্রিবিউটেড ডেটা স্ট্রাকচারে ডেটা প্রসেসিং বা ম্যানিপুলেশন করতে ব্যবহৃত হয়। এটি ডেটা সেন্ট্রালাইজড না করে, বরং ডেটার অবস্থানে (নোডে) প্রসেসিং করে, যার ফলে পারফরম্যান্স বৃদ্ধি পায় এবং নেটওয়ার্ক লোড কমে যায়।
EntryProcessor হল Hazelcast এর একটি ডিস্ট্রিবিউটেড ডেটা প্রসেসিং API যা একটি একক এন্ট্রির উপর ইনপুট এবং আউটপুট প্রসেস করতে ব্যবহৃত হয়। এই প্রসেসরটি, ডেটার অবস্থানে (নোডে) প্রসেসিং করে, ফলে এটি distributed computing এবং data locality নিশ্চিত করে, এবং পুরো ডিস্ট্রিবিউটেড সিস্টেমের পারফরম্যান্স বৃদ্ধি করে।
নিচে একটি উদাহরণ দেওয়া হল যেখানে EntryProcessor ব্যবহার করে Map-এর একক এন্ট্রি প্রসেস করা হয়েছে।
import com.hazelcast.core.*;
import com.hazelcast.map.EntryProcessor;
import com.hazelcast.map.IMap;
import com.hazelcast.map.Entry;
import java.util.Map;
public class MyEntryProcessor implements EntryProcessor<String, String, String> {
@Override
public String process(Map.Entry<String, String> entry) {
// Entry এর মান পরিবর্তন করা
String value = entry.getValue();
value = value + " - Processed"; // modify value
entry.setValue(value); // setting updated value
return value;
}
}
public class HazelcastEntryProcessorExample {
public static void main(String[] args) {
HazelcastInstance hz = Hazelcast.newHazelcastInstance();
IMap<String, String> map = hz.getMap("myMap");
// Add some data
map.put("key1", "value1");
map.put("key2", "value2");
// Apply EntryProcessor to the map
map.executeOnKey("key1", new MyEntryProcessor());
// Check updated value
System.out.println("Updated value: " + map.get("key1")); // Output will be "value1 - Processed"
}
}
Explanation:
process()
মেথডে ডেটা পরিবর্তন (এখানে value
অ্যাড করা) করা হয়েছে।executeOnKey()
মেথডের মাধ্যমে নির্দিষ্ট একটি কী-এর উপর প্রসেসর চালানো হয়েছে, যাতে ডেটার স্থানান্তর ছাড়াই স্থানীয়ভাবে ডেটা প্রসেস করা হয়।EntryProcessor হল Hazelcast-এর একটি শক্তিশালী বৈশিষ্ট্য যা ডিস্ট্রিবিউটেড ডেটা স্ট্রাকচারগুলিতে ডেটা প্রসেসিং করে। এটি ডেটা স্থানান্তর কমায়, পারফরম্যান্স বৃদ্ধি করে এবং অ্যাটমিক অপারেশন সম্পাদন করে। ডেটা প্রসেসিংয়ের জন্য EntryProcessor ব্যবহার করে আপনি ক্যাশে এবং ম্যাপে দ্রুত এবং সঠিকভাবে ডেটা ম্যানিপুলেশন করতে পারবেন, যা ডিস্ট্রিবিউটেড সিস্টেমের কার্যক্ষমতা নিশ্চিত করে।
MapReduce একটি জনপ্রিয় ডিস্ট্রিবিউটেড কম্পিউটিং মডেল, যা বড় পরিমাণে ডেটাকে সমান্তরালভাবে প্রসেস করতে ব্যবহৃত হয়। এটি ডেটা প্রক্রিয়াকরণে দুটি প্রধান ধাপে বিভক্ত:
Hazelcast একটি ডিস্ট্রিবিউটেড ডেটা গ্রিড এবং কম্পিউটিং প্ল্যাটফর্ম, যা ডিস্ট্রিবিউটেড ডেটা স্ট্রাকচার এবং ডিস্ট্রিবিউটেড কম্পিউটিং সক্ষম করে। Hazelcast এবং MapReduce এর একত্রিত ব্যবহার একটি শক্তিশালী কম্পিউটেশনাল পরিবেশ তৈরি করে, যা বড় পরিসরের ডেটা বিশ্লেষণ এবং প্রসেসিংয়ে সহায়ক।
Hazelcast এর ক্লাস্টার-ভিত্তিক আর্কিটেকচার MapReduce প্রক্রিয়ায় ব্যবহৃত ডেটাকে বিভিন্ন নোডে ভাগ করে, যার ফলে কম্পিউটেশনাল কাজগুলি সমান্তরালভাবে দ্রুত সম্পন্ন হয়।
Hazelcast সিস্টেমে যত বেশি নোড যুক্ত করা হয়, ততই MapReduce টাস্কগুলির স্কেলিং আরও সহজ হয়। ক্লাস্টারের প্রতিটি নোড MapReduce এর অংশসমূহ প্রসেস করতে পারে, যার ফলে বড় পরিসরের ডেটা দ্রুত প্রসেস করা সম্ভব হয়।
MapReduce এর মানে হল যে, প্রতিটি ম্যাপ এবং রিডিউস অপারেশন পৃথক নোডে সম্পন্ন হওয়ার ফলে লোড ব্যালেন্সিং এবং কার্যকারিতা উন্নত হয়।
Hazelcast এর API এবং ডিস্ট্রিবিউটেড ডেটা স্ট্রাকচার সহজেই MapReduce কর্মপ্রবাহের সাথে সংযুক্ত হতে পারে, এবং এতে কোনও বিশেষ কনফিগারেশন ছাড়াই ডিস্ট্রিবিউটেড কাজ করা সম্ভব।
Hazelcast এবং MapReduce ইন্টিগ্রেশন সাধারণত তিনটি প্রধান পর্যায়ে সম্পন্ন হয়:
Hazelcast ডেটাকে বিভিন্ন পার্টিশনে ভাগ করে, যেখানে প্রতিটি পার্টিশন একটি আলাদা নোডে থাকে। এই পার্টিশনগুলির মাধ্যমে Map ফেজ পরিচালিত হয়, যেখানে প্রতিটি নোড নিজের নিজস্ব ডেটার ওপর কাজ করে।
IMap<String, Integer> map = hzInstance.getMap("dataMap");
map.put("key1", 1);
map.put("key2", 2);
MapReduce-এর Reduce ফেজে, Hazelcast তার IMap, ISet, IQueue ডেটা স্ট্রাকচারের মাধ্যমে ফলাফল গুলি সংগ্রহ করে এবং একটি সার্বিক আউটপুট তৈরি করে। এখানে প্রাপ্ত ডেটা বিভিন্ন নোডের মধ্যে বিতরণ করা হয় এবং তা কম্বাইন বা রিডিউস করা হয়।
map.aggregate(new Aggregator() {
public Object aggregate(IMap map) {
int sum = 0;
for (Map.Entry<String, Integer> entry : map.entrySet()) {
sum += entry.getValue();
}
return sum;
}
});
Hazelcast এর ক্লাস্টার ব্যবস্থাপনা অটোমেটিক্যালি কাজের বোঝা একাধিক নোডে বিতরণ করে, ফলে MapReduce টাস্কগুলি স্কেলেবল এবং পারফরম্যান্স অপটিমাইজড হয়। ক্লাস্টারের মধ্যে নোড যোগ করলে কার্যক্ষমতা আরও বাড়ানো সম্ভব।
Hazelcast ডিস্ট্রিবিউটেড লকিং এবং সিঙ্ক্রোনাইজেশন সমর্থন করে, যা MapReduce-এ কনকারেন্ট প্রসেসিং এবং কম্বাইনিং নিশ্চিত করে। এটি ডিসট্রিবিউটেড কাজের মধ্যে থ্রেড সেফটি বজায় রাখে।
ধরা যাক, একটি বিশাল পরিমাণের ডেটা রয়েছে, এবং আমরা চাই সেই ডেটাকে ডিস্ট্রিবিউটেডভাবে প্রসেস করে কিছু ফলাফল বের করতে। আমরা Hazelcast ক্লাস্টারের মধ্যে এই ডেটার জন্য MapReduce টাস্ক সেট করতে পারি।
// Hazelcast instance তৈরি
HazelcastInstance hz = Hazelcast.newHazelcastInstance();
// ডেটা স্টোর করার জন্য IMap
IMap<String, Integer> map = hz.getMap("map-reduce-example");
// ম্যাপ ফেজ
map.put("key1", 1);
map.put("key2", 2);
map.put("key3", 3);
// রিডিউস ফেজ
int sum = map.aggregate(new Aggregator() {
public Object aggregate(IMap map) {
int total = 0;
for (Map.Entry<String, Integer> entry : map.entrySet()) {
total += entry.getValue();
}
return total;
}
});
// ফলাফল প্রিন্ট
System.out.println("Total sum: " + sum);
এই উদাহরণে, Hazelcast ডিস্ট্রিবিউটেড ম্যাপের মাধ্যমে ডেটাকে বিভিন্ন নোডে ভাগ করে এবং পরে সেই ডেটাকে MapReduce প্রক্রিয়ায় প্রক্রিয়া করা হয়েছে।
Hazelcast এবং MapReduce ইন্টিগ্রেশন একটি শক্তিশালী ডিস্ট্রিবিউটেড কম্পিউটিং প্ল্যাটফর্ম তৈরি করে, যা বড় ডেটা প্রসেসিং এবং বিশ্লেষণ করতে সহায়ক। Hazelcast এর ডিস্ট্রিবিউটেড আর্কিটেকচার এবং MapReduce এর পারফরম্যান্স অপটিমাইজেশন একত্রে উচ্চ কার্যকারিতা এবং স্কেলেবিলিটি নিশ্চিত করে, যা বড় পরিসরের ডেটা প্রক্রিয়াকরণে অত্যন্ত উপকারী।
Distributed Locking এবং Synchronization হল ডিস্ট্রিবিউটেড সিস্টেমে একই সময়ে একাধিক থ্রেড বা নোডের মধ্যে সম্পদ বা ডেটার অ্যাক্সেস নিয়ন্ত্রণ করার জন্য ব্যবহৃত প্রযুক্তি। Hazelcast-এর মাধ্যমে এই প্রযুক্তিগুলি ব্যবহার করে ডিস্ট্রিবিউটেড সিস্টেমে ডেটা কনসিস্টেন্সি, সিঙ্ক্রোনাইজেশন এবং প্রতিযোগিতা নিয়ন্ত্রণ করা যায়।
এই টিউটোরিয়ালে, আমরা Hazelcast-এ Distributed Locking এবং Synchronization এর ধারণা এবং ব্যবহারের কৌশল আলোচনা করব।
Hazelcast-এ Distributed Locking এর মাধ্যমে একটি নির্দিষ্ট সম্পদের উপর একাধিক নোড বা থ্রেডের অ্যাক্সেসকে সিঙ্ক্রোনাইজ করা হয়। এটি একটি ধরনের mutex বা semaphore, যা নিশ্চিত করে যে একই সম্পদ এক সময়ে শুধুমাত্র এক নোড বা থ্রেড দ্বারা অ্যাক্সেসযোগ্য হবে। এতে ডেটার মধ্যে প্রতিযোগিতা (race conditions) এবং ডেটার অনিয়মিত আপডেট সমস্যা থেকে মুক্তি পাওয়া যায়।
Hazelcast-এ ILock
ইন্টারফেসটি Distributed Lock তৈরি করতে ব্যবহৃত হয়।
lock()
মেথড ব্যবহার করে একটি লক অর্জন করা হয়।unlock()
মেথড ব্যবহার করে লক মুক্ত করা হয়।HazelcastInstance hz = Hazelcast.newHazelcastInstance();
ILock lock = hz.getLock("myLock");
lock.lock(); // Lock acquired
try {
// Critical section code
System.out.println("Lock acquired, performing critical operation.");
} finally {
lock.unlock(); // Lock released
System.out.println("Lock released.");
}
getLock("myLock")
একটি নির্দিষ্ট লক তৈরি করে, এবং lock()
মেথড লক অর্জন করে। কাজ শেষ হলে unlock()
মেথড ব্যবহার করে লক মুক্ত করা হয়।finally
ব্লক ব্যবহার করা উচিত, যাতে কোনও কারণে লক আটকে গেলে সেটি মুক্ত করা যায়।boolean acquired = lock.tryLock(5, TimeUnit.SECONDS);
if (acquired) {
try {
// Critical section code
} finally {
lock.unlock();
}
} else {
System.out.println("Could not acquire lock.");
}
এখানে tryLock()
৫ সেকেন্ডের জন্য লকটি অর্জন করার চেষ্টা করবে এবং যদি সেকেন্ডের মধ্যে লক না পাওয়া যায়, তাহলে এটি false
রিটার্ন করবে।
Synchronization হল একাধিক থ্রেড বা নোডের মধ্যে একই সময়ে একই কার্যাবলি (task) পরিচালনা করতে নিয়ন্ত্রণ রাখা। এটি নিশ্চিত করে যে একাধিক থ্রেড বা নোড একসাথে একই ডেটা পরিবর্তন বা অ্যাক্সেস করতে না পারে। Hazelcast-এ, ডিস্ট্রিবিউটেড সিঙ্ক্রোনাইজেশন সাধারণত লকিং মেকানিজম বা EntryProcessor
ব্যবহার করে করা হয়।
Hazelcast-এ synchronization নিশ্চিত করার জন্য বিভিন্ন পদ্ধতি ব্যবহৃত হয়:
IMap<Integer, Integer> map = hz.getMap("myMap");
map.put(1, 0);
EntryProcessor<Integer, Integer> processor = new EntryProcessor<Integer, Integer>() {
@Override
public Object process(Map.Entry<Integer, Integer> entry) {
entry.setValue(entry.getValue() + 1);
return null;
}
};
map.executeOnKey(1, processor); // Executes the processor on key 1
এখানে, EntryProcessor
ব্যবহার করে আমরা একটি নির্দিষ্ট IMap
এর কীগুলোর উপর সিঙ্ক্রোনাইজড পরিবর্তন করতে পারি। এতে প্রতিযোগিতা (race conditions) প্রতিরোধ করা যায়।
IAtomicLong atomicLong = hz.getAtomicLong("counter");
atomicLong.incrementAndGet(); // Increment atomically
Hazelcast এর IAtomicLong
এবং IAtomicReference
ক্লাসগুলি ব্যবহৃত হয় অ্যাটমিক অপারেশন (যেমন ইনক্রিমেন্ট বা ডিক্রিমেন্ট) করতে, যা থ্রেড বা নোডের মধ্যে সিঙ্ক্রোনাইজডভাবে কাজ করে।
Hazelcast-এর Distributed Locking এবং Synchronization পদ্ধতিগুলি ডিস্ট্রিবিউটেড সিস্টেমে ডেটার কনসিস্টেন্সি, প্রতিযোগিতা নিয়ন্ত্রণ এবং সিঙ্ক্রোনাইজেশন নিশ্চিত করতে গুরুত্বপূর্ণ ভূমিকা পালন করে। ILock
এবং EntryProcessor
এর মাধ্যমে ডেটার উপর সিঙ্ক্রোনাইজড অপারেশন পরিচালনা করা যায়, যা ডিস্ট্রিবিউটেড অ্যাপ্লিকেশনের পারফরম্যান্স ও নিরাপত্তা বৃদ্ধি করতে সহায়ক।
common.read_more