Database Connection Pooling কি?
Database Connection Pooling হল একটি কৌশল যা ডেটাবেসের সাথে অ্যাপ্লিকেশনের সংযোগ পরিচালনা করে। এটি ডেটাবেসের জন্য একটি সংযোগের পুল (pool) তৈরি করে, যার মাধ্যমে অ্যাপ্লিকেশন একাধিক সংযোগ তৈরি না করে পূর্বে তৈরি সংযোগগুলিকে পুনরায় ব্যবহার করতে পারে। এই পদ্ধতিটি অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করে, বিশেষ করে যখন অনেকগুলি কনকারেন্ট (concurrent) ডেটাবেস রিকোয়েস্ট আসছে।
TypeORM ডাটাবেস সংযোগের জন্য পুল ব্যবহার করতে সক্ষম, যা ডেটাবেসের সংযোগগুলিকে আরও কার্যকরীভাবে পরিচালনা করে এবং অ্যাপ্লিকেশনের পারফরম্যান্স বৃদ্ধি করে।
TypeORM-এ Database Connection Pooling সেটআপ
TypeORM ডাটাবেস সংযোগ পুলিং কনফিগার করার জন্য DataSource অবজেক্ট ব্যবহার করে পুল সেটআপ করা হয়। পুলিং কনফিগারেশন করার মাধ্যমে, TypeORM অ্যাপ্লিকেশনকে একটি নির্দিষ্ট সংখ্যক সংযোগ দিয়ে ডেটাবেসের সাথে যোগাযোগ করতে সক্ষম করে এবং প্রয়োজন অনুযায়ী সংযোগগুলি পুনঃব্যবহার করতে পারে।
Database Connection Pooling Configuration:
- TypeORM Connection Configuration: TypeORM-এ
DataSourceকনফিগারেশনে পুলিং কনফিগার করা হয়। এর জন্যextraঅপশনটি ব্যবহার করা হয়, যেখানে আমরাpoolSize,max,minইত্যাদি কনফিগারেশন সেট করতে পারি।
Database Connection Pooling Setup Example:
import { DataSource } from "typeorm";
import { User } from "./entity/User"; // User Entity Example
export const AppDataSource = new DataSource({
type: "mysql", // or "postgres" based on your DB
host: "localhost",
port: 3306, // default MySQL port
username: "root",
password: "your-password",
database: "test_db",
entities: [User],
synchronize: false,
logging: true,
extra: {
connectionLimit: 10, // Pool size (max number of connections)
max: 10, // Max number of connections to keep open in the pool
min: 2, // Min number of connections to keep in the pool
idleTimeoutMillis: 30000, // Max idle time in milliseconds
}
});
এখানে, extra অপশনের মাধ্যমে পুলিং কনফিগার করা হয়েছে:
- connectionLimit: সংযোগের সর্বাধিক সীমা।
- max: পুলে সর্বাধিক খোলা সংযোগের সংখ্যা।
- min: পুলে সর্বনিম্ন খোলা সংযোগের সংখ্যা।
- idleTimeoutMillis: সংযোগের অব্যবহৃত সময় সীমা।
2. DataSource এ সংযোগ তৈরি করা:
এখন AppDataSource.initialize() ব্যবহার করে TypeORM এর সাথে সংযোগ তৈরি করুন এবং ডেটাবেসে যুক্ত হোন:
import { AppDataSource } from "./data-source";
AppDataSource.initialize()
.then(() => {
console.log("DataSource has been initialized!");
})
.catch((error) => console.log("Error during DataSource initialization:", error));
এখানে, initialize() মেথড ডেটাবেস সংযোগ শুরু করে এবং যখন পুলে একাধিক সংযোগ তৈরি হয় তখন তা স্বয়ংক্রিয়ভাবে ব্যবহৃত হবে।
Pooling কনফিগারেশন এ অপশনস:
TypeORM এ extra কনফিগারেশন প্যারামিটারগুলির মধ্যে কিছু গুরুত্বপূর্ণ প্যারামিটার:
- connectionLimit: ডাটাবেসের জন্য সর্বাধিক সংযোগের সীমা (ডিফল্ট: 10)।
- max: পুলে খোলা সর্বাধিক সংযোগের সংখ্যা।
- min: পুলে খোলা সর্বনিম্ন সংযোগের সংখ্যা।
- idleTimeoutMillis: পুলে থাকা অব্যবহৃত সংযোগের জন্য সর্বোচ্চ সময় (মিলিসেকেন্ডে)।
- waitForConnections: যদি পুলে পর্যাপ্ত সংযোগ না থাকে, তবে এটি অপেক্ষা করবে।
- acquireTimeoutMillis: সংযোগ পুল থেকে একটি সংযোগ পাওয়ার জন্য সর্বোচ্চ সময় (মিলিসেকেন্ডে)।
- queueLimit: একাধিক সংযোগের জন্য কিউতে সর্বাধিক অপেক্ষা করার সংখ্যা।
Pool Size এবং Performance:
Connection Pooling একটি গুরুত্বপূর্ণ পারফরম্যান্স অপটিমাইজেশন কৌশল। সংযোগের সংখ্যা কাস্টমাইজ করার মাধ্যমে, আপনি অ্যাপ্লিকেশনের জন্য সঠিক লোড ব্যালান্সিং তৈরি করতে পারবেন। এখানে কিছু পরামর্শ দেওয়া হল:
- Small Applications: ছোট অ্যাপ্লিকেশনে, পুলের সাইজ ২ থেকে ৫ রাখতে পারেন।
- High Traffic Applications: বেশি ট্র্যাফিক অ্যাপ্লিকেশনে, পুলের সাইজ ২০ থেকে ৫০ পর্যন্ত রাখতে পারেন।
- Idle Timeout: দীর্ঘ সময় অব্যবহৃত সংযোগে সিস্টেমের অতিরিক্ত লোড না বাড়াতে, আইডল টাইমআউট সঠিকভাবে কনফিগার করা উচিত।
Database Connection Pooling-এর উপকারিতা
- পারফরম্যান্স বৃদ্ধি: সংযোগ পুনঃব্যবহার করার মাধ্যমে নতুন সংযোগ তৈরির জন্য অতিরিক্ত সময় এবং শক্তি খরচ কমে যায়।
- লোড ব্যালান্সিং: একাধিক সংযোগের মাধ্যমে আপনি ডেটাবেসের ওপর লোড ব্যালান্স করতে পারেন।
- ইনস্ট্যান্ট সংযোগ: নতুন সংযোগ তৈরির সময়ের পরিবর্তে, সংযোগ পুল থেকে দ্রুত সংযোগ নেওয়া যায়, যা অ্যাপ্লিকেশনের পারফরম্যান্স বৃদ্ধি করে।
Connection Pooling Troubleshooting
- Too Many Connections Error: যখন ডাটাবেসে একাধিক কনকারেন্ট সংযোগের প্রয়োজন হয় এবং পুলে পর্যাপ্ত সংযোগ না থাকে, তখন এই ত্রুটি ঘটতে পারে। এটি এড়াতে পুল সাইজ বাড়ানো যেতে পারে।
- Connection Leak: যদি সংযোগগুলি সঠিকভাবে বন্ধ না করা হয়, তাহলে পুলে "connection leak" হতে পারে। নিশ্চিত করুন যে সমস্ত সংযোগ বন্ধ করা হচ্ছে।
সারাংশ
Database Connection Pooling TypeORM-এ সংযোগগুলিকে কার্যকরভাবে ব্যবস্থাপনা করার জন্য একটি গুরুত্বপূর্ণ কৌশল। এটি অ্যাপ্লিকেশনের পারফরম্যান্স বৃদ্ধি করতে এবং ডেটাবেসের সংযোগের ব্যবহারের দক্ষতা উন্নত করতে সাহায্য করে। TypeORM এর connection pool কনফিগারেশন দ্বারা আপনি পুল সাইজ, আইডল টাইমআউট, সংযোগ সীমা ইত্যাদি কাস্টমাইজ করে আপনার ডেটাবেসের কর্মক্ষমতা নিয়ন্ত্রণ করতে পারবেন।
Read more