আপনি Redis-এ নতুন কিনা বা আপনার উপলব্ধ বৈশিষ্ট্যগুলির একটি রিফ্রেসার প্রয়োজন, এই নির্দেশিকা আপনাকে রেডিস সরবরাহ করে এমন সমস্ত ডেটা কাঠামো বুঝতে সাহায্য করতে পারে৷
সঠিক কাঠামো চয়ন করুন
রেডিস ডেটা স্ট্রাকচারগুলি সহজ - আপনি যে সমস্যার সমাধান করার চেষ্টা করছেন তার জন্য সেগুলির কোনওটিই নিখুঁত ম্যাচ হতে পারে না। কিন্তু আপনি যদি আপনার ডেটার জন্য সঠিক প্রাথমিক কাঠামো বাছাই করেন, তাহলে রেডিস কমান্ড আপনাকে আপনার যা প্রয়োজন তা পাওয়ার জন্য দক্ষ উপায়ের দিকে পরিচালিত করতে পারে। অনেক Redis কমান্ডের একটি উপসর্গ থাকে যা নির্দেশ করে যে তারা কোন ধরনের অন্তর্নিহিত ডেটা স্ট্রাকচারের সাথে কাজ করবে।
সাধারণ-উদ্দেশ্য ডেটা স্ট্রাকচার
উপসর্গ | ব্যবহার করে | সতর্কতা এবং সাধারণ অপব্যবহার | |
---|---|---|---|
হ্যাশ | H | অবজেক্ট স্টোরেজ; যেকোন কিছুর জন্য আপনি একটি অভিধান অবজেক্ট ব্যবহার করবেন | ঠিক যেমন Redis নিজেই, হ্যাশে ব্যবহারকারীদের সবচেয়ে বড় সমস্যাগুলির মধ্যে একটি হল মূল অ্যাকাউন্টিং। আপনি আপনার হ্যাশগুলি কী এবং আপনার প্রয়োজন নেই এমন মান দিয়ে পূরণ করবেন না তা নিশ্চিত করার জন্য আপনার কাছে একটি সিস্টেম আছে তা নিশ্চিত করুন। |
তালিকা | L | সারি, স্ট্যাক এবং চক্রাকার তালিকা | বড় তালিকায় এলোমেলোভাবে অ্যাক্সেস করার চেষ্টা করবেন না এবং সারি ব্যাক আপ করার বিষয়ে সতর্ক থাকুন। |
সেট | S | ট্যাগিং সিস্টেম, সময়-সিরিজ ডেটার জন্য বালতি | ইন্টারসেকশন এবং ইউনিয়নগুলি অবশ্যই যত্ন সহকারে ব্যবহার করা উচিত - আপনার সেটগুলি ছোট রাখুন৷ সেটগুলি অনন্য গণনা করার সেরা উপায় নয়। পরিবর্তে HyperLogLog ব্যবহার করুন! |
বাছাই করা সেট | Z | স্কোরবোর্ড, আভিধানিক অনুসন্ধান, এলোমেলো-অ্যাক্সেস তালিকা | জেডসেটগুলি সবচেয়ে বহুমুখী কাঠামোগুলির মধ্যে একটি, এবং সবচেয়ে ব্যয়বহুলগুলির মধ্যে একটি৷ আপনার বড় হে একটি ঘনিষ্ঠ নজর রাখুন! আপনি যদি স্বয়ংসম্পূর্ণের জন্য সাজানো সেট ব্যবহার করেন, তাহলে আপনি ZRANGEBYLEX তদন্ত করতে পারেন, যেটি আভিধানিক অনুসন্ধান পরিচালনা করে (তবে UTF-8 এর সাথে সতর্ক থাকুন!) |
স্ট্রিম | X | টাইম সিরিজ, সারি, বার্তা বিতরণ | প্রবাহগুলি ক্যাপ করতে ব্যর্থ হওয়া সাধারণ, তারা মাঝে মাঝে বিতরণ করা মেসেজিং সিস্টেমের (বিশেষত অ্যাপাচি কাফকা) ক্ষমতার সাথে বিভ্রান্ত হয়ে পড়ে। |
স্ট্রিং | (কোনটিই নয়) | সাধারণ ক্যাশে, কাউন্টার, বিট ম্যানিপুলেশন | অত্যন্ত বড় মান সম্পর্কে সতর্ক থাকুন, যেটির প্রাপ্তি বা সেটিং কিছু নির্দিষ্ট নেটওয়ার্ক এবং রেডিস ক্লায়েন্টে খুঁজে পাওয়া কঠিন ব্যর্থতার পরিচয় দিতে পারে। একটি লকিং সিস্টেম তৈরি করতে SETNX ব্যবহার করে নিজেকে আঘাত করা সহজ৷ | ৷
বিশেষ ডেটা স্ট্রাকচার
রেডিস বিশেষ ধরনের বিশেষ কেস ম্যানিপুলেট করার জন্য অনেকগুলি অপারেশন প্রদান করে, যখন "আন্ডার-দ্য-হুড" টাইপ উপরের সাধারণ উদ্দেশ্য ডেটা প্রকারগুলির মধ্যে একটি:
উপসর্গ | অন্তর্নিহিত প্রকার | ব্যবহার করে | সতর্কতা এবং সাধারণ অপব্যবহার | |
---|---|---|---|---|
বিটম্যাপ | BIT | স্ট্রিং | বিশ্লেষণের জন্য স্থান-দক্ষ পতাকা | সামর্থ্য সম্পর্কে বিভ্রান্তি, বা বিটম্যাপ-ভিত্তিক সিস্টেমে অ্যাকাউন্টিংয়ের জটিলতার ট্র্যাক হারানো। |
কাউন্টার | INCR, DECR | স্ট্রিং | স্পেস-দক্ষ বিশ্লেষণ | 64-বিট স্বাক্ষরিত পরিসরের ওভারফ্লো একটি ত্রুটি ফিরিয়ে দেবে |
জিওহাশ | GEO | বাছাই করা সেট | স্টোর লোকেটার, কাছাকাছি ব্যবহারকারীদের খোঁজা | দীর্ঘ-দূরত্বের গণনা, যে কোন জায়গায় বিশেষায়িত অনুমান বা পরিশীলিত ভৌগলিক ফাংশন প্রয়োজন। |
HyperLogLog | PF | স্ট্রিং | বিশ্লেষণের জন্য অনন্য গণনা | একাধিক HLL একত্রিত করা ব্যয়বহুল হতে পারে। PFMERGE-এ আপনার নির্দিষ্ট করা প্যারামিটারের সংখ্যার উপর একটি ক্যাপ আছে তা নিশ্চিত করুন। |
পাব/সাব | PUB, SUB, PSUB | (কোনটিই নয়) | ক্ষণস্থায়ী বার্তা পাস হচ্ছে | কোন স্থায়িত্ব ছাড়াই সহজ, দ্রুত বার্তা পাঠানো। বেশিরভাগ ব্যবহারের ক্ষেত্রে স্ট্রিমের ধরনটি একটি ভাল পছন্দ৷ | ৷
আপনার বড় ও ব্যবহার করুন
৷ডেটা স্ট্রাকচারের অ্যাক্সেস প্যাটার্নের অপব্যবহার করা একটি অভিধানের অপব্যবহারের মতো:একটি শব্দ খুঁজতে প্রতিটি পৃষ্ঠায় ফ্লিপ করবেন না! প্রতিটি Redis কমান্ডের সময় জটিলতা redis.io এ নথিভুক্ত করা হয়।
বিগ ও হল "সীমিত আচরণ" প্রকাশ করার একটি উপায় যা কিছু কীভাবে করবে। সিস্টেমে ডেটার পরিমাণ বাড়ার সাথে সাথে অপারেশনটি কীভাবে সঞ্চালিত হবে তা চিন্তা করার একটি সহজ উপায়। যদি একটি অপারেশন O(1) হয়, তবে এটি সম্পূর্ণ হতে নির্দিষ্ট সময় লাগবে, যতই ডেটা জড়িত থাকুক না কেন। যেটি O(n) হয় সেটি ডেটার সাথে রৈখিকভাবে স্কেল করবে এবং যেটি isO(n²) ডেটার পরিমাণ বৃদ্ধির সাথে সাথে তা দ্রুতগতিতে ধীর হয়ে যায়।
আরও পুঙ্খানুপুঙ্খ চিকিত্সার জন্য, নমুনা কোড এবং গ্রাফ সহ বড় O-এর এই সহজ ভূমিকা দেখুন৷
ভাল সিস্টেম ডিজাইন মৌলিক অ্যালগরিদমিক বিশ্লেষণের চেয়ে বেশি সময় নেয়, তবে সময়ে সময়ে মৌলিক বিষয়গুলি ব্রাশ করা এবং আপনার অ্যাপে ডেটা অ্যাক্সেসের মোট জটিলতা সম্পর্কে চিন্তা করা সার্থক৷
অপারেশনগুলি ছোট রাখুন
রেডিস একক-থ্রেডেড, যা এটি সম্পর্কে যুক্তি করা সহজ করে তোলে তবে শুধুমাত্র মাল্টিথ্রেডেড ডেটা অ্যাক্সেসের সাথে পরিচিত লোকদের জন্য কিছু বিস্ময়ও সৃষ্টি করতে পারে৷ অন্যান্য ডাটাবেসের তুলনায় রেডিস-এ দীর্ঘস্থায়ী অপারেশনগুলি বেশি বিপজ্জনক:যেহেতু রেডিস শুধুমাত্র একটি কাজ করে সময়, দীর্ঘমেয়াদী ক্রিয়াকলাপগুলি সিস্টেম-ব্যাপী ব্যাকআপের কারণ হতে পারে৷
রেডিসের সাথে ভাল পারফরম্যান্সের চাবিকাঠি হল ডেটা অ্যাক্সেস অপারেশনগুলিকে খুব দানাদার রাখা। Redis-এ 100,000 O(1) অপারেশনগুলি 100,000-এলিমেন্ট সংগ্রহে 1 O(N) অপারেশনের চেয়ে ভাল হতে পারে, যদিও আপনি নেটওয়ার্ক এবং প্রোটোকল পার্সিংয়ের কারণে শাস্তি দিতে হবে৷
কিভাবে আপনি আপনার সিস্টেমে ব্যথা-পয়েন্ট খুঁজে পেতে পারেন? নিয়মিত স্লোলগ চেক করুন (অথবা আপনি যদি রেডিসগ্রীন গ্রাহক হন তবে আপনার ড্যাশবোর্ডে "ধীরগতির প্রশ্ন" ট্যাবটি দেখুন)। একটি একক ক্রিয়াকলাপ যত বেশি সময় ধরে চলে, আপনার সিস্টেম যা করার চেষ্টা করছে তা ততই ধীর হয়ে যায়, তাই এটি সংক্ষিপ্ত রাখুন!