نمایش نتایج 1 تا 22 از 22

نام تاپیک: همه چیز درباره ی Connection Pooling

  1. #1

    همه چیز درباره ی Connection Pooling

    به طور خلاصه، Connection Pooling تکنیکی است که به منظور استفاده از Connection های فعال موجود به جای ایجاد Connection جدید به دیتابیس، به منظور صرفه جویی در زمانی دستیابی به داده های بانک اطلاعاتی استفاده می شود.
    تکنیک Pooling در طراحی سیستم های تجاری و بزرگ، ارزش و اهمیت خاصی پیدا می کند.
    البته ممکن است در ظاهر، سیستم های طراحی شده بدون استفاده از این تکنیک دارای توان بازدهی خوبی باشند اما به طور حتم در دراز مدت از کارایی و بازدهی آنها کاسته خواهد شد.
    به عنوان مثال متوجه خواهید شد که سیستم طراحی شده، قادر به پاسخگویی و پردازش همزمان هزار تراکنش در دقیقه توسط ده کاربر است اما توان عملیاتی همین سیستم در پردازش درخواست های هزار کاربر که ممکن است در هر دقیقه موجب ده تراکنش شوند، به شکل محسوسی افت خواهد کرد.
    این مشکل از آنجا ناشی می شود که ایجاد هر Connection به دیتابیس، اصطلاحا موجب ایجاد سربار بر روی سیستم کلاینت (یا در برنامه های وب، بر روی سرور( می شود.
    این سربار به دلیل انجام مراحل مختلف قبول درخواست Connection به دیتابیس به وجود می آید; همانند تایید مجوز دسترسی به دیتابیس.
    بیشتر مکانیزم هایی که به منظور ارتباط با دیتابیس ها مورد استفاده قرار می گیرند، به منظور جلوگیری از ایجاد این سربار، از تکنیک Connection Pooling استفاده می کنند.

    Pool در فرهنگ لغت به معنای استخر و حوض و در جای دیگر به معنای استفاده مشترک از چیزی، بیان شده است.

    همان طور که قبلا گفته شد، Connection Pooling از Connection های فعال و موجود، جهت ایجاد ارتباط با دیتابیس استفاده می کند و در حقیقت لیستی از Connection های موجود را برگشت می دهد.
    در تکنیک Pooling، زمانی که کلاینت درخواست ایجاد ارتباط با دیتابیس را به برنامه می فرستد، به جای ایجاد مجدد Connection، این Connection از Pool استخراج شده و عملیات اتصال انجام می پذیرد.
    شایان ذکر است که درگیری کمتر CPU با منابع و صرفه جویی در پهنای باند شبکه، از مزایای دیگر استفاده از این تکنیک است.
    در ADO.NET، کلاس یا شی خاصی به منظور استفاده از تکنیک Connection Pooling وجود ندارد، در عوض، پرووایدرهایی که همراه با Net Framework. عرضه شده اند، به طور خودکار این عمل را انجام می دهند.
    در پرووایدرهای SQL Server و Oracle، این تکنیک به طور خودکار اعمال و اجرا می شود.
    در پرووایدرهای OLE DB و ODBC، این تکنیک با محدودیت و قابلیت های کمتری انجام می پذیرد.
    توجه: هر چند که تکنیک Connection Pooling در اکثر پرووایدرها به شکل خودکار انجام می پذیرد، اما برنامه نویس قادر به ایجاد تنظیماتی در Connection String به منظور تغییر در برخی خواص Pooling می باشد.
    اولین کاری که در این تکنیک انجام می پذیرد، پردازش Connection String ارسال شده به برنامه است.
    Connection String بررسی می شود. در صورتی که Connection String ای در Pool مطابق با Connection String ارسال شده توسط کلاینت پیدا شود، از Connection String موجود در Pool جهت اتصال به دیتابیس استفاده خواهد شد.
    اگر هیچ Connection ای در Pool وجود نداشته باشد، Connection String دریافت شده به منظور انجام عمل تطابق با درخواست های بعدی، در Pool قرار خواهد گرفت.
    توجه مهم: Connection Pooling به بزرگ و کوچک بودن حروف، حساس است.
    همچنین، Connection Pooling به ترتیب قرار گیری پارامترهای Connection String نیز حساس است.
    به عنوان مثال، اگر دو Connection String یکسان با رعایت حروف بزرگ و کوچک و تعداد پارامترها به برنامه ارسال شود اما ترتیب قرار گیری پارامترها در دو Connection String متفاوت باشد، تکنیک Connection Pooling اعمال نمی شود. (پرووایدر ODP.NET که همان پرووایدر دیتابیس Oracle می باشد، از این قائده مستثنا است)

    نکته مهم: به منظور اطمینان از اعمال تکنیک Pooling، حتما Connection String را در یک فایل یا رجیستری قرار داده و از نوشتن مستقیم آن در کد برنامه اجتناب کنید.
    برنامه نویسان ASP.NET باید Connection String را در فایل Web.Config قرار دهند.


    مثال زیر نحوه عمل تکنیک Connection Pooling را مشخص می کند:

    string conString1 = "Data Source=localhost;" +
    "Initial Catalog=FirstDB;Integrated Security=SSPI");

    string conString2 = "Data Source=localhost;" +
    "Initial Catalog=SecondDB;Integrated Security=SSPI");

    SqlConnection con = new SqlConnection();

    con.ConnectionString = conString1;
    con.Open();

    در اینجا (با فرض اینکه Pool خالی است و برای اولین بار درخواست اتصال به دیتابیس ارسال می شود)، رشته حاوی conString1 در Pool قرار خواهد گرفت. پس یک Pool ایجاد شد. نام آن را Pool A می گذاریم.

    con.Close()

    Connection به Pool A برگشت داده می شود.

    con.ConnectionString = conString2;
    con.Open();

    دو خط فوق را در نظر بگیرید.
    در خط اول، Connection String ای به شی con نسبت داده می شود که با Connection String مرتبه اول (conString1) متفاوت است.
    به همین دلیل، در هنگام ارسال درخواست اتصال به برنامه، یک Pool جدید که حاوی conString2 است ایجاد می شود. نام آن را Pool B می گذاریم.

    con.Close()

    Connection به Pool B برگشت داده می شود.

    con.ConnectionString = conString1;
    con.Open();

    حال، دو خط فوق را در نظر بگیرید.
    از آنجایی که قبلا conString1 به عنوان یک Pool در مخزن Pool ها قرار گرفته، نیاز به ایجاد مجدد Connection نیست و Pool A استخراج شده و از آن جهت برقراری ارتباط با دیتابیس استفاده می شود. (صرفه جویی در زمان)

    con.Close()

    Connection به Pool A برگشت داده می شود.

    نکاتی در مورد مثال فوق:
    1) در هنگام فراخوانی متد Close، کانکشن فعال در Pool قرار خواهد گرفت.
    در هنگام فراخوانی متد Open، پرووایدر، مخزن Pool ها را به منظور یافتن یک Pool مطابق با Connection String ارسالی جستجو می کند.

    2) استفاده از Pool تنها زمانی انجام می پذیرد که دو Connection دقیقا شبیه به هم باشند.

    3) اگر هیچ Pool ای در مخزن Pool ها وجود نداشته باشد، اولین Pool در زمانی فراخوانی متد Open ایجاد شده و در مخزن Pool ها قرار خواهد گرفت.
    به طور پیش فرض، حداکثر 100 Pool در مخزن Pool ها قرار خواهد گرفت. (این مقدار توسط برنامه نویس قابل تغییر است)

    تکنیک Connection Pooling در دیتابیس های SQL Server و Oracle:
    مدیریت Pooling در دیتابیس های SQL Server و Oracle به طور خودکار توسط پرووایدرهای آنها انجام می پذیرد. اما برنامه نویس می تواند با ایجاد تغییراتی در Connection String، برخی از خواص آن را به دلخواه تغییر دهد.

    موفق باشید.

  2. #2
    خیلی جالب و مفید بود
    از زحمتی که کشیدید سپاسگذارم.
    موفق باشید

  3. #3
    کاربر دائمی آواتار aidinwashere
    تاریخ عضویت
    فروردین 1384
    محل زندگی
    پشته سرت
    پست
    632
    بسیار مشتاق یادگیری آن بودم.
    پیروز باشید

  4. #4
    بسیار جالب بود
    اگه میشه در مورد مکانیزم ADO.net 2 هم مقالاتی ارسال کنید

    با تشکر

    موفق باشید

  5. #5
    کاربر دائمی آواتار jirjirakk
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    wwwroot
    پست
    660
    تشکر جناب راد

  6. #6
    مرسی.یه سری از ابهامات برطرف شد.

  7. #7
    کاربر تازه وارد آواتار Arminizer_88
    تاریخ عضویت
    اردیبهشت 1385
    محل زندگی
    UAE-Dubai
    پست
    78
    ممنون.
    خیلی دوست داشتم مطالب کاملی بردارش بخونم.

  8. #8
    مرسی خیلی جالب و مفید بود

  9. #9
    کاربر تازه وارد
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    شیراز
    سن
    37
    پست
    39
    با تشکر از زحمتی که برای تهیه این مقاله کشیده اید:
    اما برنامه نویس می تواند با ایجاد تغییراتی در Connection String، برخی از خواص آن را به دلخواه تغییر دهد.
    آیا در این مورد می توانید بیشتر توضیح دهید؟
    با تشکر

  10. #10
    واضح گفته شده.
    Pooling دارای خواصی هست که قابلیت تنظیم اونها در Connection String وجود داره.
    مثلا تعداد Pooling ها و یا زمان Pooling و ...

    موفق باشید.

  11. #11
    کاربر دائمی آواتار mehrdad201
    تاریخ عضویت
    تیر 1386
    محل زندگی
    شمال ایران (مازندران)
    پست
    587
    عذر میخوام اقای راد -- اینکه فرمودید به صورت خودکار توسط پروایدرها انجام میشه...

    یعنی الان که ما برای اتصال به دیتابیس از sqlclient و پایگاه sql server استفاده می کنیم ، این تکنیک به صورت اتوماتیک مورد استفاده قرار میگیره ؟؟؟؟

    و در ضمن اگه از using استفاده کنیم آیا بازهم کانکشنی که در داخل using تعریف میشه در مخزن pool قرار داده میشه ؟!؟!؟!؟

  12. #12
    جواب هر دو سوالت مثبته.

  13. #13
    کاربر تازه وارد
    تاریخ عضویت
    خرداد 1384
    محل زندگی
    تهران
    پست
    90

    Smile

    نقل قول نوشته شده توسط mehdisiavashian مشاهده تاپیک
    با تشکر از زحمتی که برای تهیه این مقاله کشیده اید:
    آیا در این مورد می توانید بیشتر توضیح دهید؟
    با تشکر
    نقل قول نوشته شده توسط Behrouz_Rad مشاهده تاپیک
    واضح گفته شده.
    Pooling دارای خواصی هست که قابلیت تنظیم اونها در Connection String وجود داره.
    مثلا تعداد Pooling ها و یا زمان Pooling و ...

    موفق باشید.
    در صورت امکان نام این خاصیت ها را بیان کنید و مقادیر قابل اختیار برای هر یک را نام ببرید ، و یک مثال کلی بیاورید .
    با تشکر از مطلب بسیار مفید شما.

  14. #14

  15. #15

    نقل قول: همه چیز درباره ی Connection Pooling

    اولا تشکر از مقالتون
    ثانیا اینکه در Connection Pooling نگه می داره، خوب یه جورایی این سربار برای سرور محسوب می شه چون سرور مجبوره که از Resource هاش برای نگهداری Pool های ایجاد شده استفاده کنه.
    لطفا در این مورد هم توضیح بدین.

  16. #16

    نقل قول: همه چیز درباره ی Connection Pooling

    در واقع من سوال قبلیم رو اینطور اصلاح می کنم که آیا Connection ای که Close هستش سربار مصرف می کنه؟

  17. #17

    نقل قول: همه چیز درباره ی Connection Pooling

    خیر. سرباری نداره.

  18. #18
    کاربر دائمی آواتار محمدامین شریفی
    تاریخ عضویت
    شهریور 1386
    محل زندگی
    تهران - شیراز
    پست
    1,302

    Question نقل قول: همه چیز درباره ی Connection Pooling

    نقل قول نوشته شده توسط mehrdad201 مشاهده تاپیک
    عذر میخوام اقای راد -- اینکه فرمودید به صورت خودکار توسط پروایدرها انجام میشه...

    یعنی الان که ما برای اتصال به دیتابیس از sqlclient و پایگاه sql server استفاده می کنیم ، این تکنیک به صورت اتوماتیک مورد استفاده قرار میگیره ؟؟؟؟

    و در ضمن اگه از using استفاده کنیم آیا بازهم کانکشنی که در داخل using تعریف میشه در مخزن pool قرار داده میشه ؟!؟!؟!؟
    و همچنین coonection string رو در web.config یا app.cofig تعریف کنیم،از روش pooling استفاده کرده ایم.همین؟

  19. #19

    نقل قول: همه چیز درباره ی Connection Pooling

    نقل قول نوشته شده توسط aminsharifi67
    و همچنین coonection string رو در web.config یا app.cofig تعریف کنیم،از روش pooling استفاده کرده ایم.همین؟
    مهم اینه که Connection String در هر درخواست یکی باشه. Web.Config یا App.Config این مورد رو تضمین می کنند.

    موفق باشید.

  20. #20

    نقل قول: همه چیز درباره ی Connection Pooling

    دوستان در صورتي كه با SqlServer كار ميكنيد پيشنهاد ميكنيم ضمن اين كه ConnectionُString رو هميشه از WebConfig بخونيد از فضاي نام Microsoft.ApplicationBlocks.Data استفاده كنيد .
    همچنين بجاي ارسال Connection به متدهاي اين فضاي نام بهتر هست كه ConnectionString رو ارسال كنيد تا ديگه نگران Close و Pool كردن همچنين نگراني در مورد Performance نداشته باشيد.
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله Mostafa_Dindar : جمعه 13 آذر 1388 در 23:56 عصر دلیل: الصاق ضميمه

  21. #21

    نقل قول: همه چیز درباره ی Connection Pooling

    در LINQToSql هم باید از Connection Pooling استفاده کنیم یا این ویژگی رو داره؟

  22. #22

    نقل قول: همه چیز درباره ی Connection Pooling

    پست قدیم هست اما:
    یکی از معانی pool‌ گذاشتن کلیه سکه ها داخل یک کاسه جهت شرط بندی است. به این کار میگن یک کاسه کردن و روی هم ریختن. اینجا هم دقیقا به همین معنی کاربرد داره.


تاپیک های مشابه

  1. Connection Pooling
    نوشته شده توسط Mrs.Net در بخش دسترسی به داده ها (ADO.Net و LINQ و ...)
    پاسخ: 1
    آخرین پست: شنبه 12 آبان 1386, 00:42 صبح
  2. بستن Connection
    نوشته شده توسط Neda_Bagheri در بخش VB.NET
    پاسخ: 6
    آخرین پست: یک شنبه 23 اردیبهشت 1386, 15:40 عصر
  3. مشکل در connection
    نوشته شده توسط adhami در بخش ASP.NET Web Forms
    پاسخ: 4
    آخرین پست: سه شنبه 04 اردیبهشت 1386, 11:30 صبح
  4. درباره نحوه کارکرد *** connection
    نوشته شده توسط dr-h6666 در بخش توسعه وب (Web Development)
    پاسخ: 1
    آخرین پست: شنبه 19 اسفند 1385, 19:05 عصر
  5. مقاله : کارایی استفاده از Pooling در Connection
    نوشته شده توسط habedijoo در بخش VB.NET
    پاسخ: 0
    آخرین پست: یک شنبه 30 بهمن 1384, 09:47 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •