به طور پیشفرض، PostgreSQL یک تعداد محدود کانکشن هر نقش در یک زمان میتونن ایجاد کنن، بعلاوه اینکه یک محدودیت کلی در حداکثر تعداد کانکشنهایی که میتونن به دیتابیس متصل بشن وجود داره.
فاکتورهای متفاوتی میتونن موجب ارور too many connection بشن، از جمله:
کانکشن پولینگ شامل استفاده مجدد از کانکشنهای موجود دیتابیس بجای ایجاد کانکشن جدید به ازای هر ریکوئسته، که موجب کاهش تعداد کانکشنهای مورد نیاز میشه.
زمانی که از کانکشن پولینگ استفاده میکنیم، یک استخر از کانکشنها ایجاد و نگهداری میشه، و درخواست کانکشن جدید، با اختصاص یک کانکشن موجود در استخر بجای ایجاد کانکشن جدید هندل میشه.
توجه داشته باشین که افزایش بیش از حد pool size میتونه، منابع سرور دیتابیس شما رو تحت فشار قرار بده و باعث کاهش عملکردش بشه.
۱- تنظیم دیتابیس برای استفاده از کانکشن پولینگ:
نصب کانکشن پولرهایی مثل pbBouncer و pgpool-II. تنظیم کانفیگها شامل حداکثر تعداد کانکشن، تایماوت و تنظیمات لاگگیری.
تنظیم دیتابیس PostgreSQL برای پذیرش کانکشنها از کانکشن پولر. معمولا شامل ویرایش فایل pg_hba.conf میشه که ip آدرس کانکشن پولر یا hostname اش و روش اعتبارسنجی رو مشخص میکنیم.
و در نهایت، رستارت دیتابیس و کانکشن پولر برای فعال کردن تغییرات.
۲- نصب ماژولهای مورد نیاز پروژه node.js:
npm install pg npm install typeorm pg-pool
۳- افزودن تنظیمات کانکشن پول به انتهای تنظیمات دیتابیس node.js:
poolSize: 20
۴- کانفیگ پارامترهای استخر در برنامه node.js:
const { Pool } = require('pg') const pool = new Pool({ connectionString: 'postgresql://user:password@localhost/mydatabase', max: 20, // maximum number of clients in the pool idleTimeoutMillis: 30000, // how long a client is allowed to remain idle before being closed })
۵- استفاده از کانکشن پول برای اجرای کوئریهای node.js:
pool.query('SELECT * FROM mytable', (err, res) => { console.log(res.rows) })