উত্তর:
1.1) প্রথম স্তরের ক্যাশে
প্রথম স্তরের ক্যাশে সর্বদা সেশন অবজেক্টের সাথে সংযুক্ত । হাইবারনেট ডিফল্টরূপে এই ক্যাশে ব্যবহার করে। এখানে, এটি একের পর এক লেনদেন প্রক্রিয়া করে, মানে এক লেনদেনকে বহুবার প্রক্রিয়া করে না। মূলত এটি প্রদত্ত লেনদেনের মধ্যে প্রয়োজনীয় এসকিউএল প্রশ্নের সংখ্যা হ্রাস করে। এটি লেনদেনের প্রতিটি সংশোধনীর পরে আপডেট করার পরিবর্তে এটি লেনদেনের শেষে কেবলমাত্র লেনদেনকে আপডেট করে।
1.2) দ্বিতীয় স্তরের ক্যাশে
দ্বিতীয় স্তরের ক্যাশে সর্বদা সেশন ফ্যাক্টরি অবজেক্টের সাথে যুক্ত হয় । লেনদেন চলাকালীন, এর মধ্যে সেশন ফ্যাক্টরি স্তরে বস্তুগুলি লোড করে, যাতে সেই বস্তুগুলি একক ব্যবহারকারীর কাছে আবদ্ধ না হয়ে পুরো অ্যাপ্লিকেশনটিতে উপলব্ধ থাকে। যেহেতু বস্তুগুলি ইতিমধ্যে ক্যাশে লোড করা হয়েছে, যখনই কোনও বস্তু কোয়েরি দ্বারা ফিরে আসে, তখন ডাটাবেস লেনদেনের প্রয়োজন হয় না। এই ভাবে দ্বিতীয় স্তরের ক্যাশে কাজ করে। এখানে আমরা ক্যোয়ারী লেভেল ক্যাশেও ব্যবহার করতে পারি।
থেকে উদ্ধৃত: http://javabeat.net/intr Productions- to-hibernate-caching/
স্ট্রিমলাইন লজিক ব্লগে প্রথম স্তরের ক্যাশিংয়ের বেশ ভাল ব্যাখ্যা রয়েছে ।
মূলত, প্রথম স্তরের ক্যাচিং প্রতি সেশনের ভিত্তিতে ঘটে যেখানে দ্বিতীয় স্তরের ক্যাচিং একাধিক সেশনে ভাগ করা যায়।
হাইবারনেট ক্যাশের কিছু প্রাথমিক ব্যাখ্যা এখানে ...
প্রথম স্তরের ক্যাশে "সেশন" অবজেক্টের সাথে সম্পর্কিত। ক্যাশে অবজেক্টের সুযোগটি সেশনের। একবার সেশন বন্ধ হয়ে গেলে ক্যাশেড অবজেক্টস চিরতরে চলে যায়। প্রথম স্তরের ক্যাশে ডিফল্টরূপে সক্ষম হয় এবং আপনি এটি অক্ষম করতে পারবেন না। যখন আমরা কোনও সত্তাকে প্রথমবার জিজ্ঞাসা করি তখন এটি ডাটাবেস থেকে পুনরুদ্ধার করা হয় এবং হাইবারনেট সেশনের সাথে সম্পর্কিত প্রথম স্তরের ক্যাশে সংরক্ষণ করা হয়। যদি আমরা আবার একই সেশনের অবজেক্টের সাথে একই বস্তুটি জিজ্ঞাসা করি তবে এটি ক্যাশে থেকে লোড হবে এবং কোনও এসকিএল কোয়েরি কার্যকর করা হবে না। evict()
পদ্ধতিটি ব্যবহার করে লোড করা সত্তাটি সেশন থেকে সরানো যেতে পারে । এই সত্তার পরবর্তী লোডিং আবার একটি ডেটাবেস কল করবে যদি এটি evict()
পদ্ধতি ব্যবহার করে সরিয়ে ফেলা হয় । clear()
পদ্ধতিটি ব্যবহার করে পুরো সেশন ক্যাশে সরানো যেতে পারে । এটি ক্যাশে সঞ্চিত সমস্ত সত্তা সরিয়ে ফেলবে।
দ্বিতীয় স্তরের ক্যাশে প্রথম স্তরের ক্যাশে পৃথক পৃথক পৃথক স্তরের ক্যাশে যা বিশ্বব্যাপী সেশনের কারখানার স্কোপতে ব্যবহারের জন্য উপলব্ধ। দ্বিতীয় স্তরের ক্যাশেটি সেশন কারখানার সুযোগে তৈরি করা হয় এবং নির্দিষ্ট সেশন কারখানাটি তৈরি করে তৈরি করা সমস্ত সেশনে এটি ব্যবহারের জন্য উপলব্ধ। এর অর্থ হ'ল একবার সেশন কারখানা বন্ধ হয়ে গেলে এর সাথে সম্পর্কিত সমস্ত ক্যাশে মারা যায় এবং ক্যাশে পরিচালকও বন্ধ হয়ে যায়। হাইবারনেট সেশন যখনই কোনও সত্তা লোড করার চেষ্টা করে, প্রথম স্তরের ক্যাশে (নির্দিষ্ট হাইবারনেট সেশনের সাথে সম্পর্কিত) সত্তাটির ক্যাশেড অনুলিপিটি সন্ধান করার জন্য এটি প্রথম স্থান। সত্তার ক্যাশেড অনুলিপি যদি প্রথম স্তরের ক্যাশে উপস্থিত থাকে তবে লোড পদ্ধতির ফলস্বরূপ এটি ফিরে আসে। যদি প্রথম স্তরের ক্যাশে কোনও ক্যাশেড সত্তা না থাকে তবে দ্বিতীয় স্তরের ক্যাশে ক্যাশেড সত্তার সন্ধান করা হবে। যদি দ্বিতীয় স্তরের ক্যাশে সত্তাকে ক্যাশে করে থাকে তবে লোড পদ্ধতির ফলস্বরূপ এটি ফিরে আসে। কিন্তু, সত্তাটি ফেরত দেওয়ার আগে, এটি প্রথম স্তরের ক্যাশেও সংরক্ষণ করা হয় যাতে সত্তার জন্য লোড পদ্ধতিতে পরবর্তী অনুরোধটি প্রথম স্তরের ক্যাশে থেকে সত্তাকে ফিরিয়ে দেয় এবং আবার দ্বিতীয় স্তরের ক্যাশে যাওয়ার দরকার পড়বে না। যদি সত্তা প্রথম স্তরের ক্যাশে এবং দ্বিতীয় স্তরের ক্যাশেও পাওয়া যায় না, তবে ডাটাবেস কোয়েরি কার্যকর করা হবে এবং সত্তা উভয় ক্যাশে স্তরে সংরক্ষণ করা হবে, প্রতিক্রিয়া হিসাবে ফিরে আসার আগেload()
পদ্ধতি।
এটি একটি খুব সাধারণ প্রশ্ন, সুতরাং এই উত্তরটি আমার ব্লগে আমার লেখা নিবন্ধের ভিত্তিতে তৈরি ।
হাইবারনেট শেষ সম্ভাব্য মুহুর্ত পর্যন্ত স্থির হওয়া প্রসঙ্গটি ফ্লাশ করে দেওয়ার চেষ্টা করে। আমি যেমন এই নিবন্ধে ব্যাখ্যা করেছি , এই কৌশলটি traditionতিহ্যগতভাবে লেনদেনের লিখিত-পিছনে হিসাবে পরিচিত।
লেখার পিছনে কোনও যৌক্তিক বা শারীরিক লেনদেনের চেয়ে হাইবারনেট ফ্লাশিংয়ের সাথে আরও সম্পর্কিত। লেনদেনের সময়, ফ্লাশ একাধিকবার হতে পারে।
ফ্ল্যাশ পরিবর্তনগুলি কেবলমাত্র বর্তমান ডাটাবেস লেনদেনের জন্য দৃশ্যমান। বর্তমান লেনদেন প্রতিশ্রুতিবদ্ধ না হওয়া অবধি অন্যান্য সমবর্তী লেনদেনের দ্বারা কোনও পরিবর্তন দৃশ্যমান হয় না।
প্রথম স্তরের ক্যাশের কারণে হাইবারনেট বেশ কয়েকটি অনুকূলকরণ করতে পারে:
একটি যথাযথ ক্যাচিং সমাধান একাধিক হাইবারনেট সেশন জুড়ে বিস্তৃত হতে পারে এবং এই কারণেই হাইবারনেট একটি অতিরিক্ত দ্বিতীয় স্তরের ক্যাশে সমর্থন করে।
দ্বিতীয় স্তরের ক্যাশেটি সেশনফ্যাক্টরি জীবনচক্রের সাথে আবদ্ধ, সুতরাং এটি কেবল তখনই ধ্বংস SessionFactory
হয়ে যায় (সাধারণত যখন অ্যাপ্লিকেশনটি বন্ধ হয়ে থাকে)। দ্বিতীয় স্তরের ক্যাশেটি মূলত সত্তা-ভিত্তিক ভিত্তিক, যদিও এটি একটি alচ্ছিক ক্যোয়ারী-ক্যাশিং সমাধানটিকেও সমর্থন করে।
আরও তথ্যের জন্য, এই নিবন্ধটি দেখুন ।
ডিফল্টরূপে, এনহাইবারনেট প্রথম স্তরের ক্যাচিং ব্যবহার করে যা সেশন অবজেক্ট ভিত্তিক। তবে আপনি যদি কোনও মাল্টি-সার্ভার পরিবেশে চলমান থাকেন তবে প্রথম স্তরের ক্যাশে কিছু কর্মক্ষমতা সম্পর্কিত সমস্যাগুলির সাথে খুব বেশি স্কেলযোগ্য নাও হতে পারে। এটি একাধিক সার্ভারের মাধ্যমে ডেটা বিতরণ করার কারণে এটি ডাটাবেসে খুব ঘন ঘন ট্রিপ করতে হয়েছিল তার কারণেই ঘটে। অন্য কথায় NHibernate একটি বেসিক, অত-অত-পরিশীলিত প্রক্রিয়াজাতকরণ L1 বাক্সের বাইরে ক্যাশে সরবরাহ করে। যাইহোক, এটি এমন বৈশিষ্ট্য সরবরাহ করে না যে কোনও ক্যাচিং সলিউশনটির অবশ্যই প্রয়োগের কার্যকারিতার উপর উল্লেখযোগ্য প্রভাব ফেলতে হবে।
সুতরাং এই সমস্ত সমস্যার প্রশ্নগুলি হল একটি এল 2 ক্যাশে ব্যবহার করা যা সেশনের কারখানার সাথে সম্পর্কিত। এটি ডেটাবেসটিতে সময় গ্রহনের ভ্রমণের পরিমাণ হ্রাস করে তাই শেষ পর্যন্ত অ্যাপের প্রতিক্রিয়া সময়কে বাড়িয়ে তোলে।
প্রথম স্তরের ক্যাশে
সেশন অবজেক্টটি প্রথম স্তরের ক্যাশে ডেটা ধারণ করে। এটি ডিফল্টরূপে সক্ষম হয়। প্রথম স্তরের ক্যাশে ডেটা পুরো অ্যাপ্লিকেশনটিতে উপলব্ধ হবে না। একটি অ্যাপ্লিকেশন অনেক সেশন অবজেক্ট ব্যবহার করতে পারে।
দ্বিতীয় স্তরের ক্যাশে
সেশনফ্যাক্টরি অবজেক্টটি দ্বিতীয় স্তরের ক্যাশে ডেটা ধারণ করে। দ্বিতীয় স্তরের ক্যাশে সঞ্চিত ডেটা পুরো প্রয়োগের জন্য উপলব্ধ available তবে আমাদের এটি স্পষ্টভাবে সক্ষম করা দরকার।
দ্বিতীয় স্তরের ক্যাশে, ডোমেন এইচবিএম ফাইলগুলি মূল কী এবং পরিবর্তনযোগ্য মান হতে পারে। উদাহরণস্বরূপ, এই ডোমেন শ্রেণিতে এক দিনের কিছু সময়কাল সর্বজনীন সত্য হিসাবে স্থির থাকে। সুতরাং, এটি অ্যাপ্লিকেশন জুড়ে অপরিবর্তনীয় হিসাবে চিহ্নিত করা যেতে পারে।