পৃষ্ঠায়িত ফলাফল ক্যাশে করার জন্য সর্বোত্তম অনুশীলনগুলি কীসের ক্রম / বৈশিষ্ট্যগুলি পরিবর্তন করতে পারে?


11

পৃষ্ঠাগুলিযুক্ত অনুসন্ধান ফলাফলগুলির ক্যাশিংয়ের জন্য সর্বোত্তম অনুশীলন কোনটি যার ক্রম / বৈশিষ্ট্যগুলি পরিবর্তন করা যেতে পারে?

বলুন, আমার আবেদনে, কেউ সর্বশেষ 20 টি আলোচনার থ্রেড দেখতে চায় (10,000 এর মধ্যে)। servletএক্সএমএল / জেএসএন হিসাবে আলোচনার থ্রেড টেবিল থেকে প্রথম 20 টি রেকর্ড আনার জন্য , মাধ্যমে একটি ডাটাবেসটিতে একটি অনুরোধ প্রেরণ করা হবে । যদি তারা পরবর্তী ২০ টি দেখতে চান তবে তারা ফলাফলের পরবর্তী পৃষ্ঠায় চলে যান এবং পরবর্তী লটটি (সীমা এবং অফসেট = 20 ইত্যাদি) পাওয়ার জন্য অন্য একটি অনুরোধ বন্ধ করে দেয়।

সার্ভার লোড এবং ক্লায়েন্ট-অপেক্ষাকে হ্রাস করতে, আমি ফলাফলের পূর্ববর্তী পৃষ্ঠাগুলি ক্যাশে করতে চাই। তবে আমার দুটি প্রশ্ন রয়েছে:

  1. ফলাফলগুলিতে প্রদর্শিত টেবিলটি একাধিক বৈশিষ্ট্য দ্বারা অর্ডার করা যেতে পারে (যেমন, থ্রেড-তৈরি-তারিখ, থ্রেড-লেখক, শেষ-পোস্টের তারিখ) can এর অর্থ হ'ল 'প্রথম ২০ টি ফলাফল' এর মতো একটি বিবৃতি প্রসঙ্গে ছাড়া কোনও অর্থবোধ করে না (অর্থাত্, আমরা কী দিয়ে আদেশ করছি)। এরপরে সামনের প্রান্তটি কীভাবে ব্যাক-এন্ডে এটি ইতিমধ্যে লোড হয়ে গেছে তা যোগাযোগ করবে? আমার প্রথম চিন্তা ছিল প্রতিটি ফলাফলের জন্য আইডি ব্যবহার করা কিন্তু পরবর্তী অনুরোধগুলিতে এগুলি আবার সার্ভারে প্রেরণ করা (এবং তাদের ভিত্তিতে ফলাফলগুলি ফিল্টার করা) ঠিক ততটাই সময়সাপেক্ষ যা সবকিছু অন্ধভাবে ফিরিয়ে পাঠানো। কিভাবে আমি এটি করতে পারব?
  2. যদি পূর্ববর্তী ফলাফলের একটি বৈশিষ্ট্য (যেমন, সর্বাধিক সাম্প্রতিক-পরবর্তী তারিখ) পরিবর্তিত হয় তবে কী হবে? তারপরে আমাদের প্রতিটি ফলাফল যাচাই করার একটি উপায় প্রয়োজন যা এটি পৃষ্ঠাভুক্ত হওয়ার পরে এটি সার্ভার-সাইডে সংশোধিত হয়েছে কিনা। আমি কীভাবে এটি করতে পারি?

আপনার উদাহরণটি কিছুটা রুক্ষ। এটি যদি 100 টি থ্রেড থাকে তবে আপনি একবারে সমস্ত 100 ডাউনলোড করা সেরা। আপনি যদি 10,000 এর মধ্যে 20 টানেন তবে এটি অন্যরকম একটি গল্প।
ড্যান পিচেলম্যান

@ ড্যানিপিসেলম্যান দুঃখিত, আমি কিছুটা অস্পষ্ট ছিলাম। এটি 10,000 এর মতো হবে।
গুদাম

স্বচ্ছতার জন্য সম্পাদিত নম্বর।
জিনিসপত্র

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

উত্তর:


7

মনে হচ্ছে কি আপনার যা দরকার সব প্যারামিটার একটি পৃষ্ঠায় সংজ্ঞায়িত (বলুন, একটি মোড়কের হয় pageNumber, pageSize, sortType, totalCount, ইত্যাদি) এবং এটি ব্যবহার DataRequestআপনার ক্যাশে ব্যবস্থা জন্য কী হিসাবে অবজেক্ট। এই বিন্দু থেকে আপনার কাছে ক্যাশে হ্যান্ডেল করার জন্য অনেকগুলি বিকল্প রয়েছে:

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

প্রথম দু'একটি বিরতি বা ইভেন্টের উপর ভিত্তি করে ট্রিগার করার জন্য একটি শিডিয়ুলার প্রক্রিয়া জড়িত থাকতে পারে। আপনার একক ডেটা অ্যাক্সেস পয়েন্ট থাকলে সর্বশেষটি সহজ হতে পারে।

অবশেষে, @ ড্যানিপিসেলম্যান যেমন উল্লেখ করেছেন, এটি দ্রুত একটি অত্যধিক জটিল অ্যালগরিদম হয়ে উঠতে পারে যা সুবিধাগুলি ছাড়িয়ে যায়, সুতরাং নিশ্চিত হয়ে নিন যে কর্মক্ষমতা অর্জনের ফলে অ্যালগরিদমের জটিলতা ন্যায়সঙ্গত হয়।


3

আমি সম্ভবত এটি এইভাবে পরিচালনা করব:

  1. বিভিন্ন ক্রমগুলি একসাথে বিভিন্ন ক্রম হিসাবে বিবেচনা করুন। প্রতিটি ক্লায়েন্টের কী আছে তা ট্র্যাক করার জন্য (বা এটিকে বারবার পাঠিয়ে দেওয়া) অতিরিক্ত বুককিপিংয়ের মূল্য হবে না।
  2. যখনই ব্যবহারকারী পৃষ্ঠাগুলি, একই সাথে সার্ভারে একটি জিইটি প্রেরণ করার সময় ক্যাশে থেকে তত্ক্ষণাত প্রদর্শন করুন যাতে হ্যাশ বা একটি শেষ অ্যাক্সেসের সময় অন্তর্ভুক্ত রয়েছে। সার্ভারটি যদি কোনও কিছু পরিবর্তিত হয় তবে কেবলমাত্র একটি পূর্ণ পৃষ্ঠা ফিরে পাঠায়।
  3. সার্ভার থেকে একবারে একাধিক UI পৃষ্ঠা পুনরুদ্ধার করুন। উদাহরণস্বরূপ, যদি আপনার ইউআই 20 এন্ট্রি প্রদর্শন করে, 60 টি ক্যোয়ারীটি দেখায় I এটি কিছু পৃষ্ঠার পরিবর্তনের জন্য ইউআইকে খুব প্রতিক্রিয়াশীল করে তোলে।
  4. আপনি যখন একটি সীমানার কাছাকাছি চলে যান তখন প্রিফেচ পুনরায় সেট হয়। এটি ক্যাশে থেকে দ্রুত লোডের সময়গুলি সংরক্ষণে সহায়তা করে।

2

কেবল একটি চিন্তাধারা - আপনার সার্ভার কলটিতে, স্বাভাবিক পরামিতিগুলিতে এবং এমডি 5 হ্যাশগুলির একটি অ্যারে বর্তমানে পূর্বে দেখা ডেটাতে ক্যাশেড পৃষ্ঠার প্রতিনিধিত্ব করে pass

রিটার্ন কলটিতে নতুন বর্তমান পৃষ্ঠার জন্য সমস্ত স্বাভাবিক ডেটা থাকবে, পূর্বে যে কোনও পুরানো পূর্বের দেখা পৃষ্ঠাগুলির জন্য আপডেট। আপনি পুরানো হ্যাশটি কী হিসাবে ব্যবহার করতে পারেন।

আমি প্রথমে প্রচুর পারফরম্যান্স এবং টাইমিং টেস্টের পরামর্শ দেব - আপনার ক্লায়েন্টের সাইড কোডটি যদি আপনি কেবলমাত্র প্রতিটি পৃষ্ঠার ডেটা জন্য সার্ভারে হিট করেন তবে তার চেয়ে অনেক জটিল হতে চলেছে। অতিরিক্ত জটিলতার ফলে একটি অর্থবহ উন্নতি হবে বলে নিশ্চিত হন।


আপনার উত্তরের জন্য ধন্যবাদ. আমি হ্যাশিংয়ের কথা ভাবছিলাম তবে নিশ্চিত নই যে এটি পুনঃ-অর্ডার করার দৃশ্যে সহায়তা করবে কিনা (যেমন, এটি যথেষ্ট পরিমাণে দানাদার নয়, এবং কেবল প্রতি ফলাফলের ভিত্তিতে নয় প্রতি পৃষ্ঠায় কাজ করে)। আমি মনে করি যে আপনার শেষ অনুচ্ছেদটি একটি ভাল পয়েন্ট, এবং ভাবতে শুরু করি যে কোনও সম্ভাব্য সমাধানের জটিলতা পারফরম্যান্সের সুবিধাগুলি ছাড়িয়ে যাবে।
জিনিসপত্র
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.