Microsoft Technologies Stateless Session এবং Batch Insert/Update গাইড ও নোট

277

NHibernate তে Stateless Session এবং Batch Insert/Update দুটি অত্যন্ত গুরুত্বপূর্ণ কৌশল যা ডেটাবেস অপারেশনগুলি দ্রুততর এবং আরও কার্যকরী করার জন্য ব্যবহৃত হয়। বিশেষ করে যখন আপনি বড় পরিমাণে ডেটা সংরক্ষণ বা আপডেট করতে চান, তখন এই কৌশলগুলি ব্যবহার করা অত্যন্ত কার্যকরী হতে পারে।


Stateless Session

Stateless Session হল NHibernate-এর একটি বিশেষ সেশন টাইপ যা প্রথম স্তরের ক্যাশ বা ট্র্যাকিং মেকানিজম ব্যবহার করে না। এটি একটি সহজ এবং হালকা সেশন যা শুধুমাত্র ডেটাবেসের সাথে যোগাযোগ করে এবং ডেটাকে ম্যানেজ করে না। Stateless Session ডেটা লোড, সেভ, বা আপডেট করার সময় কোনো অবজেক্ট ট্র্যাকিং বা ক্যাশিং প্রক্রিয়া ব্যবহার করে না, ফলে এটি আরও দ্রুত এবং কম রিসোর্স ব্যবহারকারী।

Stateless Session এর বৈশিষ্ট্য:

  • No First-Level Cache: Stateless Session প্রথম স্তরের ক্যাশ ব্যবহার করে না, অর্থাৎ এটি লোড হওয়া অবজেক্টগুলোকে সেশনে সংরক্ষণ করে না। এর ফলে ডেটাবেস থেকে নতুন করে ডেটা লোড করার সময় সময় এবং মেমরি কম খরচ হয়।
  • No Dirty Checking: এই সেশনে কোনো dirty checking বা পরিবর্তন শনাক্তকরণ প্রক্রিয়া থাকে না। তাই, অবজেক্টে পরিবর্তন করা হলেও সেশন তা ট্র্যাক করে না এবং সরাসরি ডেটাবেসে আপডেট করা হয়।
  • No Identity Map: এটি এনটিটির identity map রাখে না, অর্থাৎ একাধিক সেশনে একই অবজেক্ট হতে পারে এবং সেগুলি একে অপরের থেকে আলাদা থাকবে।

Stateless Session ব্যবহার করা:

using (ISession session = sessionFactory.OpenStatelessSession())
{
    var employee = new Employee { Name = "John Doe", Age = 30 };
    
    // সেভ করা
    session.Insert(employee);  // Stateless session এর মাধ্যমে সেভ

    // এক্সিকিউট করা
    session.Flush();  // ব্যাচ অপারেশন সম্পন্ন করা
}

এখানে OpenStatelessSession মেথডটি একটি Stateless Session খোলার জন্য ব্যবহৃত হচ্ছে, এবং তারপর Insert মেথডের মাধ্যমে নতুন Employee অবজেক্ট ডেটাবেসে সেভ করা হচ্ছে। Flush কল করার মাধ্যমে ডেটা ডেটাবেসে সেভ হয়ে যাবে।


Batch Insert/Update

Batch Insert এবং Batch Update হল এমন একটি কৌশল যা একাধিক ইনসার্ট বা আপডেট অপারেশন একযোগে (একই সময়ে) গ্রুপ করে ডেটাবেসে পাঠায়। এটি ডেটাবেসের উপর চাপ কমায় এবং পারফরম্যান্স অনেক বেশি উন্নত করে, বিশেষ করে যখন অনেক রেকর্ড সেভ বা আপডেট করতে হয়।

Batching কৌশলটি ডেটাবেসে একাধিক SQL স্টেটমেন্ট পাঠানোর পরিবর্তে একক ব্যাচে একাধিক স্টেটমেন্ট প্রেরণ করে, যার ফলে কম নেটওয়ার্ক কল এবং দ্রুত অপারেশন হয়।

Batch Insert এবং Update Enable করা:

Batching সক্ষম করতে আপনাকে hibernate.cfg.xml ফাইলে সেটিংস কনফিগার করতে হবে:

<hibernate-configuration>
  <session-factory>
    <!-- Enable batching -->
    <property name="hibernate.jdbc.batch_size">20</property>
    <property name="hibernate.order_inserts">true</property>
    <property name="hibernate.order_updates">true</property>
  </session-factory>
</hibernate-configuration>

এখানে, hibernate.jdbc.batch_size প্রপার্টি ২০ নির্ধারণ করা হয়েছে, যা মানে প্রতি ব্যাচে ২০টি ইনসার্ট বা আপডেট অপারেশন একযোগে প্রেরণ করা হবে।

Batch Insert উদাহরণ:

using (ISession session = sessionFactory.OpenSession())
{
    using (ITransaction transaction = session.BeginTransaction())
    {
        // ২০টি Employee অবজেক্ট একসাথে সেভ করতে হবে
        for (int i = 0; i < 100; i++)
        {
            var employee = new Employee { Name = $"Employee {i}", Age = 25 + (i % 10) };
            session.Save(employee);

            if (i % 20 == 0)
            {
                session.Flush();   // Batch Flush (এইখানে ২০টি ইনসার্ট হবে)
                session.Clear();   // সেশন ক্লিয়ার (অবজেক্ট গুলি মেমরি থেকে মুছে যাবে)
            }
        }
        transaction.Commit();  // ট্রানজেকশন কমিট
    }
}

এখানে, আমরা ১০০টি Employee অবজেক্টকে ব্যাচে ইনসার্ট করতে চাই। প্রতি ২০টি ইনসার্টের পর session.Flush() কল করা হয়, যার মাধ্যমে ডেটাবেসে ইনসার্ট হওয়া রেকর্ডগুলি আপডেট হয় এবং মেমরি থেকে অবজেক্টগুলি ক্লিয়ার করা হয়।

Batch Update উদাহরণ:

using (ISession session = sessionFactory.OpenSession())
{
    using (ITransaction transaction = session.BeginTransaction())
    {
        // ২০টি Employee অবজেক্টের Age আপডেট করা হবে
        var employees = session.CreateQuery("FROM Employee").List<Employee>();
        for (int i = 0; i < employees.Count; i++)
        {
            employees[i].Age = 30 + (i % 5);
            session.Update(employees[i]);

            if (i % 20 == 0)
            {
                session.Flush();   // Batch Flush
                session.Clear();   // সেশন ক্লিয়ার
            }
        }
        transaction.Commit();  // ট্রানজেকশন কমিট
    }
}

এখানে, ২০টি Employee অবজেক্টের Age আপডেট করতে Batch Update পদ্ধতি ব্যবহার করা হয়েছে। প্রতি ২০টি আপডেটের পর Flush এবং Clear ব্যবহার করা হয়।


Stateless Session এবং Batch Operation এর সুবিধা:

  1. কম মেমরি ব্যবহার: Stateless Session কোনো ক্যাশিং এবং ট্র্যাকিং কাজ করে না, ফলে মেমরি খরচ কম থাকে।
  2. দ্রুত পারফরম্যান্স: Batch Insert/Update ব্যবহারের ফলে ডেটাবেসে একাধিক অপারেশন একসাথে পাঠানো হয়, ফলে পারফরম্যান্স উন্নত হয়।
  3. বড় পরিমাণ ডেটা প্রোসেসিং: যখন অনেক ডেটা সেভ বা আপডেট করতে হয়, তখন Stateless Session এবং Batch Operation আপনাকে তা দ্রুতভাবে করতে সাহায্য করে।
  4. কম নেটওয়ার্ক কল: একাধিক অপারেশন একযোগে পাঠানোর ফলে নেটওয়ার্ক কলের সংখ্যা কমে যায়, যা সিস্টেমের সামগ্রিক কার্যক্ষমতা উন্নত করে।

এই কৌশলগুলির মাধ্যমে NHibernate ব্যবহারকারী বড় পরিমাণে ডেটার সাথে কাজ করতে সক্ষম হয়ে থাকে, যেখানে দ্রুত পারফরম্যান্স এবং কম রিসোর্স ব্যবহার গুরুত্বপূর্ণ।

Content added By
Promotion

Are you sure to start over?

Loading...