سؤال

أنا أقتبس جزءًا من الإجابة التي تلقيتها سؤال آخر لي:

في عالم PHP/MySQL ، أود أن أقول إن الإجراءات المخزنة لا تتخيل

أود أن أعلم:هل هذا صحيح؟لماذا؟ولم لا؟

[عدل]أعني هذا كسؤال عام دون مراعاة حاجة محددة[/عدل]

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

المحلول

أقوم بتطوير وصيانة تطبيق PHP/MySQL كبير.هذه هي تجربتي مع الإجراءات المخزنة.

بمرور الوقت، أصبح طلبنا معقدًا للغاية.ومع كل المنطق الموجود في جانب PHP، قد تقوم بعض العمليات بالاستعلام عن قاعدة البيانات بأكثر من 100 استعلام قصير.

MySQL سريع جدًا لدرجة أن الأداء لا يزال مقبولاً، ولكنه ليس رائعًا.

لقد اتخذنا القرار في أحدث إصدار من البرنامج بنقل بعض المنطق إلى الإجراءات المخزنة للعمليات المعقدة.

لقد حققنا مكاسب كبيرة في الأداء نظرًا لأننا لم نضطر إلى إرسال البيانات ذهابًا وإيابًا بين PHP وMySQL.

أنا أتفق مع الملصقات الأخرى هنا على أن PL/SQL ليست لغة حديثة ويصعب تصحيحها.

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

نصائح أخرى

عند استخدام الإجراءات المخزنة مع MySQL، ستحتاج غالبًا إلى استخدام ملف mysqli واجهة في PHP وليس العادية mysql واجهه المستخدم.

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

تحتوي واجهة mysqli على وظائف للتعامل مع مجموعات النتائج المتعددة هذه، وظائف مثل mysqli_more_results و mysqli_next_result.

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

أنا عمومًا أبتعد عن الإجراءات المخزنة لأنها تضيف حملاً إلى قاعدة البيانات بنسبة 99٪ من الوقت، وهو أكبر عنق الزجاجة لديك.إن إضافة خادم PHP جديد لا يعد شيئًا مقارنة بنسخ قاعدة بيانات MySQL الخاصة بك.

هل لديك حاجة محددة في ذهنك مما يجعلك تفكر فيها؟تعتبر الإجراءات المخزنة أقل قابلية للنقل من لغة SQL "العادية"، ولهذا السبب عادةً لا يرغب الأشخاص في استخدامها.أيضًا، بعد أن كتبت جزءًا لا بأس به من PL/SQL، يجب أن أقول إن الطريقة الإجرائية لكتابة التعليمات البرمجية تضيف تعقيدًا وهي ليست حديثة جدًا أو قابلة للاختبار.قد تكون مفيدة في بعض الحالات الخاصة حيث تحتاج إلى التحسين، لكنني بالتأكيد سأفكر مرتين.جيف لديه آراء مماثلة.

هذا سؤال شخصي.

سأقوم شخصيًا بتضمين جميع الحسابات داخل PHP وأستخدم MySQL فقط كجدول.

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

لن أقول "الإجراءات المخزنة محظورة"، أود أن أقول "لا تستخدمها دون سبب وجيه".

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

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

من المحتمل أن يكون هناك رهاب من الإجراءات المخزنة مع mysql، ويرجع ذلك جزئيًا إلى عدم قوتها بشكل كبير (مقارنة بـ Postgresql وحتى MSSQL، فإن إجراءات mysqls المخزنة غير متوفرة إلى حد كبير).

على زائد:إنهم يجعلون التواصل معها من أكثر من لغة أسهل.

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

من الشائع استخدام ORM هذه الأيام، لكنني شخصيًا أعتقد أن ORM شيء سيء (سؤال:82882)

أعتقد أن استخدام الإجراءات المخزنة يمكن أن يقدم بعض التجريد في بعض التطبيقات، كما هو الحال في أي مكان تستخدم فيه نفس مجموعة كود SQL لتحديث أو إضافة نفس البيانات، يمكنك بعد ذلك إنشاء sproc save_user($attr..... ) بدلاً من تكرار نفسك في كل مكان.

متفق عليه أن بناء الجملة مشعر وإذا كنت معتادًا على MSSQL و oracle sprocs فهناك اختلافات يمكن أن تحبط.

يجب عليك أيضًا أن تدرك أن الإجراءات المخزنة لم تكن مدعومة في Mysql قبل الإصدار 5.0. http://dev.mysql.com/doc/refman/5.0/en/stored-routines.html تميل الإجراءات المخزنة أيضًا إلى أن تكون غريبة بعض الشيء في هذا التنفيذ.الآن بعد أن بدأ Mysql 5.1 في الظهور في البرية، أرى المزيد من الاستخدام للإجراءات المخزنة مع Mysql.

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

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