Key-Value Store কী?
Key-Value Store (KVS) হলো একটি নোএসকিউএল ডাটাবেস যেখানে ডাটা সংরক্ষণ করা হয় কী-ভ্যালু জোড় আকারে। এটি একটা বিশাল ডিকশনারির মতো – আপনি একটি কী (যেমন: user:101) দিলে সেটার বিপরীতে ভ্যালু (যেমন: {"নাম": "রহিম", "ইমেইল": "rahim@example.com"}) পেয়ে যান।
সহজ ভাষায়: আপনার ফোনের কন্ট্যাক্ট লিস্টের মতো। আপনি নাম (কী) দিয়ে ফোন নম্বর (ভ্যালু) খুঁজে পান। এর বেশি কিছু না – খুব সরল, খুব দ্রুত।
মূল বৈশিষ্ট্য
| বৈশিষ্ট্য | ব্যাখ্যা |
|---|---|
| কী | ইউনিক আইডেন্টিফায়ার (স্ট্রিং, ইন্টিজার, ইত্যাদি) |
| ভ্যালু | ব্লব, JSON, স্ট্রিং, সংখ্যা – কিছুই হতে পারে |
| অপারেশন | GET, SET, DELETE – খুবই সীমিত কিন্তু অত্যন্ত দ্রুত |
| ইন্ডেক্সিং | শুধু প্রাইমারি কী-তে। সেকেন্ডারি ইন্ডেক্স নেই (বেশিরভাগ ক্ষেত্রে) |
কেন Key-Value Store ব্যবহার করবেন?
- দ্রুত পারফরম্যান্স – O(1) সময়ে ডাটা পড়া/লেখা যায় (হ্যাশ টেবিলের মতো)।
- সহজ স্কেলেবিলিটি – শার্ডিং অত্যন্ত সহজ (কী-র হ্যাশ অনুযায়ী)।
- সাধারণ মডেল – শিখতে ও ব্যবহার করতে ৫ মিনিট সময় লাগে।
- হাই থ্রুপুট – সেকেন্ডে লক্ষাধিক রিকোয়েস্ট হ্যান্ডেল করতে পারে (Redis যেমন)।
বাস্তব উদাহরণ
- ক্যাশিং – সবচেয়ে জনপ্রিয় ব্যবহার। বারবার পড়া ডাটা ক্যাশে রাখা (Redis, Memcached)।
- সেশন স্টোর – ইউজারের লগইন সেশন সংরক্ষণ (যেমন:
session_id → user_data)। - লিডারবোর্ড – গেমের স্কোরবোর্ড (Redis Sorted Set)।
- কনফিগারেশন স্টোর – অ্যাপ্লিকেশনের সেটিংস (যেমন:
"max_connections" → "500")। - ডিস্ট্রিবিউটেড লক – একাধিক সার্ভারের মধ্যে সিঙ্ক্রোনাইজেশন (Redis SETNX)।
জনপ্রিয় Key-Value Stores
| সিস্টেম | টাইপ | প্রধান ফিচার | কখন ব্যবহার করবেন |
|---|---|---|---|
| Redis | ইন-মেমরি | ডাটা স্ট্রাকচার (স্ট্রিং, লিস্ট, সেট, হ্যাশ) | ক্যাশ, সেশন, রিয়েল-টাইম লিডারবোর্ড |
| Memcached | ইন-মেমরি | শুধু স্ট্রিং কী-ভ্যালু, খুব সরল | সাধারণ ক্যাশিং |
| Amazon DynamoDB | ডিস্ক-ভিত্তিক | ম্যানেজড, অটো স্কেলিং, স্ট্রং কনসিসটেন্সি | মিশন-ক্রিটিক্যাল প্রোডাকশন সিস্টেম |
| Riak | ডিস্ক-ভিত্তিক | উচ্চ অ্যাভেইলেবিলিটি, কনফ্লিক্ট রেজোলিউশন | টেলকো, ব্যাংকিং (AP সিস্টেম) |
| Etcd | ডিস্ক-ভিত্তিক | কনসিসটেন্সি (Raft অ্যালগরিদম) | কুবারনেটিস, কনফিগারেশন শেয়ারিং |
ডাটা মডেল: অন্যান্য ডাটাবেসের সাথে তুলনা
SQL (রিলেশনাল): টেবিল → রো → কলাম
Document Store: JSON ডকুমেন্ট → ফিল্ড
Key-Value Store: কী → ভ্যালু (যেকোনো কিছু)
Key-Value Store সবচেয়ে সরল। এতে কোনো স্কিমা নেই, কোনো জয়েন নেই, কোনো ফরেন কী নেই। শুধু GET(key) আর SET(key, value)।
কী-র ডিজাইন কৌশল
ভালো কী ডিজাইন করলে অনেক সুবিধা পাওয়া যায়:
| প্যাটার্ন | উদাহরণ | ব্যাখ্যা |
|---|---|---|
| নেমস্পেস | user:1001:profile |
ইউজার ১০০১-এর প্রোফাইল |
| রিভার্স টাইমস্ট্যাম্প | order:202312051430:12345 |
সময় অনুযায়ী সাজানো যায় |
| হায়ারার্কিক্যাল | app:module:feature:key |
সম্পর্কিত ডাটা গ্রুপিং |
| কম্পোজিট কী | cart:user123:item456 |
রিলেশন তৈরি |
ট্রেড-অফ: ইন-মেমরি বনাম ডিস্ক-ভিত্তিক
| দিক | ইন-মেমরি (Redis, Memcached) | ডিস্ক-ভিত্তিক (DynamoDB, RocksDB) |
|---|---|---|
| লেটেন্সি | মাইক্রোসেকেন্ড | মিলিসেকেন্ড |
| পার্সিসটেন্সি | ঐচ্ছিক (স্ন্যাপশট/এওএফ) | সবসময় (ডিস্কে লেখা) |
| ক্যাপাসিটি | RAM দ্বারা সীমিত | ডিস্ক দ্বারা সীমিত (সস্তা) |
| খরচ | বেশি (RAM দামি) | কম |
| ব্যবহার | ক্যাশ, রিয়েল-টাইম | প্রাইমারি স্টোরেজ |
ক্যোয়ারির ক্ষমতা: সীমাবদ্ধতা বুঝুন
Key-Value Store ভ্যালুর ভিতরে ক্যোয়ারি করতে পারে না। যেমন:
আপনি করতে পারবেন: GET("user:1001")
আপনি পারবেন না: সবার ভ্যালু থেকে "ঢাকা" খোঁজা
আপনি পারবেন না: বয়স ৩০-এর বেশি সব ইউজার বের করা
সমাধান: সেকেন্ডারি ইন্ডেক্সের জন্য সেপারেট কী-ভ্যালু স্টোর বা সার্চ ইঞ্জিন (Elasticsearch) ব্যবহার করুন।
কখন Key-Value Store ব্যবহার করবেন (না করবেন)?
ব্যবহার করবেন:
- ক্যাশিং
- সেশন ম্যানেজমেন্ট
- রিয়েল-টাইম লিডারবোর্ড
- কনফিগারেশন স্টোর
- ডিস্ট্রিবিউটেড লক
ব্যবহার করবেন না:
- জটিল ক্যোয়ারি (JOIN, GROUP BY) দরকার হলে → SQL নিন
- ফুল-টেক্সট সার্চ লাগলে → Elasticsearch নিন
- রিলেশনশিপপূর্ণ ডাটা থাকলে → গ্রাফ ডাটাবেস বা SQL নিন
- বড় রেঞ্জ ক্যোয়ারি লাগলে → সোর্টেড কীস সমর্থন করে এমন KVS (যেমন: RocksDB) বা SQL নিন
জনপ্রিয় ক্লাউড ম্যানেজড সার্ভিস
| প্রোভাইডার | সার্ভিস | হাইলাইট |
|---|---|---|
| AWS | ElastiCache (Redis/Memcached) | ম্যানেজড, অটো ফেইলওভার |
| AWS | DynamoDB | সার্ভারলেস, সিঙ্গেল ডিজিট মিলিসেকেন্ড লেটেন্সি |
| Google Cloud | Memorystore | Redis-কম্প্যাটিবল |
| Azure | Cache for Redis | ফুল ম্যানেজড |