sql-server - شرح - stored procedure mysql




إجراءات مخزنة-نهاية الأيام (14)

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

هذا هو ما هي طبقة الخدمة!

يذهب منطق الأعمال في طبقة الخدمة ، وينطبق منطق التطبيق في موقع التطبيق / الموقع.

من الصعب جدًا تصحيح مئات المراتب الخاصة (SPS) والحفاظ عليها (خاصةً إذا كانت موجودة) أكثر من الحفاظ على كود مكتوب بشكل جيد يتحدث إلى DB عبر أداة ORM.

أنا أستمع إلى Hanselminutes Podcast؛ "يستخدم StackOverflow ASP.NET MVC - Jeff Atwood وفريقه التقني". خلال مسار بودكاست يتحدثون عن خادم SQL ويقولون شيئا على غرار "أيام الإجراء المخزن انتهى".

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


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

غوغل هذا المنصب العظيم.


باه!

ORM، SPs، View، Magic Wands أو أيا كان.

لكل "أداة" مكانها في حزامك ، استخدم الأدوات التي لديك بحكمة.

الشيء الوحيد الذي "تغير" (تحسنت حقا) هو أن بعض ORMs لديها أدوات التخزين المؤقت لطيفة بالفعل في و MySql و Sql 2005 + يمكن التعامل مع التخزين المؤقت ديناميكي أو خطة الاستعلام / التنفيذ المؤقت.

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


بعض النقاط الجيدة تجعل من كلا الجانبين (كما كانت) ولكن لا أحد قد جعل الكثير من الآثار الضمنية. ويعني إلغاء كل تفاعل DB في SPs أنه يمكنك قفل DB بحيث يمكن التحكم في أي تفاعل مع البيانات بإحكام.

إذا كنت تفكر في التغليف ، فيمكنك اعتبار DB كائنًا و SPs كطرق وخصائص تعرض وظائف الكائنات للعالم الخارجي.

في بعض بيئات التطوير الأكبر ، لا يُسمح لمطوري طبقة واجهة المستخدم وقطاع الأعمال بالقرب من DB. يحددون متطلباتهم ويوفر الفريق المنفصل والواجهة عبر SPs.

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


تعتبر procs المُخزنة مفيدة للأشياء التي ليست CRUD - مثل المنطق المتخصص عبر الطاولة الذي يتم تنفيذه بشكل أفضل في DB. يجب ألا تستخدم عمليات CRUD SPs إلا إذا كانت هي المخرجات التي تم إنشاؤها تلقائيًا لأداة ORM مثل TableAdapters.


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

ويمكن أيضا أن تعتبر وظيفة للهندسة المعمارية. يتطابق SPs imho بشكل جيد مع التطبيق الكلاسيكي القائم على الجدول ، ويمكن أن يوفر طريقة ملائمة لمعمارية طبقة تجريد على مستوى كائنات الأعمال.

انهم ليس من السهل جدا إذا كان مخزن البيانات الخاص بك هو XML ، أو قاعدة بيانات تحليلية.


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

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

إذا كانت قاعدة البيانات الخاصة بك تخدم العديد من التطبيقات المختلفة ، فقد لا تزال ترغب في استخدام الإجراءات المخزنة لفرض قواعد العمل بين التطبيق.


قد أضيف أنه من الأفضل القيام ببعض الأعمال على مستوى DB.
على سبيل المثال نتائج التبويب عبر في SQL 2005 ، استعلامات متكررة.

أوافق على أن بعض الأشياء البسيطة مثل SELECT و INSERT و UPDATE و DELETE يمكن الاعتناء بها من قبل ORM و Linq.

لذا ، فمن الغباء أن أقول إن أيام الإجراءات المخزنة قد انتهت.
كم من الناس حقا أن تقلق بشأن التغييرات منصة DB (SQL ل Mysql ، أوراكل)؟


من المحتمل أن تكون SPS هي الطريق المناسب إذا كنت قلقًا بشأن السرعة فقط. ولكن إذا كنت تهتم بالقابلية للتطوير أو الصيانة ، فقد لا تكون SPs هي الأفضل. بنيت بنيتنا على SPs وبعد 10 سنوات من التعليمات البرمجية ، من الصعب جداً الحفاظ عليها وعربات التي تجرها الدواب جداً. قد يكون مخطط خرائط ORM جيدًا اختيارًا أفضل.



يبدو أن ORM و LINQ إلى SQL هما الاتجاهان الحاليان لاستبدال StoredProcs.

أنا شخصيا قد استخدمت ORM وتجد أنه أسهل بكثير للحفاظ على ودعم.

بعض الأسباب المذكورة لاستخدام procs تخزينها حيث لا تبدأ أبدا الأسباب الشرعية.

تقوم بإجراء نقطة جيدة حول وجود إجراءات مخزنة عند خدمة تطبيقات متعددة؛ تصبح أساسا DAL ، عادة مع بعض منطق الأعمال هناك.


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


إمكانية الشراء. من المحتمل أن تكون SPs أفضل. إذا كان الحفاظ على hundres من SPs صعبًا ، فإن الحفاظ عليها في مكونات الطبقة التجارية يكون أصعب.

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

تصحيح قد يكون من السهل إلى حد ما مع SPs من تصحيح الطبقة tier + db الطبقة وضعت معا.

يمكن أن يكون هناك المزيد من النقاط + ve باستخدام SPs.

ولكن بالنظر إلى الاتجاه الحديث للبرمجة ، فإنه من "الحكمة" بدلاً من الذهاب إلى العمارة "N" لفترات طويلة من العمل ، بدلاً من التمسك بمقاربة "SP" القديمة.

يجب أن يكون النظام الجيد مزيج من الاثنين معا. ربما بعد 80-20 مبدأ ، 20 يجري SP.


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

بالإضافة إلى ذلك ، فإن بعض عمليات DB ستكون أكثر فعالية على الخادم بدلاً من الرجوع للخلف عبر الشبكة ، esp. عند استدعاء إجراء مخزن واحد آخر يستدعي آخر الخ (مع أو بدون المؤشرات)

EDIT: في بنية SOA ، يتم تخفيف مشكلة تحديث التطبيق-العميل-العميل (بفضل maud-dib) ، ولكن الإجراءات المخزنة التي تدعو إلى بعضها البعض لا تزال أكثر كفاءة من الرحلات المتعددة عبر الشبكة إلى طبقة SOA. وتحديث طبقة الخدمية ليس دائما تافها.







stored-procedures