View Full Version : connection pool
A.iman
یک شنبه 05 مرداد 1393, 00:00 صبح
سلام دوستان . ببخشید اگه سوالم ابتدایی هست .
میخاستم بپر سم این connection pool چیه ؟ ما برای استفاده از دیتابیس همون getConnection , Driver هم میتونیم کارمون رو انجام بدیم دیگه چه نیازی به این هست ؟
cups_of_java
یک شنبه 05 مرداد 1393, 10:12 صبح
وقتی شما یه برنامه شخصی یا دسکتاپ داری یا یه سایت شخصی برای خودت ساختی یه کانکشن به دیتابیس میزنی و کارت رو انجام میدی.....
اما فرض کن facebook بخواد برای هر کاربر که صفحش رو لود میکنه یه کانکشن بزنه (تازه تو حالت واقعی نگاه کن اطلاعات از جاهای مختلف تو قسمت های مختلف صفحه جمع میشن... پس برای هر کاربر چندین کانکشن هم ممکنه بخواد....) حالا حساب کن چند نفر در آن واحد وصل هستند!؟ خیلی بیشتر از ملیون هست اما ما فرض می کنیم 50هزار نفر..... شما نمی تونی روی یکی سیستم 50هزار کانکشن موازی بزنی به یه دیتابیس و حالش خوب بمونه...
خلاصه داستان اینه که تو برنامه های سازمانی (مثل همه این سایت های بزرگ... سازمان سنجش.... نرم افزار های بانکی... و و و ) نیاز هایی این قبیل هم هست... که Connection Pooling یکی از اون هاست.
Connection Pooling میاد از قبل یک سری کانکشن دیتابیس (مثلن 1000 تا) درست میکنه و تو یه مخزنی (pool) نگهداری میکنه تو حافظه... وقتی کاربر ها Connection میخوان توی کد ما براشون getConnection جدید نمی کنیم... بلکه از اون مخزن یه آماده رو میگیریم.... و وقتی کارمون تموم شد به مخزن پسش میدیم (آزادش میکنیم Connection رو) اینطوری هم زمان گرفتن یه کانکشن جدید رو برای هر کاربر کم کردیم.... هم اینکه تعداد کل کانکشن ها محدود و قابل مدیریت هستش....
حلله؟
A.iman
یک شنبه 05 مرداد 1393, 11:30 صبح
ممنون !:چشمک:
یه چیزی ... ما که به صورت دستی این ماکزیمم و مینمم کانکشن ها رو تعیین میکنیم ، مثلا اگر بیشتر تعیین کنیم ، کارایی سیستم کم میشه ؟ مثلا 1000 تا آماده داشته باشیم ، در حالی که بیشتر تقاضای ما بیش از 20 تا نباشه ... اونوقت کارایی سیستم ما کم میشه ؟ البته مشخصه که کم میشه ولی میخاستم ببینم واقعا میتونه مشکل ساز باشه برای سیستم ؟
vahid-p
یک شنبه 05 مرداد 1393, 11:57 صبح
وقتی شما یه برنامه شخصی یا دسکتاپ داری یا یه سایت شخصی برای خودت ساختی یه کانکشن به دیتابیس میزنی و کارت رو انجام میدی.....
اما فرض کن facebook بخواد برای هر کاربر که صفحش رو لود میکنه یه کانکشن بزنه (تازه تو حالت واقعی نگاه کن اطلاعات از جاهای مختلف تو قسمت های مختلف صفحه جمع میشن... پس برای هر کاربر چندین کانکشن هم ممکنه بخواد....) حالا حساب کن چند نفر در آن واحد وصل هستند!؟ خیلی بیشتر از ملیون هست اما ما فرض می کنیم 50هزار نفر..... شما نمی تونی روی یکی سیستم 50هزار کانکشن موازی بزنی به یه دیتابیس و حالش خوب بمونه...
خلاصه داستان اینه که تو برنامه های سازمانی (مثل همه این سایت های بزرگ... سازمان سنجش.... نرم افزار های بانکی... و و و ) نیاز هایی این قبیل هم هست... که Connection Pooling یکی از اون هاست.
Connection Pooling میاد از قبل یک سری کانکشن دیتابیس (مثلن 1000 تا) درست میکنه و تو یه مخزنی (pool) نگهداری میکنه تو حافظه... وقتی کاربر ها Connection میخوان توی کد ما براشون getConnection جدید نمی کنیم... بلکه از اون مخزن یه آماده رو میگیریم.... و وقتی کارمون تموم شد به مخزن پسش میدیم (آزادش میکنیم Connection رو) اینطوری هم زمان گرفتن یه کانکشن جدید رو برای هر کاربر کم کردیم.... هم اینکه تعداد کل کانکشن ها محدود و قابل مدیریت هستش....
حلله؟
عالی بود. عجب روش هایی!!
چقدر در عمل ریزه کاری وجود داره. توضحتون خیلی عالی بود.
ممنون !:چشمک:
یه چیزی ... ما که به صورت دستی این ماکزیمم و مینمم کانکشن ها رو تعیین میکنیم ، مثلا اگر بیشتر تعیین کنیم ، کارایی سیستم کم میشه ؟ مثلا 1000 تا آماده داشته باشیم ، در حالی که بیشتر تقاضای ما بیش از 20 تا نباشه ... اونوقت کارایی سیستم ما کم میشه ؟ البته مشخصه که کم میشه ولی میخاستم ببینم واقعا میتونه مشکل ساز باشه برای سیستم ؟
من اطلاع فنی ندارم، اما خب به نظرم این کاری که میگم شاید منطقی باشه. دو راه دارم :
1- به صورت دستی هر وقت که میدونی نیاز به کانکشن های زیادی هست، تعدادش رو زیاد کنی. یعنی یه چیز ثابت نباشه. مثل مثال سازمان سنجش که زدن، مثلا چند روز دیگه اعلام نتیجست، خب خودشون میدونن که چه حجمی لازمه.
2- میشه به صورت متغیر براش برنامه نوشت. مثلا یه برنامه آمارگیری بذاره، که مثلا وقتی دید در یک بازه داره کانکشن ها افزایش پیدا میکنه، مثلا وقتی از 75 یا 90 درصد کانکشن ها استفاده میشه، خب بیاد به صورت متغیر تعداد های کانکشن هاش رو کم کم افزایش بده و وقتی دید مثلا از فلان درصد کمتر استفاده میشه، اونا رو کم کنه. کلا از آمار و حدس استفاده بشه.
A.iman
یک شنبه 05 مرداد 1393, 12:35 عصر
من اطلاع فنی ندارم، اما خب به نظرم این کاری که میگم شاید منطقی باشه. دو راه دارم :
1- به صورت دستی هر وقت که میدونی نیاز به کانکشن های زیادی هست، تعدادش رو زیاد کنی. یعنی یه چیز ثابت نباشه. مثل مثال سازمان سنجش که زدن، مثلا چند روز دیگه اعلام نتیجست، خب خودشون میدونن که چه حجمی لازمه.
2- میشه به صورت متغیر براش برنامه نوشت. مثلا یه برنامه آمارگیری بذاره، که مثلا وقتی دید در یک بازه داره کانکشن ها افزایش پیدا میکنه، مثلا وقتی از 75 یا 90 درصد کانکشن ها استفاده میشه، خب بیاد به صورت متغیر تعداد های کانکشن هاش رو کم کم افزایش بده و وقتی دید مثلا از فلان درصد کمتر استفاده میشه، اونا رو کم کنه. کلا از آمار و حدس استفاده بشه.
من این کار رو توی نت بینز با سرور GLASSFISH انجام دادم ، توی تنظیمات رو هم چک کردم ولی همچین امکانی رو ندیدم ! اگه باشه که خیلی خوب میشه ... یعنی میشه به کلی قید GETConnection رو زد !
cups_of_java
یک شنبه 05 مرداد 1393, 15:07 عصر
تنظیمات ConnectionPoolها ثابت و معین هستن... شما در حین اجرا نمیتونید عوضشون کنید... بسته به محیطتون عدد درست رو انتخاب میکنید. البته حتمن Poolهایی هم هستن که این سبکی که شما گفتی یا هوشمند تر کار کنن......
توی Containerها شما هیچ وقت خودت createConnection نمیکنی... همیشه Data Store خودت رو توی سرور تعریف میکنی اون برات pooling راه می ندازه و شما توی کدت از طریق JNDI و یا JPA و ... دسترسی به connection داری که اون برات زده....
طبیعتن اگه poolet رو بیخودی بزرگ بگیری اولین اتفاقی که می افته اینه که RAM سیستم هدر میره و بیخودری میره بالا... و احتمال داره کارایی Containerات بیاد پایین....
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.