سؤال

أتذكر سماع أن عملية الاتصال في MySQL تم تصميمها لتكون سريعة جدًا مقارنة بـ RDBMSes الأخرى ، وبالتالي باستخدام مكتبة توفر تجميع الاتصالات (SqlalChemy) لن يساعدك في الواقع كثيرًا إذا قمت بتمكين تجمع الاتصال.

أيمتلك أى أحد خبرة فى هذا؟

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

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

المحلول

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

من الممكن أن يكون وقت اتصال MySQL سريعًا جدًا ، خاصة إذا كنت تتصل عبر مآخذ UNIX على نفس الجهاز. إذا كنت تستخدم تجمع اتصال ، فأنت تريد أيضًا التأكد من إعادة تدوير الاتصالات بعد فترة من الوقت لأن مكتبة عميل MySQL ستغلق الاتصالات الخاملة لأكثر من 8 ساعات تلقائيًا (في SqlalChemy ، هذا هو خيار Pool_reCycle).

يمكنك بسرعة القيام ببعض مقاعد البدلاء في تجمع الاتصال مقابل تطبيق SQLA عن طريق تغيير تنفيذ تجمع من قائمة Queuepool إلى Nullpool ، وهو تطبيق تجمع لا يجمع أي شيء بالفعل - إنه يربط ويفصل إلى حقيقي عندما يكون تم الحصول على اتصال Proxied وإغلاقه لاحقًا.

نصائح أخرى

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

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

إجابة مختصرة: تحتاج إلى قياس ذلك.

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

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

يسرع تجمع الاتصال في هذه الحقيقة أنه ليس لديك كائن Java.sql.connection في كل مرة تقوم فيها باستعلام قاعدة البيانات. يمكنني استخدام تجمع اتصال Tomcat في قاعدة بيانات MySQL لتطبيقات الويب التي تقوم بالكثير من الاستعلامات ، أثناء تحميل المستخدم العالي ، هناك تحسن ملحوظ في السرعة.

لقد قدمت خدمة مريحة بسيطة مع Django واختبرتها مع وبدون تجميع اتصال. في حالتي ، كان الفرق ملحوظًا تمامًا.

في LAN ، وبدون ذلك ، كان وقت الاستجابة ما بين 1 و 5 ثوان. معها ، أقل من 20 مللي ثانية. قد تختلف النتائج ، لكن التكوين الذي أستخدمه لخوادم MySQL & Apache هو انخفاض منخفض.

إذا كنت تقدم صفحات واجهة المستخدم عبر الإنترنت ، فقد لا يكون الوقت الإضافي ملحوظًا للمستخدم ، ولكن في حالتي كان غير مقبول ، لذلك اخترت استخدام حمام السباحة. آمل أن يساعدك هذا.

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