sql server شرح إجراءات مخزنة-نهاية الأيام




stored procedure mysql (16)

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

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

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

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

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


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


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

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

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

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


مجرد رمي نصيحي الصغير هنا. قبل SQL 2005 (ربما أبعد من ذلك) ، كانت SP أسرع. ومع ذلك ، يتم بالفعل تحسين SQL Server 2005 والإصدارات الأحدث ويتم تخزين الاستعلامات الخاصة بك أثناء الانتقال. في الواقع ، كان لدينا تطبيق ويب تم نقله إلى خادم SQL جديد. بدأ التطبيق عن طريق تشغيل تباطؤ للجميع. كان كل شيء يأخذ "3/4 من الثانية" أو 1 ثانية للتشغيل. ثم بدأت SQL في تجميع أكثر الاستعلامات استخدامًا وذهب كل شيء من بطيء إلى اشتعال سريع.

بالطبع ، لقد قمنا بتبديل الخادم بينما كان هناك الكثير من الأشخاص الذين يعملون عليه (وهو ما يفسر سبب بطئه في البداية). لكن ثق بي. SP لم تنته بعد. لديهم فقط استخدامات أخرى غير مرتبطة بالتطبيق.


انطلاقا من الأداء الباهت لهذا الموقع ، سأراهن أن عنق الزجاجة الرئيسي هو قاعدة البيانات.

لست مقتنعاً بأي طريقة أن LINQ 2 SQL ORM الذي يستخدمونه هو أسرع قليلاً من sproc.


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

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

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


يعتمد أيضاً على ما تقوم به الإجراءات المخزنة.

على سبيل المثال إذا كان الأمر كذلك

select a from b where x = y

ثم ربما يكون الإجراء المخزن مبالغة. ولكنني شخصياً أميل إلى استخدام procs المخزنة لإرجاع مجموعات نتائج متعددة ونتائج صفحات داخل قاعدة البيانات.

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

سيكون المشروع الجيد مع الإجراءات المخزنة دائمًا أفضل من أي مشروع رديء ، والعكس صحيح.



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

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

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

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

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

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


عند دمج SPs مع المنطق مع قاعدة البيانات نفسها ، يمكنك تحويل DB بشكل فعال إلى شيء أقرب إلى Application Server.

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


هل يمكن بالأحرى أن يعرف جيف أتوود أن الإجراءات المخزنة ستكون موجودة إلى الأبد وكانت تحاول فقط تحفيز التفكير والنقاش؟ أحب أن أعتقد أن ما يريد فعله حقاً هو كتابة مقال مقنع بعنوان "الإجراءات المخزنة التي تعتبر ضارة" :)


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

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


باه!

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

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

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

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


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

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

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

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


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


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

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

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





stored-procedures