บางทีมันสมเหตุสมผลแล้วที่จะหันคำถามไปรอบ ๆ และค้นหา usecases ที่กระบวนการจัดเก็บเท่านั้นที่สามารถทำได้สิ่งที่คุณต้องการบรรลุ อาจมีกรณีใช้งานจริงซึ่งขั้นตอนการจัดเก็บโดดเด่น
ถ้ามันสร้างความแตกต่างฉันกำลังใช้ MSSQL และ Entity Framework
ความรู้ของฉันเกี่ยวกับ EF มี จำกัด แต่เท่าที่ฉันสามารถเห็นได้ EF คือ ( เพียง ) ORM เหมือนอย่างอื่น และโชคดีที่มีความสามารถในการใช้SQL ดิบ
ถ้าฉันรับสองประเด็นสำคัญของคุณ:
รายงานที่ซับซ้อนซึ่งใช้เวลาไม่กี่นาทีในการเรียกใช้ (นี่คือหน้าเว็บในแอปพลิเคชัน) ฉันพบว่าฉันสามารถเขียน SQL ที่มีประสิทธิภาพมากขึ้น (ใช้เวลาเพียงไม่กี่วินาทีในการเรียกใช้) กว่าที่ LINQ จัดหาให้
LINQ / EFสั้นลงเมื่อทำรายงาน และอย่างที่คุณสังเกตเห็นว่ามันSQL
เร็วกว่าการใช้ ORM แต่พูดอย่างนี้ในความโปรดปรานของขั้นตอนการจัดเก็บหรือเพียงต่อต้านการใช้ORMสำหรับทุกสิ่ง?
ปัญหาของคุณได้รับการแก้ไขอย่างเห็นได้ชัดกับSQL ถ้าแบบสอบถามที่ได้รับการจัดเก็บและควบคุมรุ่นในหมวด codebase คุณ - ตามตัวอย่างของคุณ - อย่างน้อยไม่แตกต่างกัน
เว็บแอปพลิเคชันจำเป็นต้องอ่านและเขียนลงในตารางไม่กี่ตารางในฐานข้อมูลแยกต่างหากซึ่งมีข้อมูลที่ละเอียดอ่อนจำนวนมากซึ่งไม่เกี่ยวข้องกับแอปพลิเคชัน แทนที่จะให้สิทธิ์เข้าถึงทุกสิ่งฉันใช้กระบวนงานที่เก็บไว้ซึ่งทำสิ่งที่ต้องการเท่านั้นและส่งคืนข้อมูลที่ จำกัด เท่านั้น เว็บแอปพลิเคชันสามารถเข้าถึงขั้นตอนการจัดเก็บนี้เท่านั้นโดยไม่ต้องเข้าถึงตารางใด ๆ เป็นต้น
สิ่งเดียวกันที่นี่: สตริงการเชื่อมต่อที่ง่ายและและปรับปรุงและปัญหาของคุณจะทำ ปัญหานี้สามารถแก้ไขได้แม้กระทั่งกับออม :
เพียงแค่ใช้เว็บเซอร์ในด้านหน้าของอื่น ๆ DB และเดียวกันcompartementalization / แยกจะประสบความสำเร็จ
ดังนั้นไม่มีอะไรให้ดูที่นี่
ดูบางจุดที่คนอื่นทำ:
คุณมีหน่วยงานที่ซับซ้อนซึ่งอาจเกี่ยวข้องกับตารางจำนวนมากที่ไม่สามารถห่อหุ้มธุรกรรมได้อย่างง่ายดายโดยใช้คุณสมบัติของ EF
แต่SQL
สามารถทำได้ ไม่มีเวทมนตร์เกี่ยวข้องที่นี่
ฐานข้อมูลของคุณเล่นได้ไม่ดีกับ EF
อีกครั้ง: ใช้EFเมื่อเหมาะสม
คุณต้องทำงานกับข้อมูลที่ข้ามขอบเขตของเซิร์ฟเวอร์กับเซิร์ฟเวอร์ที่เชื่อมโยง
ฉันไม่เห็นวิธีการจัดเก็บช่วย ดังนั้นฉันไม่สามารถเห็นข้อดีของขั้นตอนการจัดเก็บ; แต่บางทีอาจมีบางคนให้ความกระจ่างในเรื่องนั้น
คุณมีสถานการณ์การดึงข้อมูลที่ซับซ้อนมากซึ่งจำเป็นต้องมี SQL "metal metal" เพื่อให้แน่ใจว่ามีประสิทธิภาพเพียงพอ
อีกครั้ง: "ขอบเขตของEF "
แอปพลิเคชันของคุณไม่มีสิทธิ์ CRUD เต็มรูปแบบบนโต๊ะ แต่แอปพลิเคชันของคุณสามารถได้รับอนุญาตให้ทำงานภายใต้บริบทความปลอดภัยที่เซิร์ฟเวอร์ของคุณเชื่อถือ
ตกลง. ฉันไปด้วยบางที
จนถึงจุดครึ่งเดียวที่ทำในความโปรดปรานของขั้นตอนการจัดเก็บ
อาจมีข้อควรพิจารณาเกี่ยวกับประสิทธิภาพการทำงานซึ่งเป็นประโยชน์ต่อกระบวนการจัดเก็บ
1) การจัดเก็บเคียวรีมีข้อดีของการเรียกไปยังโพรซีเดอร์ที่เก็บแบบง่ายซึ่งสรุปความซับซ้อน เนื่องจากตัววางแผนคิวรีรู้จักการสืบค้นจึงเป็น "การเพิ่มประสิทธิภาพ" ที่ง่ายขึ้น แต่การบันทึกจะอยู่กับตัวสร้างคิวรีที่ซับซ้อนในปัจจุบัน _minimal
ยิ่งไปกว่านั้นแม้ว่าจะมีค่าใช้จ่ายเล็กน้อยในการใช้คำสั่งเฉพาะกิจหากข้อมูลของคุณมีโครงสร้างที่ดีและมีการจัดทำดัชนีอย่างระมัดระวังฐานข้อมูลเป็นเพียงคอขวดของแอปพลิเคชันของคุณ ดังนั้นแม้ว่าจะมีเดลต้าขนาดเล็กก็ไม่สามารถพิจารณาปัจจัยอื่น ๆ ได้
2) อย่างไรก็ตามมันถูกถกเถียงกันในการจัดเก็บแบบสอบถามที่ซับซ้อนในฐานข้อมูล มีสองสิ่งที่ควรพิจารณา:
ก) ข้อความค้นหาที่ซับซ้อนทำให้การใช้งานโครงสร้างพื้นฐาน DB เป็นจำนวนมากซึ่งช่วยเพิ่มเวลาในการค้นหาแบบสอบถามอื่น ๆ คุณไม่สามารถเรียกหลายค่าใช้จ่ายแบบสอบถามในแบบคู่ขนาน นี้พูดไม่โปรมิได้contraวิธีการจัดเก็บ แต่กับความซับซ้อนแบบสอบถาม
b) หากแบบสอบถามใช้เวลานานทำไมต้องรำคาญกับความเร็วขนาดเล็กที่ชนะของกระบวนงานที่เก็บไว้
TL; DR
ไม่มีอะไรพูดโดยตรงกับวิธีการจัดเก็บ ดังนั้นการใช้ขั้นตอนการจัดเก็บก็โอเค - ถ้ามันทำให้คุณมีความสุข
แต่ในอีกแง่หนึ่ง: ฉันไม่สามารถจินตนาการถึงกรณีการใช้งานที่เหมาะสมซึ่งพูดอย่างมืออาชีพ
ฉันควรใช้ขั้นตอนการจัดเก็บเมื่อใด
คำตอบที่ถูกต้องคือเมื่อใดก็ตามที่คุณต้องการ แต่มีตัวเลือกอื่น ๆ