Реализация функциональности / кода непосредственно в системе базы данных - PullRequest
3 голосов
/ 09 октября 2008

Пакеты СУБД сегодня предлагают огромный набор функций помимо стандартного хранения и извлечения данных. Например, SQL Server может отправлять электронные письма, предоставлять методы веб-служб и выполнять код CLR, помимо прочих возможностей. Однако я всегда пытался ограничить объем обработки, выполняемой моим сервером базы данных, до максимально возможного объема хранения и извлечения данных по следующим причинам:

  • Сервер базы данных сложнее масштабировать, чем веб-серверы
  • Во многих проектах, над которыми я работал, сервер БД намного более загружен, чем веб-серверы, и, следовательно, имеет меньшую свободную емкость
  • Это потенциально подвергает ваш сервер базы данных атаке безопасности (например, веб-сервисам)

Мой вопрос: как вы решаете, сколько функциональности или кода должно быть реализовано непосредственно на вашем сервере баз данных по сравнению с другими серверами в вашей архитектуре? Какие рекомендации вы предлагаете людям, начинающим новые проекты?

Ответы [ 2 ]

4 голосов
/ 09 октября 2008

Я знаю, что Microsoft SQL Server и Oracle действительно активно используют хранимые процедуры для всего, что помогает инкапсулировать реляционную архитектуру и создает более процедурный интерфейс для разработчиков программного обеспечения, которые обычно не так легко пишут запросы SQL.

Но тогда половина вашей логики приложения написана на PL / SQL (или T-SQL или что-то еще), а другая половина написана на языке вашего приложения, Java или PHP или C # и т. Д. Администратор базы данных обычно отвечает за кодирование процедуры, и разработчики несут ответственность за все остальное. Никто не имеет видимости и доступа к полной логике приложения. Это приводит к замедлению разработки, тестирования и будущих изменений проекта.

Также инструменты разработки программного обеспечения, как правило, плохо подходят для хранимых процедур. Инструменты и лучшие практики для отладки, контроля версий и тестирования, похоже, отстают на 10-15 лет от уровня техники для языков приложений.

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

Возможно и в другом направлении зайти слишком далеко. Люди, которые предпочитают, чтобы приложение управляло данными, а не метаданными, и использовали такие конструкции, как Entity-Attribute-Value или Polymorphic Associations, попадают в неприятности. Позвольте базе данных управлять этим. Используйте ограничения ссылочной целостности (внешние ключи). Используйте транзакции.

0 голосов
/ 09 октября 2008

У поставщиков есть один набор лучших практик. Вы, однако, озвучиваете это.

Несколько лет назад я поддерживал Основной программный продукт . Major.

Они сказали: «База данных - это реляционное хранилище. Больше ничего». Люди на каждой пользовательской конференции спрашивали о хранимой процедуре, триггерах и прочей малярии.

Их архитектор был твердым. Как только вы уходите от обычного старого SQL, у вас появляется кошмар поддержки и обслуживания. Они сделали объектно-реляционное отображение из БД в свой продукт, а все остальное было в их продукте.

Это хорошо масштабируется. Несколько серверов приложений могут легко совместно использовать один сервер базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...