Хранимые процедуры CLR

В приложении ASP.NET у меня есть небольшое количество довольно сложных, часто используемых операций для выполнения с базой данных. В этих операциях одна или несколько из нескольких таблиц нуждаются в обновлении или вставке на основе логической оценки как входных параметров, так и значений определенных таблиц. Я сохранил разделение логики и доступа к данным, поэтому сейчас операция выглядит так:

  1. Запрос получен от клиента
  2. Бизнес-уровень вызывает уровень данных для извлечения данных из базы данных
  3. Результат обработки бизнес-уровня и определение выполняемой операции.
  4. Бизнес-уровень вызывает соответствующую операцию с данными
  5. Ответ отправлен клиенту

Как видите, клиент ожидает, пока к базе данных будут сделаны два отдельных запроса. В поисках решения этой проблемы я нашел хранимые процедуры CLR, но я не уверен, правильно ли я понимаю, для чего они полезны.

Я написал замену приведенному выше коду, в котором шаги 2–4 особенно размещены в CLR SP. Насколько я понимаю, SP будет выполняться локально SQL Server и приведет к тому, что на сервер будет сделан только один вызов.

В основном мой вопрос: это предполагаемое использование CLR SP или я что-то упустил?

Я понимаю, что это своего рода структурный компромисс, поэтому, если есть лучший способ сделать это, я бы хотел его услышать.




Ответы (1)


Процедуры CLR предназначены для расширенной обработки запросов, где хранимой процедуре было бы очень сложно это сделать. Я столкнулся с очень немногими ситуациями, когда они были бы намного полезнее. Они не предназначены для работы на бизнес-уровне, хотя вы могли бы это сделать. Я бы не стал встраивать все в процедуру CLR; разделение слоев очень полезно в приложении. Если вам нужно ускорить свой код, ознакомьтесь с доступными профилировщиками памяти/кода, которые могут помочь вам определить проблемные места в вашем коде.

Когда это возможно, замените код на стороне сервера обратными вызовами AJAX, веб-сервисами и т. д., так как это действительно ускорит его (по крайней мере, позволит вам выполнять больше асинхронной работы).

ХТН.

person Brian Mains    schedule 22.03.2010