সর্বাধিক দক্ষ ক্যাশে প্রতিস্থাপন অ্যালগরিদম [বন্ধ]


12

উইকিপিডিয়ায় 11 টি ক্যাশে প্রতিস্থাপন অ্যালগরিদম তালিকাভুক্ত করা হয়েছে । ধরে নিচ্ছি যে আমি যে অ্যাপ্লিকেশনটি বিকাশ করতে চলেছি সে সম্পর্কে প্রায় কিছুই জানি না, "ডিফল্ট" ক্যাশে প্রতিস্থাপন অ্যালগরিদম হিসাবে আমার কী ব্যবহার করা উচিত?

আমি যদি আমার ওএস কোর্স থেকে সঠিকভাবে স্মরণ করি তবে এলআরইউ হ'ল সাধারণ ক্যাশে প্রতিস্থাপনের অ্যালগরিদম। তবে হয়তো আমি ভুল করছি।

এছাড়াও, এটি একটি সামান্য একাডেমিক প্রশ্ন, যেহেতু, সাধারণত, প্রধান মেমরিটি সস্তা এবং প্রচুর হয় এবং ক্যাশের আকার সম্পর্কে আমার খুব বেশি চিন্তা করার দরকার নেই।


1
প্রাক আনা কি আপনার আবেদনের সাথে প্রাসঙ্গিক? যদি তা হয় তবে অ্যালগোরিদমগুলি বেছে নেওয়ার সময় প্রাক-আনয়ন এবং ধরে রাখার কৌশলটি অবশ্যই একসাথে বিবেচনা করা উচিত।
রিওং

আপনাকে নমুনা ট্রেস (ডেটা অ্যাক্সেস প্যাটার্নগুলির তালিকা) অর্জন করতে হবে যা আপনার পছন্দসই অ্যাপ্লিকেশন ডোমেনের প্রতিনিধি। আপনি একাডেমিক গবেষণা থেকে সর্বজনীনভাবে উপলব্ধ পরীক্ষার সেটগুলি সন্ধান করতে পারবেন। তারপরে আপনি প্রতিটি অ্যালগরিদম বাস্তবায়ন করতে পারেন, সিমুলেশন করতে পারেন এবং আপনার ফলাফলগুলি প্রতিবেদন করতে পারেন। এটি ব্যর্থ হয়ে, অল্প পরিমাণে এলোমেলো প্রতিস্থাপনের সাথে LRU ব্যবহার করুন।
রুয়ানং

1
আপনি যদি "অ্যাপ্লিকেশন সম্পর্কে প্রায় কিছুই জানেন না" তবে "দক্ষ" ক্যাশে প্রতিস্থাপনের অ্যালগরিদমগুলি সম্পর্কে চিন্তা করা খুব বেশি দূরে
আনন

প্রধান মেমরিটি সস্তা হতে পারে, তবে যদি কর্মক্ষমতা গুরুত্বপূর্ণ সমস্যা হয় তবে অ্যাক্সেস দক্ষতার বিষয়টি বিবেচিত হবে। আমি মনে করি না আপনি নিজের ক্যাশে প্রতিস্থাপন কৌশলটি বেছে নিতে পারবেন - আপনি যদি কোনও নতুন কম্পিউটারের প্রধান স্থপতি হন না। আমাদের বাকিরা বাজারে যা কিছু দেয় তা পায়। আপনার যদি দ্রুত যেতে হয়, মেমরি শ্রেণিবদ্ধের দক্ষ ব্যবহারের জন্য আপনাকে আপনার গণনা এবং ডেটা স্ট্রাকচারগুলি সংগঠিত করতে হবে।
ওমেগা সেন্টৌরি

1
@ ওমেগা সেন্টাউরি আপনি কেবল সিপিইউ ক্যাশের কথা ভাবেন, তবে আরও অনেক কিছু রয়েছে। ওএস ক্যাশগুলি ফাইল এবং ডিরেক্টরি ব্যবহার করে, ডাটাবেসগুলি তাদের ডেটা ক্যাশে করে, প্রায় প্রতিটি অ্যাপ্লিকেশন প্রচুর ক্যাশে করে (উদাহরণস্বরূপ ইতিমধ্যে গণিত ফলাফলগুলি)।
মার্টিনাস

উত্তর:


15

আমার ধারণা সেরা উত্তরটি এটি নির্ভর করে। আমার অভিজ্ঞতায় ক্যাশিং অ্যালগরিদমগুলি বেছে নেওয়ার ক্ষেত্রে অনেকগুলি কারণ রয়েছে।

বিবেচনা করার বিষয়গুলি

  1. ব্যালেন্স পড়ুন / লিখুন। (বনাম লেখার জন্য অ্যাক্সেসের কত শতাংশ পড়ছেন)
  2. ক্যাশের পরিমাণ।
  3. ক্যাশের পিছনে মিডিয়া টাইপ। (তারা কি এসটিএ ড্রাইভগুলি দ্রুত বা এসএসডি ড্রাইভগুলি ধীর করে দিচ্ছে?)
  4. হিট বনাম মিসগুলি। (জিনিসগুলি প্রায়শই কীভাবে পুনরায় লিখিত বা পুনরায় লেখা হয়?)
  5. গড় অ্যাক্সেসের আকার (এটি পৃষ্ঠার আকারটি বেছে নেবে)
  6. কত ব্যয়বহুল পড়া এবং লেখার।

একবার আপনি সমস্ত বিভিন্ন কারণ বিবেচনা করুন তারপরে আপনাকে একটি ক্যাশে অ্যালগরিদম সন্ধান করতে হবে যা সবচেয়ে ভাল পরিচালনা করে। উদাহরণস্বরূপ বলুন যে আপনার কাছে এমন একটি অ্যাপ্লিকেশন রয়েছে যেখানে প্রচুর লেখাগুলি রয়েছে, কিছু লিখেছে, সম্প্রতি লেখা ডেটা পড়েছে এবং কিছু স্পিনিং মিডিয়া রয়েছে। এই ক্ষেত্রে আপনি এক ধরণের হাইব্রিড ক্যাশিং অ্যালগরিদম চাইবেন would লেখার ডেটা হ্যান্ডেল করার জন্য আপনি ডিস্ক থেকে পড়া ডেটার জন্য বুদ্ধিমান অর্ডার অফ রাইটস (ডাব্লুডাব্লু) এবং একটি এলআরইউ অ্যালগরিদম জাতীয় কিছু চাইবেন। এর কারণ হ'ল ডিস্ক অ্যাক্সেসগুলি খুব ব্যয়বহুল এবং WW অ্যালগরিদম ডেটা লেখার পক্ষে আরও দক্ষ করে তোলে এবং LRU প্রায়শই অ্যাক্সেস করা ডেটা সর্বদা ক্যাশে রাখে ache

বলুন যে আপনার কাছে এসএসডি ডিস্ক রয়েছে, যার খুব অ্যাক্সেসের সময় রয়েছে, আপনি এলআরইউ অ্যালগরিদমের দিকে আপনার পছন্দটি গিয়ার করতে চাইতে পারেন কারণ ডিস্ক অ্যাক্সেসগুলি তুলনামূলকভাবে সস্তা।

সুতরাং সত্যিই আমি যা বলতে চাই তা হ'ল কোনও "সেরা" উত্তর নেই। সর্বোত্তম উত্তরটি হ'ল যে উপাদানগুলি আপনার জন্য প্রযোজ্য তা জেনে রাখুন এবং একটি অ্যালগরিদম চয়ন করুন যা সেগুলি সর্বোত্তমভাবে পরিচালনা করে।

আপনার জন্য কীভাবে অ্যালগরিদম খুঁজে পাবেন

আপনার সিস্টেমের প্রোফাইল দিন। এর মধ্যে সাধারণত মেমরি অ্যাক্সেসের পরিসংখ্যান রাখতে কোড যুক্ত করা জড়িত। প্রোফাইলিংয়ের মাধ্যমে আপনি দেখতে পাচ্ছেন যে কোন বিষয়গুলি আপনার পক্ষে সবচেয়ে গুরুত্বপূর্ণ।

অতীতে আমি সময়ের সাথে সাথে সমস্ত স্মৃতি অ্যাক্সেসগুলি ট্র্যাক করার জন্য কোড যুক্ত করেছি। তারপরে আমি নিদর্শনগুলির সন্ধান করি। আমি পুনরায় পড়ার জন্য, পুনরায় লেখার, ক্রমানুসারে অ্যাক্সেস, এলোমেলো অ্যাক্সেস ইত্যাদির সন্ধান করছি ..

একবার আপনি গুরুত্বপূর্ণ জিনিসগুলি সনাক্ত করে নেওয়ার পরে আপনাকে কোন জিনিসটি সবচেয়ে ভাল তা হ্যান্ডেল করতে দেখতে বিভিন্ন ধরণের ক্যাশেগরি অ্যালগরিদমগুলি দেখতে হবে।


কারণগুলির দুর্দান্ত ব্রেক-ডাউন। তবে আমি কীভাবে সেগুলি প্রয়োগ করব তা নিশ্চিত নই, আমি অ্যাপটির ডোমেন এবং কারণগুলি জানি।
ashes999

@ অ্যাশস: পুরানো ইঞ্জিনিয়ারিং কৌশল রয়েছে: বিভিন্ন উপায়ে কয়েকটি তৈরি করুন এবং পরিমাপ করুন যা সবচেয়ে ভাল কাজ করে।
ডোনাল ফেলো

যখন আমি "ক্যাশে" শুনি তখন আমি মেমরি এবং সিপিইউ নিবন্ধকের মধ্যে থাকা সঞ্চয়স্থানটি মনে করি। এখানে আপনি ডিস্ক ক্যাশে সম্পর্কে কথা বলছেন যা মেমরি এবং একটি বা একাধিক আই / ও ডিভাইসগুলির মধ্যে একটি স্তর b
ওমেগা সেন্টৌরি

@ বারেম 23 আপনি যদি বিতরণ প্রোগ্রামিং করে থাকেন তবে বিবেচনা করার জন্য "ক্যাশে এবং ব্যাক-এন্ড স্টোরেজের মধ্যে দূরত্ব রয়েছে"। এটি কোনও গুরুত্বপূর্ণ নয়, আপনার যদি বৃহত, স্থিতিশীল, স্টোরেজ হিসাবে কোনও এসএসডি বা স্পিনিং জং থাকে তবে স্টোরেজটি যদি 15 এমএস দূরে থাকে তবে আপনাকে সর্বদা সর্বনিম্ন 30 এমএস রাউন্ড-ট্রিপ করতে হবে।
ভ্যাটাইন

9

ধরে নিই যে আপনি যে অ্যাপ্লিকেশনটি বিকাশ করতে চলেছেন সে সম্পর্কে আপনি কিছুই জানেন না, আসলে ক্যাশে সিস্টেমটি বেছে নেওয়ার এবং প্রয়োগের আগে আপনাকে এ সম্পর্কে আরও জানতে হবে। অন্য কথায়, কোনও ডিফল্ট বাস্তবায়ন নেই: কিছু কিছু উদ্দেশ্যে ভাল, এবং অন্যদের জন্য সম্পূর্ণ খারাপ

উদাহরণস্বরূপ, মাত্র দুটি বাস্তবায়ন নিন: কমপক্ষে সম্প্রতি ব্যবহৃত এবং সর্বনিম্ন ব্যবহৃত হয়। কোনটি আগে অন্যটির ব্যবহার করবেন তা কীভাবে সিদ্ধান্ত নেবেন?

  • LRU ভাল যখন আপনি নিশ্চিত হন যে ব্যবহারকারী প্রায়শই সর্বাধিক সাম্প্রতিক আইটেমগুলিতে অ্যাক্সেস করতে পারে এবং কখনও বা খুব কমই পুরানো জিনিসগুলিতে ফিরে আসে না। একটি উদাহরণ: একটি ইমেল ক্লায়েন্টের একটি সাধারণ ব্যবহার। বেশিরভাগ ক্ষেত্রে ব্যবহারকারীরা নিয়মিতভাবে সাম্প্রতিকতম মেলগুলি অ্যাক্সেস করে চলেছেন। তারা এগুলি পড়ে, তাদের পিছিয়ে দেয়, কয়েক মিনিট, ঘন্টা বা দিনের মধ্যে আবার ফিরে আসে They তারা দু'বছর আগে তারা যে মেল পেয়েছিল তা সন্ধান করতে পারে তবে তারা গত দুই ঘন্টা প্রাপ্ত মেলগুলি অ্যাক্সেস করার চেয়ে কম ঘন ঘন ঘটে।

  • অন্যদিকে, এলআরইউ সেই প্রসঙ্গে কোনও অর্থবোধ করে না যেখানে ব্যবহারকারীরা কিছু আইটেম অন্যদের তুলনায় অনেক বেশি ঘন ঘন অ্যাক্সেস করবেন। একটি উদাহরণ: আমি প্রায়শই আমার পছন্দ করা সংগীত শুনি এবং এটি ঘটতে পারে যে 400 গানে আমি প্রতি সপ্তাহে একবারে একই পাঁচটি শুনতে পাব, যখন আমি প্রতি বছর 100 টি গান শুনতে চাই যা আমি খুব পছন্দ করি না অনেক। এই ক্ষেত্রে, এলএফইউ অনেক বেশি উপযুক্ত।

দুটি মাত্র বাস্তবায়ন করে আপনি দেখতে পাচ্ছেন যে কোনও "ডিফল্ট" অ্যালগরিদম আপনি যখন ব্যবহার করতে পারবেন তখন কোনটি আরও ভাল তা বা অ্যাপ্লিকেশন সম্পর্কে পর্যাপ্ত তথ্য না থাকার বিষয়ে আপনি ভাবতে চান না। এটি, ভাল, ডিফল্টরূপে জিজ্ঞাসার মতো, যখন আপনি কোনও কিছুই জানেন না, তখন আপনাকে অবশ্যই কোনও ক্যালকুলাসের ফলাফল খুঁজতে দুটি সংখ্যা যুক্ত করতে হবে, বিয়োগ করতে হবে, গুণ করতে হবে বা ভাগ করতে হবে।


ঠিক আছে, তাহলে আমি কীভাবে একটি অ্যালগরিদম বাছাই করতে যাব? উইকিপিডিয়াটির তালিকাটি চালান এবং দেখুন কী সেরা ফিট করে?
ashes999

@ অ্যাশেজ৯৯৯: ঠিক! প্রথমে আপনি অ্যাপ্লিকেশনটির প্রয়োজনীয়তাগুলি সম্পর্কে আরও শিখতে পারেন, তারপরে আপনি বিভিন্ন ক্যাশে অ্যালগরিদমগুলির উপকারিতা এবং কনসগুলি বিশ্লেষণ করুন এবং শেষ পর্যন্ত আপনি আরও উপযুক্তটিকে বেছে নিন।
আর্সেনী মোরজেঙ্কো

3

কেন আপনার পছন্দগুলি কেবল উইকিপিডিয়ায় সীমাবদ্ধ করবেন? আপনার যদি এসিএম ডিজিটাল লাইব্রেরির মতো গবেষণামূলক ডাটাবেসে অ্যাক্সেস থাকে তবে আপনি আরও বেশি অ্যালগরিদমগুলি খুঁজে পাবেন। পেটেন্টগুলির সাথে গোলযোগ সম্পর্কে সচেতন হন। উদাহরণস্বরূপ, এআরসি একটি ভাল অ্যালগরিদম তবে দুর্ভাগ্যক্রমে এটি পেটেন্টযুক্ত।


2

আপনি 'বেস্ট' অ্যালগরিদমকে কেন্দ্র করে প্রচুর সময় ব্যয় করতে পারেন, বা আপনি কেবল একটি সাধারণ অ্যালগরিদম বাস্তবায়ন করতে পারেন এবং সিস্টেমের বাকী অংশটি পেতে পারেন। আপনার যখন পরীক্ষা করার মতো কিছু থাকে তখন অ্যালগরিদম সম্পর্কে চিন্তা করুন।

অকাল অপটিমাইজেশন ...


0

কোনও নিখুঁত ক্যাশে অ্যালগরিদম নেই - আপনি সর্বদা একটি কেস খুঁজে পান যা খুব খারাপ আচরণ করে।

সুতরাং যে সমস্যাটি সবচেয়ে কম খারাপ আচরণ করবে তা নির্ধারণ করার জন্য সমস্যাটি ক্যাশে হচ্ছে তা জানা গুরুত্বপূর্ণ।

এছাড়াও, আপনি বিবেচনা করা হবে কতদিন আপনি প্রয়োজন ক্যাশে জিনিস এবং কতদিন আপনাকে করতে কিছু ক্যাশে ...

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.