سؤال

لدي هذا الشك، لقد بحثت في الويب ويبدو أن الإجابات متنوعة.هل من الأفضل استخدام mysql_pconnect عبر mysql_connect عند الاتصال بقاعدة بيانات عبر PHP؟قرأت أن مقياس pconnect أفضل بكثير، ولكن من ناحية أخرى، كونه اتصالًا مستمرًا ...وجود 10000 اتصال في نفس الوقت، كلها مستمرة، لا يبدو قابلاً للتطوير بالنسبة لي.

شكرا لك مقدما.

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

المحلول

يجب أن تكون

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

وإجراء اتصال إلى قاعدة بيانات MySQL هو سريع مقارنة بتلك العلامات التجارية الأخرى، وذلك باستخدام الاتصالات المستمرة يعطي فائدة أقل نسبيا عن الخلية مما كان من شأنه لنوع آخر من قاعدة البيانات.

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

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

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


وتحديث مارس 2014:

والخلية سرعة الاتصال كانت دائما منخفضة بالمقارنة مع غيرها من العلامات التجارية من RDBMS، لكنه يحصل حتى أفضل.

http://mysqlserverteam.com/improving-connectdisconnect-performance/

<اقتباس فقرة>   

في الخلية 5.6 بدأنا العمل على تحسين رمز التعامل مع يربط ويفصل. وتسارع هذا العمل في الخلية 5.7. في هذا بلوق وظيفة وسوف تظهر لأول مرة النتائج التي حققناها ثم وصف ما قمنا به للحصول عليها.

وقراءة بلوق لمزيد من التفاصيل والمقارنات السرعة.

نصائح أخرى

وأساسا لديك لتحقيق التوازن بين تكلفة إنشاء اتصالات مقابل اتصالات حفظ. على الرغم من أن الخلية سريع جدا في إنشاء اتصال جديد، فإنه لا يزال يكلف - في موضوع وقت الإعداد، وفي TCP IP الوقت / الإعداد من خادم الويب الخاص بك. هذا هو ملحوظ على موقع عال بما فيه الكفاية حركة المرور. لسوء الحظ، PHP ليس لديها أي ضوابط على استمرار الاتصالات. هكذا كان الجواب على خفض مهلة الخمول في الخلية شوطا طويلا (مثل أسفل إلى 20 ثانية)، ويصل حجم ذاكرة التخزين المؤقت موضوع. معا، وهذا يعمل بشكل جيد عموما بشكل ملحوظ.

وعلى الجانب الآخر، يحتاج التطبيق الخاص بك لاحترام حالة الاتصال. فمن الأفضل إذا ما يجعل أية افتراضات حول ما تنص الدورة هي في حالة استخدام الجداول المؤقتة، ثم استخدام CREATE في حالة وجود NOT وباقتطاع TABLE يساعد كثيرا، وكذلك تسمية لهم فريد (مثل بما في ذلك حاليا). المعاملات هي قليلا أكثر تعقيدا. لكن التعليمات البرمجية الخاصة بك يمكن أن تفعل دائما التراجع في الأعلى، عادل في القضية.

من المستبعد جدًا أن تصل إلى 10000 اتصال.على أية حال، اذهب إلى مصدر رسمي.(التأكيد على الألغام).

إذا لم يكن لدى الاتصالات المستمرة أي وظائف إضافية ، فما هي جيدة؟

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

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

mysql_connect() و mysql_pconnect() كلاهما يعملان للاتصال بقاعدة البيانات ولكن مع اختلاف بسيط.في mysql_pconnect(), p لتقف على اتصال الثبات.

عندما نستخدم mysql_connect() الوظيفة، في كل مرة يتم فيها فتح وإغلاق اتصال قاعدة البيانات، حسب الطلب.

ولكن في حالة mysql_pconnect() وظيفة:

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

  • ثانيًا، لن يتم إغلاق الاتصال بخادم SQL عند انتهاء تنفيذ البرنامج النصي.وبدلاً من ذلك، سيظل الاتصال مفتوحًا للاستخدام المستقبلي (mysql_close() لن يتم إغلاق الاتصال الذي أنشأه mysql_pconnect()).

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

ماي إس كيو إل_كونيكت ()

1. يمكن استخدام mysql_connect لإغلاق الاتصال. في كل مرة يتم فيها فتح وإغلاق اتصال قاعدة البيانات، حسب الطلب.

2. يتم فتح قاعدة البيانات هنا في كل مرة يتم فيها تحميل الصفحة في اتصال MYSQL

3. عند تحميل الصفحة، يتم تحميل قاعدة البيانات في كل مرة

4. يتم استخدامه لإغلاق الاتصال

مثال:

<?php $conn = mysql_connect(‘host’, ‘mysql_user’, ‘mysql_password’); if(!$conn){ die(‘Could not connect: ‘ . mysql_error()); } echo ‘Connected successfully’; mysql_close($conn); ?>

وصف:

يستضيف:يحدد اسم مضيف أو عنوان IP مثل المضيف المحلي.

mysql_user:يحدد اسم مستخدم MySQL

كلمة المرور الخاصة بي:يحدد كلمة مرور MySQL

ماي إس كيو إل_PCONNECT()

1. نستخدم mysql_pconncet()، فهو يحاول في البداية العثور على اتصال مستمر مفتوح.

2.يفتح mysql_pconncet() اتصالًا مستمرًا

3. لا يدعم mysql_pconnect () الاتصال الوثيق

4.mysql_pconnect() لا يمكنه إغلاق الاتصال.هنا افتح اتصال دائم بقاعدة البيانات

5. لا يلزم أن تكون قاعدة البيانات هنا متصلة في كل مرة.

6. لا يلزم أن تكون قاعدة البيانات متصلة في كل مرة في mysql_pconncet().

المزيد من التفاصيل:http://prittytimes.com/difference-between-mysql_connect-and-mysql_pconnect/

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