Общие предложения для платформы SQL 2005 \ Дизайн и реализация

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

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

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


И несколько однострочных для этих экспертных администраторов баз данных и программирования GURU:

  1. Являются ли VIEWs физически кэшированными в любом месте на сервере? Или они такие же, как типичная операция JOIN (в двух словах shud я продолжаю использовать JOINs среди таблиц или создавать VIEWs таких JOIN)

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

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

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

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

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

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

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

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