Advanced Caching Configuration

iBATIS এর Advanced Features এবং Customization - আইবাটিস (iBATIS) - Java Technologies

300

iBATIS (MyBatis) একটি শক্তিশালী SQL Mapping framework যা caching এর মাধ্যমে কর্মক্ষমতা বাড়ানোর জন্য বিভিন্ন কনফিগারেশন বিকল্প প্রদান করে। Caching-এর ব্যবহারের মাধ্যমে, একাধিক কোয়েরি বা ডেটাবেস কল কমিয়ে এনে অ্যাপ্লিকেশনকে আরও দ্রুত এবং কার্যকরী করা যায়। iBATIS (MyBatis)-এ caching দুটি প্রধান স্তরে কাজ করে: session-level cache এবং second-level cache

এখানে Advanced Caching Configuration এর জন্য বিস্তারিত কনফিগারেশন এবং প্র্যাকটিস দেওয়া হয়েছে যা আপনার MyBatis অ্যাপ্লিকেশনের পারফরম্যান্স বাড়াতে সাহায্য করবে।


1. MyBatis Caching Overview

MyBatis caching দুটি স্তরে কাজ করে:

  1. First-level cache (Session-level cache)
    • এটি ডিফল্টভাবে সক্রিয় থাকে এবং একটি SqlSession এর জন্য ব্যবহার করা হয়। অর্থাৎ, একই SqlSession এর মধ্যে করা সব কুয়েরি একই ডেটার জন্য আবার ডেটাবেস থেকে রিটার্ন করবে না। এটি transactional cache এবং প্রতিটি SqlSession এ আলাদা থাকে।
    • প্রথম স্তরের ক্যাশ সাধারণত ডেটাবেস অ্যাক্সেস কমানোর জন্য ব্যবহার করা হয়, তবে এটি শুধুমাত্র সেই সেশনের জন্য প্রযোজ্য।
  2. Second-level cache (Global cache)
    • এটি SqlSession-এর বাইরে আরও বড় পরিসরে কাজ করে এবং multiple SqlSession এবং sessions এর মধ্যে shared থাকে। দ্বিতীয় স্তরের ক্যাশে কনফিগারেশন চালানোর জন্য MyBatis-এর জন্য ক্যাশ ম্যানেজার এবং ক্যাশ পলিসি কনফিগার করতে হয়। এটি ডেটা পুনরায় ব্যবহার করার সময় কর্মক্ষমতা বাড়াতে সাহায্য করে।
    • দ্বিতীয় স্তরের ক্যাশে আরও জটিল কনফিগারেশন এবং ক্যাশ eviction পলিসি ব্যবহৃত হয়।

2. Session-Level Cache (First-level Cache)

Session-level cache হল MyBatis এর ডিফল্ট ক্যাশিং পদ্ধতি, যা কোনও SqlSession এর মধ্যে সমস্ত কুয়েরির ফলাফল ধরে রাখে। এটি একাধিক কুয়েরির জন্য ডেটাবেসে আরও কম অ্যাক্সেস তৈরি করে।

Configuration for First-level Cache

<settings>
    <setting name="cacheEnabled" value="true"/>
</settings>
  • cacheEnabled: true করার মাধ্যমে প্রথম স্তরের ক্যাশিং সক্রিয় করা হয়।

Usage Example for First-level Cache

public class EmployeeService {
    public Employee getEmployeeById(int id) {
        SqlSession session = sqlSessionFactory.openSession();
        try {
            EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
            Employee employee = mapper.getEmployeeById(id); // First-level cache hit
            Employee employee2 = mapper.getEmployeeById(id); // Cache hit (no DB call)
            return employee;
        } finally {
            session.close();
        }
    }
}

Explanation:

  • যখন একই SqlSession ব্যবহার করা হয়, প্রথম স্তরের ক্যাশে ডেটা একবার লোড হলে পরবর্তী সময়ে সেটি ক্যাশ থেকে রিটার্ন হয়, ডেটাবেসে কল না করে।

3. Second-Level Cache (Global Cache)

Second-level cache সিস্টেমের সমস্ত SqlSession-এর মধ্যে শেয়ার করা হয় এবং এটি ডেটার পুনঃব্যবহার করে। এটি ডেটাবেস অ্যাক্সেস কমিয়ে এবং কর্মক্ষমতা বাড়াতে ব্যবহৃত হয়।

Step 1: Enable Second-level Cache in mybatis-config.xml

<configuration>
    <settings>
        <setting name="cacheEnabled" value="true"/>
    </settings>

    <mappers>
        <mapper resource="com/yourpackage/mapper/EmployeeMapper.xml"/>
    </mappers>
</configuration>

Step 2: Configure Second-level Cache in Mapper XML

<mapper namespace="com.yourpackage.mapper.EmployeeMapper">
    
    <!-- Enable second-level cache -->
    <cache eviction="LRU" flushInterval="60000" size="512" readOnly="true"/>

    <select id="getEmployeeById" resultType="Employee">
        SELECT * FROM employee WHERE id = #{id}
    </select>
</mapper>

Explanation:

  • <cache>: eviction, flushInterval, size, এবং readOnly প্রপার্টিগুলির মাধ্যমে ক্যাশ কনফিগার করা হয়।
    • eviction: ক্যাশের এলআরইউ (Least Recently Used) পলিসি। এটি কম ব্যবহৃত ডেটা সরিয়ে ফেলবে।
    • flushInterval: ক্যাশ ফ্লাশ করার জন্য ইন্টারভ্যাল নির্ধারণ করে (মিলিসেকেন্ডে)।
    • size: ক্যাশে যতটুকু ডেটা থাকবে তা নির্ধারণ করে (512 পৃষ্ঠার জন্য ক্যাশ সাইজ 512 মেগাবাইট)।
    • readOnly: যদি ক্যাশ শুধুমাত্র পড়ার জন্য ব্যবহৃত হয় (ডেটা পরিবর্তন না হয়), তবে এটি true সেট করা যায়।

Step 3: Using the Second-level Cache

public class EmployeeService {
    public Employee getEmployeeById(int id) {
        SqlSession session = sqlSessionFactory.openSession();
        try {
            EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
            Employee employee = mapper.getEmployeeById(id); // First-level cache hit

            // Second-level cache hit
            session.commit(); // Flush the second-level cache
            return employee;
        } finally {
            session.close();
        }
    }
}
  • session.commit(): ক্যাশে থাকা ডেটা commit হওয়ার পর ডেটাবেসে পরিবর্তন হলে তা সিঙ্ক্রোনাইজ করা হয়।
  • Second-level cache শুধুমাত্র select কুয়েরির জন্য কার্যকরী।

4. Cache Eviction Policy

MyBatis এ ক্যাশ থেকে ডেটা সাফ করার জন্য ক্যাশের eviction policy কনফিগার করা যায়, যেমন LRU (Least Recently Used), FIFO (First In First Out) বা None

Eviction Policy Example (LRU)

<cache eviction="LRU" flushInterval="60000" size="512" readOnly="true"/>
  • LRU: এটি সবচেয়ে কম ব্যবহৃত (Least Recently Used) ডেটাকে ক্যাশ থেকে সরিয়ে দেয়।
  • FIFO: এটি প্রথমে সন্নিবেশিত (First In) ডেটাকে সরিয়ে দেয়।

Eviction Example for Specific Query

EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
Employee employee = employeeMapper.getEmployeeById(id);
sqlSession.clearCache();  // Manually clear cache

5. Advanced Caching Configuration Best Practices

  • Use Caching for Frequent Queries: ক্যাশ শুধুমাত্র সেই কুয়েরি বা ডেটার জন্য ব্যবহার করুন যা বেশিরভাগ সময় একই থাকে, যেমন লগইন তথ্য বা স্ট্যাটিক ডেটা।
  • Set Proper Cache Size: ক্যাশের সাইজ উপযুক্তভাবে নির্ধারণ করুন যাতে অতিরিক্ত মেমরি ব্যবহার না হয়।
  • Configure Cache Eviction Properly: LRU eviction পলিসি ব্যবহার করুন যাতে পুরানো ডেটা পরিষ্কার হয়ে যায় এবং ক্যাশে শুধুমাত্র প্রাসঙ্গিক ডেটা থাকে।

iBATIS (MyBatis)-এ Advanced Caching Configuration এর মাধ্যমে আপনি আপনার ডেটাবেসের পারফরম্যান্স উন্নত করতে পারেন। First-level cache এবং Second-level cache এর ব্যবহারে আপনি ডেটাবেস অ্যাক্সেস কমিয়ে, দ্রুত ডেটা রিটার্ন করতে পারবেন।

  • First-level cache: শুধুমাত্র SqlSession এর মধ্যে কাজ করে, এবং এটি ডিফল্টভাবে সক্রিয় থাকে।
  • Second-level cache: সেশনগুলির মধ্যে শেয়ার করা হয় এবং উন্নত ক্যাশ পলিসি কনফিগার করার সুযোগ প্রদান করে।
  • Eviction Policy এবং FlushInterval এর মাধ্যমে ক্যাশ ব্যবস্থাপনাকে আরও উন্নত করা সম্ভব।

এই কনফিগারেশনগুলো সঠিকভাবে ব্যবহার করলে আপনার MyBatis অ্যাপ্লিকেশনটি আরও দ্রুত এবং স্কেলেবল হবে।

Content added By
Promotion

Are you sure to start over?

Loading...