হ্যাজেলকাস্ট হলো একটি ওপেন-সোর্স ইন-মেমোরি ডাটা গ্রিড এবং কম্পিউটিং প্ল্যাটফর্ম, যা ডিস্ট্রিবিউটেড ডেটা প্রসেসিং এবং ক্যাশিং এর জন্য ব্যবহৃত হয়। এটি মূলত উচ্চ পারফরম্যান্স এবং স্কেলেবিলিটি প্রদানের জন্য ডিজাইন করা হয়েছে, যেখানে ডেটা ডিস্ট্রিবিউটেড নোডের মাধ্যমে মেমোরিতে সংরক্ষণ করা হয়। Hazelcast-এর সাহায্যে ডেটা দ্রুত অ্যাক্সেস করা যায় এবং এটি ক্লাস্টার ভিত্তিক আর্কিটেকচারের মাধ্যমে একাধিক সার্ভারে ডেটা ছড়িয়ে দেয়।
Hazelcast হল একটি ইন-মেমোরি ডেটা গ্রিড (In-Memory Data Grid) এবং ক্লাউড-নেটিভ কম্পিউটিং প্ল্যাটফর্ম, যা ডিস্ট্রিবিউটেড ডেটা ম্যানেজমেন্ট এবং প্রসেসিংয়ের জন্য ব্যবহৃত হয়। এটি মূলত দ্রুতগতির ডেটা অ্যাক্সেস, স্কেলেবিলিটি, এবং ডিস্ট্রিবিউটেড প্রসেসিংয়ের জন্য ডিজাইন করা হয়েছে। Hazelcast একটি ক্লাস্টারের মধ্যে ডেটা এবং প্রসেসিং টাস্কগুলোকে ভাগ করে কাজ করে, যার ফলে অ্যাপ্লিকেশন পারফরম্যান্স অনেকাংশে বৃদ্ধি পায়।
Hazelcast-এর মাধ্যমে আপনি সহজেই ডিস্ট্রিবিউটেড ক্যাশ, ম্যাপ, কিউ এবং ডেটাবেস তৈরি করতে পারেন। Hazelcast-এর ক্লাস্টার সিস্টেম খুবই ফল্ট-টলারেন্ট, অর্থাৎ ক্লাস্টারের কোনো সদস্য ব্যর্থ হলে অন্য সদস্যরা সেই কাজ চালিয়ে যেতে পারে। এটি Java, .NET, এবং C++ সহ অনেক প্ল্যাটফর্ম সমর্থন করে।
Hazelcast-এর সর্বশেষ সংস্করণ ডাউনলোড করতে হলে Hazelcast অফিসিয়াল ওয়েবসাইট এ যান এবং Hazelcast Community Edition ডাউনলোড করুন। এটি একটি Java ভিত্তিক প্ল্যাটফর্ম, তাই Java Development Kit (JDK) ইনস্টল থাকতে হবে।
<dependency>
<groupId>com.hazelcast</groupId>
<artifactId>hazelcast</artifactId>
<version>5.0</version>
</dependency>
Hazelcast ক্লাস্টার শুরু করতে, আপনি Hazelcast এর একটি সিম্পল নোড তৈরি করতে পারেন।
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
public class HazelcastExample {
public static void main(String[] args) {
// Hazelcast instance তৈরি করা
HazelcastInstance hz = Hazelcast.newHazelcastInstance();
// ডিস্ট্রিবিউটেড ম্যাপ তৈরি করা
Map<String, String> map = hz.getMap("exampleMap");
map.put("key1", "value1");
System.out.println("Map value: " + map.get("key1"));
// Hazelcast instance বন্ধ করা
hz.shutdown();
}
}
উপরের উদাহরণে, একটি Hazelcast instance তৈরি করা হয়েছে এবং একটি ডিস্ট্রিবিউটেড Map তৈরি করা হয়েছে যেখানে ডেটা ইনসার্ট এবং রিট্রিভ করা হয়েছে।
Hazelcast এর কনফিগারেশন XML বা প্রোগ্রামেটিকভাবে করা যায়। নিচে একটি সাধারণ XML কনফিগারেশন দেখানো হল:
<hazelcast>
<cluster-name>dev</cluster-name>
<network>
<port auto-increment="true">5701</port>
<join>
<multicast enabled="true"/>
<tcp-ip enabled="false"/>
</join>
</network>
</hazelcast>
এই কনফিগারেশনে Hazelcast এর ক্লাস্টার-নেম এবং নেটওয়ার্ক পোর্ট নির্ধারণ করা হয়েছে। Hazelcast এর ডিফল্ট পোর্ট হল 5701।
Hazelcast এর মাধ্যমে বিভিন্ন ধরনের ডিস্ট্রিবিউটেড ডেটা স্ট্রাকচার তৈরি করা যায়, যেমন Map, Set, Queue, List, এবং MultiMap। নিচে এর কয়েকটি উদাহরণ দেখানো হয়েছে।
Map<String, Integer> customerMap = hz.getMap("customers");
customerMap.put("C101", 100);
customerMap.put("C102", 200);
System.out.println("Customer C101's balance: " + customerMap.get("C101"));
Set<String> customerSet = hz.getSet("customerSet");
customerSet.add("C101");
customerSet.add("C102");
System.out.println("Customer set contains C101: " + customerSet.contains("C101"));
Queue<String> orderQueue = hz.getQueue("orders");
orderQueue.offer("Order1");
orderQueue.offer("Order2");
System.out.println("Processing: " + orderQueue.poll());
Hazelcast এর মাধ্যমে আপনি SQL কুয়েরি চালাতে পারেন, যা ডিস্ট্রিবিউটেড ডেটা কুয়েরি করার একটি কার্যকর উপায়। Hazelcast এর ম্যাপের ওপর SQL কুয়েরি চালানোর উদাহরণ:
HazelcastInstance hz = Hazelcast.newHazelcastInstance();
IMap<Integer, Person> personMap = hz.getMap("persons");
// SQL কুয়েরি
String sql = "SELECT * FROM persons WHERE age > 30";
SqlResult result = hz.getSql().execute(sql);
for (SqlRow row : result) {
System.out.println("Name: " + row.getObject("name") + ", Age: " + row.getObject("age"));
}
Hazelcast এর Jet মডিউল স্ট্রিম এবং ব্যাচ প্রসেসিংয়ের জন্য ব্যবহৃত হয়। এটি ডিস্ট্রিবিউটেড ডেটা প্রসেসিং সক্ষম করে, যা রিয়েল-টাইম অ্যাপ্লিকেশনের জন্য গুরুত্বপূর্ণ।
Pipeline pipeline = Pipeline.create();
pipeline.readFrom(Sources.list("numbers"))
.map(num -> num * num)
.writeTo(Sinks.logger());
JetInstance jet = Jet.newJetInstance();
List<Integer> numbers = jet.getList("numbers");
numbers.addAll(Arrays.asList(1, 2, 3, 4, 5));
jet.newJob(pipeline).join();
উপরের উদাহরণে, Hazelcast Jet ব্যবহার করে একটি স্ট্রিম প্রসেসিং পাইপলাইন তৈরি করা হয়েছে যা একটি লিস্টের সংখ্যাগুলোকে স্কোয়ার করে প্রিন্ট করবে।
নিচে Hazelcast এবং অন্যান্য ইন-মেমোরি ডাটা গ্রিড ও ক্যাশিং সলিউশনের মধ্যে পার্থক্য একটি ছকের মাধ্যমে উপস্থাপন করা হলো:
বৈশিষ্ট্য | Hazelcast | Redis | Apache Ignite | Memcached |
---|---|---|---|---|
প্রধান উদ্দেশ্য | ইন-মেমোরি ডাটা গ্রিড এবং ডিস্ট্রিবিউটেড ক্যাশিং | ইন-মেমোরি ডেটা স্টোর এবং ক্যাশিং | ইন-মেমোরি ডাটা গ্রিড, ক্যাশিং এবং ডেটা প্রসেসিং | সহজ ইন-মেমোরি ক্যাশিং সিস্টেম |
ডেটা মডেল | ডিস্ট্রিবিউটেড ডেটা স্ট্রাকচার (Map, Set, List, Queue, Topic) | কী-ভ্যালু পেয়ার, সেট, হ্যাশ, লিস্ট, স্ট্রিম | ডিস্ট্রিবিউটেড ডেটা স্ট্রাকচার, SQL সমর্থন | কী-ভ্যালু পেয়ার ভিত্তিক ক্যাশিং |
SQL সমর্থন | সমর্থন করে (Hazelcast SQL) | সমর্থন করে না | সমর্থন করে (ANSI SQL সমর্থন) | সমর্থন করে না |
ডিস্ট্রিবিউটেড আর্কিটেকচার | ক্লাস্টার ভিত্তিক, হরাইজন্টাল স্কেলিং | ক্লাস্টার ভিত্তিক, কিন্তু হরাইজন্টাল স্কেল সীমিত | ক্লাস্টার ভিত্তিক, হরাইজন্টাল এবং ভার্টিকাল স্কেলিং | ক্লাস্টার সাপোর্ট, কিন্তু স্কেলিং সীমিত |
পার্সিস্টেন্স সমর্থন | সমর্থন করে (ব্যাকআপ এবং রিকভারি) | পার্সিস্টেন্স সমর্থন করে (RDB, AOF) | সমর্থন করে (Durable Memory) | সমর্থন করে না (শুধু ইন-মেমোরি) |
ইন-মেমোরি ডাটা গ্রিড | সমর্থন করে | সমর্থন করে না | সমর্থন করে | সমর্থন করে না |
স্ট্রিম প্রসেসিং | সমর্থন করে (Hazelcast Jet) | কিছু সীমিত স্ট্রিম প্রসেসিং সমর্থন করে | সমর্থন করে (Machine Learning সমর্থন) | সমর্থন করে না |
ACID সমর্থন | ACID ট্রানজাকশন সমর্থন করে | ACID সমর্থন নেই | ACID সমর্থন করে | ACID সমর্থন নেই |
ল্যাঙ্গুয়েজ এবং API সমর্থন | Java, .NET, C++, Node.js, Python ইত্যাদি | Java, Python, Node.js, Go, Ruby, C ইত্যাদি | Java, .NET, C++, Python, Scala ইত্যাদি | Java, Python, PHP, Ruby ইত্যাদি |
ইন্ডেক্সিং এবং কনসিসটেন্সি | ইনডেক্সিং সমর্থন করে, ডিস্ট্রিবিউটেড কনসিসটেন্সি সমর্থন | ইনডেক্সিং সীমিত, eventual consistency | ইনডেক্সিং সমর্থন করে, শক্তিশালী কনসিসটেন্সি | ইনডেক্সিং নেই, eventual consistency |
স্কেলেবিলিটি | হরাইজন্টাল স্কেলিং সমর্থন করে | হরাইজন্টাল স্কেলিং সমর্থন করে, কিন্তু সীমিত | হরাইজন্টাল এবং ভার্টিকাল উভয়ই সমর্থন করে | সীমিত হরাইজন্টাল স্কেলিং |
ব্যবহার ক্ষেত্র | ক্যাশিং, ডিস্ট্রিবিউটেড প্রসেসিং, রিয়েল-টাইম অ্যানালিটিক্স | ক্যাশিং, মেসেজ ব্রোকিং, স্ট্রিম প্রসেসিং | ক্যাশিং, ডাটা প্রসেসিং, রিয়েল-টাইম অ্যানালিটিক্স | সহজ ইন-মেমোরি ক্যাশিং |
মাল্টি-মাস্টার সাপোর্ট | সমর্থন করে | সমর্থন করে না | সমর্থন করে | সমর্থন করে না |
ডেটা স্টোরেজ মডেল:
SQL এবং ডিস্ট্রিবিউটেড প্রসেসিং:
স্কেলেবিলিটি:
ব্যবহার ক্ষেত্র:
Hazelcast একটি শক্তিশালী ইন-মেমোরি ডাটা গ্রিড এবং ডিস্ট্রিবিউটেড প্রসেসিং সিস্টেম, যা বড় স্কেল এবং উচ্চ পারফরম্যান্স প্রয়োজনীয় সিস্টেমের জন্য আদর্শ। Redis হলো একটি কী-ভ্যালু ভিত্তিক ইন-মেমোরি ডেটা স্টোর, যা ক্যাশিং এবং স্ট্রিম প্রসেসিংয়ের জন্য ব্যবহৃত হয়। Apache Ignite ডিস্ট্রিবিউটেড ডাটা গ্রিড এবং SQL সমর্থনের মাধ্যমে ক্যাশিং এবং ডেটা প্রসেসিংয়ের জন্য ব্যবহৃত হয়, এবং Memcached হলো হালকা ও দ্রুত ইন-মেমোরি ক্যাশিং সিস্টেম, যা সাধারণত ছোট এবং কমপ্লেক্স নয় এমন কাজের জন্য উপযুক্ত।