2009-11-03 2 views
0

Я обновляю существующее веб-приложение ASP.Net с полнофункциональной функциональной базой SQL 2005 в качестве ее бэкэнд. Полнофункциональным функционалом я имею в виду, что есть много вещей (фактически почти ВСЕ операции CRUD), которые обрабатываются из БД с использованием SP.Общие предложения для SQL 2005 Framework Дизайн и реализация

Итак, мой первый вопрос заключается в том, что широкое использование SP полезно на основе таких параметров, как производительность, масштабируемость и безопасность? Я также прошу это в сравнении с последними вещами, как LINQ к SQL, каркасы Динамический генератор запросов, как NHibernate, и т.д ..

БД будет обрабатывать несколько миллионов записей в каждой таблице, мы» ве в обширны подстановках/связывающий процесс (я планирую использовать представления для него) Итак, беспокоит то, что стоит сохранить реализации «Crud» в СП - , очевидно, это также тащит некоторые проверки и бизнес-ограничения в SP-слой (я пытаюсь до минимизировать его), но все же, если его стоит эти три основных параметра - производительность, масштабируемость и безопасность компромисс доступен.


И несколько однострочечников для тех экспертов АБДА и ГУРУ программирования:

  1. кэшируются физически @ МНЕНИЯ любого места на сервере? Или они так же, как типичная операция JOIN (В двух словах изгоняюсь я по-прежнему с использованием JOIN и между таблицами или создать МНЕНИЯ таких соединений)

  2. Г-SQLs через EXEC ценность по сравнению с скомпилированным SQL в СП? Я имею в виду, что они обеспечивают большую гибкость, но тогда вся польза от «скомпилированного SQL» разрушена? Это значительно уменьшает сложность, но это влияет на производительность \ безопасность (т. Е. SQL-инъекцию и т. Д.) В обратном направлении?

  3. Рамочный уровень: Shud CRUD операция пребывания в SP или сделать некоторые рамки обещают лучший компромисс, перетащив их в приложение (то есть LINQ-to-SQL, nHibernate и т. Д.) .. снова я считаю, что этот момент также связан с №2.

  4. Учитывая все объяснения, которые я представил, какая структура предпочтительна для моих веб-приложений? Backend - это SQL Server 2005+.

Любые дополнительные творческие трюки приветствуются. Спасибо, что поделились своими знаниями.

+0

Возможно, вам придется разбить это на несколько вопросов. Если необходимо, вы можете связать вопросы. –

ответ

1

Что касается «преимуществ» хранимых процедур по специальным запросам - в Интернете много статей. Хорошими примерами являются here и here.

Производительность запроса/SP зависит исключительно от плана выполнения на SQL-сервере. План выполнения создается во время первого вызова на основе статистики SQL Server и кэшируется как для SP, так и для специальных запросов. Итак, чтобы подвести итог, я бы сказал, что нет разумных преимуществ использования SP.

Одним из самых больших недостатков СП является ремонтопригодность. С помощью SP вы вынуждены перемещать по крайней мере часть своей бизнес-логики на уровень базы данных. SQL не является структурированным языком, и ужасно поддерживать там сложную бизнес-логику.

Поэтому я являюсь «последователем» подхода «без SP». Разработка программного обеспечения не должна быть ориентирована на базу данных, а ориентирована на код. Благодаря хорошей структуре ORM вы можете создать действительно поддерживаемый и ортогональный компонент бизнес-уровня.

+0

Спасибо. Whoa .. означает ли это, что SQL-сервер рассматривает оператор SP и SQL как одинаковым образом (т.е. esp для компиляции и создания \ сохранения плана выполнения) Производительность была отличным фактором для рассмотрения SP, но теперь кажется, что гибкость, предоставляемая динамическим SQL, перекрывает его. Pls подтверждает. –

+0

Да, параметризованный SQL хэшируется и сравнивается с предварительно скомпилированным планом выполнения после того, как сервер видел этот запрос более одного раза. Все последующие использования предварительно скомпилированы. Единственный недостаток - это немного больше данных, отправленных по проводу в первоначальном запросе .. например, «SELECT * .. [еще 500 символов]» против «MyStoredProc (param1, param2)» –

Смежные вопросы