اذهب إلى المحتوى
  • 0

هل Connection pooling مهمة لقاعدة البيانات ؟

Samer Alashqar

السؤال

Recommended Posts

  • 0

1.jpg.05721d9eff0b7313cab6651d84455a33.jpg

تقنية الـ Connection pooling يمكنك تشبيهها ببركة  تحتوي على مجموعة من الاتصالات  بقاعدة البيانات مفتوحة وجاهزة للاستخدام المتكرر  ( ولنفترض 10)  والفائدة من ذلك توفير الوقت الذي يكون مابين اغلاق الاتصال و فتحه مرة أخرى لعملية أخرى.

بذلك وعند نفاذ كمية الاتصالات من البركة (اي ان هناك عدد معين من المستخدمين في نفس الوقت  يستخدمون جميع قنوات الاتصال في هذه البركة ) يتم اضافة اتصال آخر بشكل اوتوماتيكي ( ليصبح مثلا 14 اتصال  داخل البركة )  وعند الانتهاء يرجع للعدد الطبيعي (10)  ويتم غلق هذه الاتصالات.

تعد تقنية Connection pooling مفيدة جدًا في تحسين أداء قاعدة البيانات، حيث يمكنها تقليل عدد الاتصالات التي يتم إجراؤها بشكل متكرر مع قاعدة البيانات، وبالتالي توفير استجابة أسرع للطلبات.

يمكنك استخدام connection pooling مع Mongoose عن طريق تحديد خيار poolSize في URI الخاص بالاتصال بقاعدة البيانات. يمكنك إضافة "poolSize={pool size}" إلى URI الخاص بالاتصال بقاعدة البيانات. على سبيل المثال، يمكنك استخدام

mongodb://{user}:{password}@localhost:{port}/{db_name}?poolSize=5

لتحديد حجم حوض الاتصال الذي ترغب في استخدامه. 

أحد أهم عيوب Connection pooling هو أنه يستهلك ذاكرة كبيرة، خاصةً إذا كان هناك عدد كبير من الاتصالات المفتوحة في نفس الوقت. ومن بين المزايا التي يوفرها هذه التقنية هو تحسين أداء قاعدة البيانات وزيادة سرعة استجابتها.

للتعمق اكثر يمكنك الاطلاع على هذا المقال بالانجليزية.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

تعمل تقنية Connection Pooling على تحسين أداء التطبيقات التي تتعامل مع قواعد البيانات أو أي مصدر بيانات يتطلب اتصال مستمر. يتم استخدامها للتخفيف من التأخير الناجم عن إعادة إنشاء الاتصال بشكل متكرر ومكلف.

في الأساس، يقوم Connection Pooling بإنشاء مجموعة (بول) من الاتصالات الجاهزة مع قاعدة البيانات أو المصدر البيانات الآخر. يتم إعداد هذه الاتصالات مسبقًا ويتم الاحتفاظ بها في الذاكرة. عندما يحتاج التطبيق إلى اتصال بقاعدة البيانات، يتم استعارة اتصال من المجموعة (بول) بدلاً من إنشاء اتصال جديد.

الاستفادة من Connection Pooling تتمثل في:

  • تحسين الأداء: بدلاً من إنشاء اتصال جديد في كل طلب إلى قاعدة البيانات، يتم استخدام اتصال جاهز من المجموعة. هذا يقلل من الوقت المستغرق في إنشاء الاتصال وتحسين استجابة التطبيق.
  • إدارة الاتصالات: يتم تجنب مشاكل الحد الأقصى لعدد الاتصالات المسموح بها والتحكم في توزيع الاتصالات على المجموعة. هذا يساعد على تجنب ارتفاع أعداد الاتصالات وضمان الكفاءة والاستقرار.
  • توفير الموارد: بدلاً من استهلاك موارد كبيرة لإنشاء اتصال جديد في كل مرة، يمكن استخدام الموارد بشكل أكثر فعالية عن طريق إعادة استخدام الاتصالات الموجودة في المجموعة.

يمكن تنفيذ Connection Pooling على مستوى اللغة المستخدمة أو باستخدام مكتبة أو إطار عمل محدد. يعتمد ذلك على تكنولوجيا التطبيق الخاص بك والأدوات المستخدمة. تو

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

عند الرغبة في استخدام تقنية معينة، يجب المفاضلة بين المزايا والعيوب التي تأتي بها، حيث تُستخدم تقنية تجميع الاتصالات (Connection Pooling) في برمجة الحواسيب لإدارة مجموعة من اتصالات قاعدة البيانات يمكن إعادة استخدامها من قبل العملاء أو التطبيقات المختلفة.

بدلاً من إنشاء اتصال جديد بقاعدة البيانات في كل مرة يحتاج فيها العميل إلى التفاعل مع قاعدة البيانات، وتسمح تجميع الاتصالات باستخدام الاتصالات الحالية، مما يؤدي إلى تحسين الأداء والكفاءة.

وإليك بعض فوائد استخدام تجميع الاتصالات:

1- إنشاء اتصال جديد بقاعدة البيانات يستغرق وقتًا طويلاً، حيث يتضمن تكاليف الشبكة والمصادقة. بواسطة تجميع الاتصالات، يتم إنشاء الاتصالات مسبقًا ويتم الاحتفاظ بها في مجموعة جاهزة لإعادة الاستخدام من قبل العملاء المختلفين، مما،يقلل ذلك من تكلفة إنشاء وإغلاق الاتصالات، مما يؤدي إلى تحسين استخدام الموارد.

2- إعادة استخدام الاتصالات الحالية يحل محل الحاجة إلى إنشاء اتصال جديد لكل عملية في قاعدة البيانات، مما يؤدي إلى زمن استجابة أسرع، ويتم تجنب تكاليف الاتصال مثل تأخير الشبكة وعملية المصادقة، مما يتيح للتطبيقات تنفيذ استعلامات قاعدة البيانات بكفاءة أعلى.

3- يتيح تجميع الاتصالات استخدام الموارد الخاصة باتصال قاعدة البيانات بكفاءة، مما يسمح للعملاء أو التطبيقات المختلفة بمشاركة عدد محدود من الاتصالات، ويساعد ذلك في إدارة الأحمال العالية ويضمن عدم استنفاد الاتصالات، مما يعزز قابلية توسع النظام.

4- يوفر تجميع الاتصالات آليات مدمجة لإدارة الاتصالات، مثل التحقق من الاتصال، وانتهاء الصلاحية للاتصالات الخاملة، وإعادة تدوير الاتصالات التي قد تكون غير صالحة أو تسبب مشاكل، وتضمن تلك الميزات أن الاتصالات في حالة صحية، وتمنع الاتصالات من البقاء خاملة لفترات طويلة، وتعيد استخدام الاتصالات التي قد تكون قديمة أو تسبب مشاكل.

وعلى الرغم من فوائدها، إلا أنه هناك سلبيات في تجميع الاتصالات أيضًا:

1- تحتوي مجموعات الاتصال على حد أقصى لعدد الاتصالات التي يمكن أن تحتويها، فإذا تجاوز عدد العملاء المتزامنين هذا الحد الأقصى، قد يكون من الضروري إنشاء اتصالات جديدة، مما يؤثر على الأداء. يُعد تكوين حجم مجموعة الاتصال بشكل صحيح مهمًا لضمان الأداء المثلى وتجنب التضارب في استخدام الموارد.

2- يتطلب الاحتفاظ بمجموعة من الاتصالات موارد ذاكرة على خادم التطبيق، فإذا تم تعيين حجم المجموعة بشكل كبير جدًا، فقد يستهلك ذلك ذاكرة زائدة، مما قد يؤثر على الأداء العام للنظام، وإيجاد التوازن المناسب بين حجم المجموعة والموارد المتاحة في النظام أمر مهم.

3-  في بعض الحالات، يمكن أن تصبح الاتصالات في المجموعة قديمة أو مفصولة بسبب مشاكل في الشبكة أو إعادة تشغيل خادم قاعدة البيانات أو أسباب أخرى، ويجب أن تتضمن آليات تجميع الاتصالات عمليات التحقق والاختبار للتأكد من صحة الاتصالات قبل إعادة استخدامها، وإلا، قد يؤدي استخدام الاتصالات القديمة إلى حدوث أخطاء وسلوك غير متوقع.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

سأشرح لك بسيطًا ما هو ال Connection Pooling وكيف يعمل. 

عندما تريد تطبيقًا يتصل بقاعدة البيانات، يحتاج الى ان يفتح Connection او اتصال، وعند انهاء العمل يجب اغلاق الاتصال. ولكن الفتح والاغلاق المستمر للاتصال يستهلك الكثير من الموارد والوقت. 

هنا يأتي دور Connection Pooling، فهو يقوم بإنشاء مجموعة من الاتصالات المسبقة وجاهزة للاستخدام، وعندما يحتاج التطبيق الى انشاء اتصال مع قاعدة البيانات، يقوم بسحب اتصال من المجموعة واستخدامه، ثم يعيده الى المجموعة بعد الانتهاء من الاستخدام. 

بهذه الطريقة، يتم تجنب الحاجة الى فتح واغلاق الاتصال المستمر ويتم تحسين أداء التطبيق. 

هذا مثال بسيط باستخدام Node.js ومكتبة pg للتواصل مع قاعدة البيانات PostgreSQL:

const { Pool } = require('pg');

// إنشاء Pool وتكوينه
const pool = new Pool({
  user: 'your_user',
  host: 'your_host',
  database: 'your_database',
  password: 'your_password',
  port: 5432,
  max: 20, // الحد الأقصى لعدد الاتصالات في المجموعة
  idleTimeoutMillis: 30000, // الحد الأقصى لعدد الوقت الذي يتم فيه الاتصال الخامل
  connectionTimeoutMillis: 2000, // الحد الأقصى لعدد الوقت الذي يستغرقه الاتصال لإرجاع النتيجة
});

// استخدام Pool في الاستعلام عن قاعدة البيانات
pool.query('SELECT * FROM users', (err, res) => {
  console.log(err, res);
  pool.end(); // أغلق ال Pool عند الانتهاء من الاستخدام
});

بهذا الشكل، يتم إنشاء Pool وتكوينه مرة واحدة، ثم يتم استخدامه في الاستعلامات دون الحاجة إلى فتح وإغلاق الاتصال في كل مرة. 

أتمنى أن يكون ذلك واضحًا بالنسبة لك، وإذا كان لديك أي أسئلة أخرى، فلا تتردد في السؤال! 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...