سؤال

أنا أستخدم طبقة PDO الخاصة بـ PHP للوصول إلى البيانات في أحد المشاريع، وقد قرأت عنها وأرى أنها تتمتع بدعم فطري جيد لاتصالات قاعدة البيانات المستمرة.أنا أتساءل متى/إذا كان ينبغي علي استخدامها.هل سأرى فوائد الأداء في تطبيق ثقيل CRUD؟هل هناك جوانب سلبية يجب مراعاتها، ربما تتعلق بالأمن؟

إذا كان الأمر يهمك، فأنا أستخدم MySQL 5.x.

هل كانت مفيدة؟

المحلول

يمكنك استخدام هذا باعتباره "مجموعة قواعد" تقريبية:

نعم, ، استخدم الاتصالات المستمرة إذا:

  • لا يوجد سوى عدد قليل من التطبيقات/المستخدمين الذين يصلون إلى قاعدة البيانات، أي.لن يؤدي ذلك إلى 200 اتصال مفتوح (ولكن من المحتمل أن يكون خاملاً)، نظرًا لوجود 200 مستخدم مختلف مشتركين على نفس المضيف.
  • قاعدة البيانات تعمل على خادم آخر تقوم بالوصول إليه عبر الشبكة
  • يصل تطبيق (واحد) إلى قاعدة البيانات في كثير من الأحيان

لا, ، لا تستخدم الاتصالات المستمرة إذا:

  • يحتاج تطبيقك فقط إلى الوصول إلى قاعدة البيانات 100 مرة في الساعة.
  • لديك العديد من خوادم الويب التي تصل إلى خادم قاعدة بيانات واحد
  • أنت تستخدم Apache في وضع prefork.ويستخدم اتصالًا واحدًا لكل عملية فرعية، والتي يمكن أن تتزايد بسرعة كبيرة.(عبرPowerlord في التعليقات)

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

المشكلة في ذلك هي أنه في "التكوين الافتراضي"، يسمح MySQL فقط بـ 1000 "قناة مفتوحة" متوازية.بعد ذلك، يتم رفض الاتصالات الجديدة (يمكنك تعديل هذا الإعداد).لذلك، إذا كان لديك - على سبيل المثال - 20 خادم ويب يضم كل 100 عميل، ولكل واحد منهم إمكانية الوصول إلى صفحة واحدة فقط في الساعة، فسوف تظهر لك الحسابات البسيطة أنك ستحتاج إلى 2000 اتصال متوازي بقاعدة البيانات.هذا لن ينجح.

بالتالي:استخدمه فقط للتطبيقات التي تحتوي على الكثير من الطلبات.

نصائح أخرى

باختصار، تجربتي تقول أنه ينبغي تجنب الاتصالات المستمرة قدر الإمكان.

لاحظ أن mysql_ Close عبارة عن عملية عدم تشغيل (no-op) للاتصالات التي تم إنشاؤها باستخدام mysql_pconnect.وهذا يعني أنه لا يمكن للعميل إغلاق الاتصال المستمر حسب رغبته.سيتم إغلاق هذا الاتصال بواسطة خادم mysqldb في حالة عدم حدوث أي نشاط على الاتصال لمدة تزيد عن wait_timeout.لو wait_timeout هي قيمة كبيرة (على سبيل المثال 30 دقيقة) ويمكن لخادم MySQL db الوصول إليها بسهولة max_connections حد.في مثل هذه الحالة، لن يقبل mysql db أي طلب اتصال مستقبلي. هذا هو الوقت الذي يبدأ فيه جهاز النداء الخاص بك في إصدار صوت تنبيه.

من أجل تجنب الوصول max_connections الحد، واستخدام الاتصال المستمر يحتاج إلى موازنة دقيقة للمتغيرات التالية ...

  1. عدد عمليات اباتشي على مضيف واحد
  2. إجمالي عدد المضيفين الذين يقومون بتشغيل Apache
  3. متغير wait_timout في خادم قاعدة بيانات MySQL
  4. متغير max_connections في خادم قاعدة بيانات MySQL
  5. عدد الطلبات التي تخدمها عملية Apache واحدة قبل إعادة نشرها

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

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

المنظمة البحرية الدولية (IMO)، الإجابة الحقيقية على هذا السؤال هي ما يناسب تطبيقك بشكل أفضل.أنصحك بقياس تطبيقك باستخدام الاتصالات المستمرة وغير المستمرة.

ماجي نيلسون @ موجهة بشكل موضوعي نشرت حول هذا في أغسطس و روبرت سوارثوت قدمت مشاركة مصاحبة مع بعض الأرقام الصعبة.كلاهما يقرأ جيدًا.

برأيي المتواضع:

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

في 99% من الحالات، سيعمل الاتصال الوحيد غير المستمر الذي ينقطع في نهاية تنفيذ الصفحة بشكل جيد.

أما الـ 1% الأخرى من الوقت، فمن المحتمل ألا تستخدم PHP للتطبيق، ولا يوجد حل مثالي لك.

كنت سأطرح نفس السؤال ولكن بدلاً من طرح نفس السؤال مرة أخرى سأضيف بعض المعلومات التي وجدتها.

ومن الجدير بالذكر أيضًا أن ملحق mysqli الأحدث لا يتضمن حتى خيار استخدام اتصالات قاعدة البيانات المستمرة.

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

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top