আপনি चाहে Redis-এ নতুন হন বা শুধু উপলব্ধ ফিচারগুলো রিফ্রেশ করতে চান, এই গাইড আপনাকে Redis-এ প্রদান করা সব ডেটা স্ট্রাকচার বুঝতে সাহায্য করবে।
সঠিক স্ট্রাকচার বেছে নিন
Redis ডেটা স্ট্রাকচারগুলো সিম্পল - उनमे से কোনোটিই আপনার সমস্যা সমাধানের জন্য পারফেক্ট ম্যাচ হতে পারে না। কিন্তু আপনার ডেটার জন্য সঠিক ইনিশিয়াল স্ট্রাকচার বেছে নিলে, Redis কমান্ডগুলো আপনাকে আপনার প্রয়োজনীয় জিনিস পাওয়ার দক্ষ পদ্ধতigte গাইড করবে। অনেক Redis কমান্ডের একটি প্রিফিক্স থাকে যা ইন্ডিকেট করে সেগুলো কোন টাইপের আন্ডারলাইং ডেটা স্ট্রাকচারের সাথে কাজ করার জন্য বানানো।
জেনারেল-পারপাস ডেটা স্ট্রাকচার
| প্রিফিক্স | ব্যবহার | সতর্কতা এবং সাধারণ মিসইউজ | |
|---|---|---|---|
| হ্যাশ | H | অবজেক্ট স্টোরেজ; যেকোনো কিছু যা আপনি ডিকশনারি অবজেক্টের জন্য ব্যবহার করবেন | Redis-এর মতই, হ্যাশের সাথে ইউজাররা যে সবচেয়ে বড় সমস্যায় পড়ে সেটি কী একাউন্টিং। নিশ্চিত করুন যে আপনার একটি সিস্টেম আছে যাতে আপনার হ্যাশ কী এবং ভ্যালু দিয়ে ফিল আপ না হয় যেগুলো আপনার প্রয়োজন নেই। |
| লিস্ট | L | কিউ, স্ট্যাক এবং সাইক্লিক্যাল লিস্ট | বড় লিস্টে র্যান্ডম এক্সেস করার চেষ্টা করবেন না, এবং কিউ ব্যাক আপ হওয়া বিষয়ে সতর্ক থাকুন। |
| সেট | S | ট্যাগিং সিস্টেম, টাইম-সিরিজ ডেটার জন্য বাকেট | ইন্টারসেকশন এবং ইউনিয়ন সাবধানে ব্যবহার করুন - আপনার সেটগুলো ছোট রাখুন। সেট-Unisque কাউন্ট করার সেরা উপায় নয়। HyperLogLog ব্যবহার করুন! |
| সর্টেড সেট | Z | স্কোরবোর্ড, লেক্সিকোগ্রাফিক্যাল সার্চ, র্যান্ডম-অ্যাক্সেস লিস্ট | Zsets সবচেয়ে ভার্সাটাইল স্ট্রাকচারগুলোর এক, এবং সবচেয়ে এক্সপেনসিভও। আপনার বিগ O-র ওপর কঠোর নজর রাখুন! আপনি যদি সর্টেড সেট অটোকম্পলিটের জন্য ব্যবহার করেন, তবে ZRANGEBYLEX ইন্সপেক্ট করুন, যা লেক্সিকোগ্রাফিক্যাল সার্চ হ্যান্ডেল করে (UTF-8-র সাথে সতর্ক থাকুন!) |
| স্ট্রিম | X | টাইম সিরিজ, কিউ, মেসেজ ডিস্ট্রিবিউশন | স্ট্রিমকে ক্যাপ না করা সাধারণ, তারা কখনো কখনো ডিস্ট্রিবিউটেড মেসেজিং সিস্টেমের ক্যাপাবিলিটি (স্পেসিফিক্যালি Apache Kafka) এর সাথে কনফিউজড হয়। |
| স্ট্রিং | (কোনো নেই) | সিম্পল ক্যাশ, কাউন্টার, বিট ম্যানিপুলেশন | অত্যধিক বড় ভ্যালু নিয়ে সতর্ক থাকুন, যেগুলোর GETting বা SETting কিছু নেটওয়ার্ক এবং Redis ক্লায়েন্টে হার্ড-টু-ফাইন্ড ফেইলিউর সৃষ্টি করতে পারে। SETNX দিয়ে লকিং সিস্টেম বিল্ড করা সহজে আপনাকে ক্ষতি পৌঁছে দিতে পারে। |
স্পেশালাইজড ডেটা স্ট্রাকচার
Redis নির্দিষ্ট টাইপের স্পেশাল কেস ম্যানিপুলেট করার জন্য একাধিক অপারেশন প্রোভাইড করে, যেখানে "আন্ডার-দ-হুড" টাইপ উপরের জেনারেল-পারপাস ডেটা টাইপগুলোর এক:
| প্রিফিক্স | আন্ডারলাইং টাইপ | ব্যবহার | সতর্কতা এবং সাধারণ মিসইউজ | |
|---|---|---|---|---|
| বিটম্যাপ | BIT | স্ট্রিং | অ্যানালিটিক্সের জন্য স্পেস-ইফিশিয়েন্ট ফ্ল্যাগস | ক্যাপাবিলিটি সম্পর্কে কনফিউশন, বা বিটম্যাপ-বেইজড সিস্টেমে একাউন্টিং-এর জটিলতা ট্র্যাক হারানো। |
| কাউন্টার | INCR, DECR | স্ট্রিং | অ্যানালিটিক্সের জন্য স্পেস-ইফিশিয়েন্ট | ৬৪-বিট সাইনড রেঞ্জের ওভারফ্লো এরর রিটার্ন করবে |
| জিওহ্যাশ | GEO | সর্টেড সেট | লোকেটর স্টোর করা, নিকটবর্তী ইউজার খুঁজে বের করা | লং-ডিস্ট্যান্স ক্যালকুলেশন, যেকোনো স্পেশালাইজড প্রজেকশন বা সফিস্টিকেটেড জিওগ্রাফিক্যাল ফাংশন যেখানে প্রয়োজন। |
| HyperLogLog | PF | স্ট্রিং | অ্যানালিটিক্সের জন্য ইউনিক কাউন্ট করা | একাধিক HLL মার্জ করা কস্টলি হতে পারে। PFMERGE-এ আপনি কতগুলো প্যারামিটার স্পেসিফাই করবেন সেটার ওপর একটি ক্যাপ রাখুন। |
| Pub/Sub | PUB, SUB, PSUB | (কোনো নেই) | এফিমারেল মেসেজ পাসিং | সিম্পল, ফাস্ট মেসেজ-পাসিং কোনো ডিউরেবিলিটি ছাড়া। স্ট্রিম টাইপ অধিকাংশ ইউজ কেসের জন্য बेटার চয়েস। |
আপনার বিগ O ব্যবহার করুন
একটি ডেটা স্ট্রাকচারের এক্সেস প্যাটার্ন মিসইউজ করা ডিকশনারি মিসইউজ করার মত: প্রতিটি পেইজ ফ্লিপ করে শব্দ খুঁজে বের করবেন না! প্রতিটি Redis কমান্ডের টাইম কমপ্লেক্সিটি redis.io-তে ডকুমেন্টেড আছে।
বিগ O হলো "লিমিটিং বিহেভিয়র" এক্সপ্রেস করার একটি উপায় যে কীভাবে কিছু পারফর্ম করবে। একদম সিম্পল ভাবে চিন্তা করলে এটি হলো অপারেশন কীভাবে পারফর্ম করবে যতক্ষণ সিস্টেমে ডেটার পরিমাণ বড়ে। যদি একটি অপারেশন O(1) হয়, তবে ডেটার পরিমাণ যেন যেন হোক, এটি একটি ফিক্সড সময় নেবে কমপ্লিট হওয়ার জন্য। একটি অপারेशन যা O(n) হবে, সেটি ডেটার সাথে লিনিয়ারলি স্কেল করবে, এবং যেটি O(n²) হবে, সেটি এক্সপোনেনশিয়ালি স্লো হয়ে যাবে যতক্ষণ ডেটার পরিমাণ বড়ে।
আরো থরো ট্রিটমেন্টের জন্য, স্যাম্পল কোড ও গ্রাফসহ বিগ O-র ইজি ইনট্রোডাকশন দেখুন।
ভালো সিস্টেম ডিজাইন বেসিক অ্যালগরিদমিক অ্যানালাইসিসের চেয়ে বেশি নেয়, কিন্তু বেসিকস থেকে সময় কাটিয়ে ব্রাশ আপ করা ও আপনার অ্যাপে টোটাল ডেটা অ্যাক্সেস কমপ্লেক্সিটি সম্পর্কে চিন্তা করা সার্থক।
অপারেশনগুলো ছোট রাখুন
Redis সিঙ্গেল-থ্রেডেড, যা এটিকে রিজন अबাউট করা সহজ করে দেয় কিন্তু তাদের জন্য যারা শুধু মাল্টিথ্রেডেড ডেটা অ্যাক্সেসের সাথে পরিচিত তাদের জন্য কিছু আশ্চর্য সৃষ্টি করতে পারে। লং-রানিং অপারেশন Redis-এ অন্য ডেটাবেসের চেয়ে বেশি ডেঞ্জারাস: যেহেতু Redis একবারে একটি জিনিস করে, লং-রানিং অপারেশন সিস্টেম-ওয়াইড ব্যাকআপ সৃষ্টি করতে পারে।
ডেটা অ্যাক্সেস অপারেশনগুলো খুব গ্রানুলার রাখা Redis-এ ভালো পারফরম্যান্সের চাবি। Redis-এ ১০০,০০০টি O(1) অপারেশন ১০০,০০০ এলিমেন্টের একটি কলেকশনের ওপর ১টি O(N) অপারেশনের চেয়ে ভালো হতে পারে, এমনকি নেটওয়ার্ক এবং প্রোটোকল পার্সিং-এর পেনাল্টি দিয়েও।
আপনার সিস্টেমের পেইন পয়েন্টগুলো কীভাবে খুঁজে বের করবেন? SLOWLOG নিয়মিত চেক করুন (অথবা আপনি যদি RedisGreen কাস্টমার হন, তবে আপনার ড্যাশবোর্ডের "Slow Queries" ট্যাব দেখুন)। একক অপারেশন যতক্ষণ দীর্ঘ সময় চলে, ততটাই এটি আপনার সিস্টেম যা করার চেষ্টা করছে সেগুলো স্লো করবে, তাই এটিকে ছোট রাখুন!