ক্যাশিং সেট আপ করা হচ্ছে
আসুন hibernate.cfg.xml ফাইলে আমাদের ক্যাশিং সেটিংসে ফিরে যাই:
<property name="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.SingletEhCacheProvider"/>
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.use_query_cache" value="true"/>
প্রথম লাইনে মনোযোগ দিন - এতে ক্যাশিং ইঞ্জিন ক্লাসের নাম রয়েছে। হাইবারনেট আসলে অভ্যন্তরীণভাবে ক্যাশিং প্রয়োগ করে না, পরিবর্তে এটি ইন্টারফেসের একটি সেট সরবরাহ করে যার সাহায্যে আপনি আপনার নিজস্ব ক্যাশিং ইঞ্জিন প্রয়োগ করতে পারেন।
জনপ্রিয় বাস্তবায়ন অন্তর্ভুক্ত:
- EHCache
- OSCache
- SwarmCache
- JBoss TreeCache
EHCache
এটি মেমরিতে বা ডিস্কে ক্যাশে করা যেতে পারে, সেইসাথে ক্লাস্টার ক্যাশে, এবং হাইবারনেট ক্যোয়ারী ফলাফলের একটি ঐচ্ছিক ক্যাশে সমর্থন করে।
OSCache
একই JVM-এ মেমরি এবং ডিস্ক ক্যাশিং সমর্থন করে মেয়াদপূর্তির নীতিগুলির একটি সমৃদ্ধ সেট এবং ক্যাশে সমর্থন ক্যোয়ারী।
SwarmCache
JGroups ভিত্তিক ক্লাস্টার ক্যাশে। এটি ক্লাস্টারড অবৈধতা ব্যবহার করে কিন্তু হাইবারনেট ক্যোয়ারী ক্যাশে সমর্থন করে না।
JBoss ক্যাশে
JGroups মাল্টিকাস্ট লাইব্রেরির উপর ভিত্তি করে একটি সম্পূর্ণ লেনদেনের প্রতিলিপি করা ক্লাস্টারড ক্যাশে। এটি প্রতিলিপি বা অবৈধকরণ, সিঙ্ক্রোনাস বা অ্যাসিঙ্ক্রোনাস যোগাযোগ, এবং আশাবাদী এবং হতাশাবাদী লকিং সমর্থন করে। হাইবারনেট কোয়েরি ক্যাশে সমর্থিত।
এই ইঞ্জিনগুলি সমস্ত সমান্তরাল অ্যাক্সেস কৌশল সমর্থন করে না। প্রকৃত পরিস্থিতি নীচের টেবিলে বর্ণনা করা হয়েছে:
কৌশল/প্রদানকারী | শুধুমাত্র পাঠযোগ্য | অ-কঠোর পঠন-লেখা | পড়া-লেখা | লেনদেন |
---|---|---|---|---|
EHCache | এক্স | এক্স | এক্স | |
OSCache | এক্স | এক্স | এক্স | |
SwarmCache | এক্স | এক্স | ||
JBoss ক্যাশে | এক্স | এক্স |
EHCache কনফিগারেশন উদাহরণ
EHCache ইঞ্জিনের নিজস্ব কনফিগারেশন ফাইল আছে যাকে ehcache.xml বলা হয়। এই ধরনের ফাইলের আনুমানিক বিষয়বস্তু:
<diskStore path="java.io.tmpdir"/>
<defaultCache
maxElementsInMemory = "1000"
eternal = "false"
timeToIdleSeconds = "120"
timeToLiveSeconds = "120"
overflowToDisk = "true"
/>
<cache name = "Employee"
maxElementsInMemory = "500"
eternal = "true"
timeToIdleSeconds = "0"
timeToLiveSeconds = "0"
overflowToDisk = "false"
/>
এখানে আপনি সাধারণভাবে এবং প্রতিটি সত্তার জন্য আলাদাভাবে ক্যাশিং সেটিংস কনফিগার করতে পারেন। অফিসিয়াল ডকুমেন্টেশনে আরও পড়ুন ।
ক্যাশিং পরিসংখ্যান বিশ্লেষণ
ক্যাশিং মেকানিজম কতটা ভালোভাবে কনফিগার করা হয়েছে তাও আপনাকে পরীক্ষা করতে হতে পারে। হাইবারনেট এই জন্য বিশেষভাবে একটি বিশেষ পরিসংখ্যান বস্তু প্রদান করে।
উদাহরণ:
Statistics statistics = session.getSessionFactory().getStatistics();
CacheRegionStatistics cacheStatistics = statistics.getDomainRegionStatistics(“com.codegym.employee”);
long hitCount = cacheStatistics.getHitCount();
long missCount = cacheStatistics.getMissCount();
double hitRatio = (double) hitCount / (hitCount + missCount);
আমরা এই বিষয়ে বিস্তারিত জানাব না, কারণ আপনার স্ট্যান্ডার্ড ক্যাশিং সলিউশন ফুরিয়ে যেতে আরও অনেক বছর লাগবে এবং সেগুলিকে ম্যানুয়ালি উন্নত করতে হবে। যাইহোক, এই মন্তব্যটি একটি অনুরূপ কেস থেকে বের করা হতে পারে:
// Dear programmer:
// When you're done "optimizing" this routine
// and realize how big of a mistake it was to do this,
// please increment the counter at the bottom as a warning
// for the next guy:
// number_of_hours_spent_here = 42
GO TO FULL VERSION