Запуск управляемого кода в SQL Server 2008 - есть проблемы? - PullRequest
1 голос
/ 29 июля 2010

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

В частности, я хочу реализовать хеш-библиотеку SHA256 и выполнить ее как sproc с SQL Server 2008.

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

Плюсы / минусы?

Спасибо.

1 Ответ

2 голосов
/ 30 июля 2010

SQLCLR довольно быстрый. Используйте его, если вам необходимо выполнить код CLR в T-SQL. Например, скажем, вы пишете функцию SQLCLR с подписью:

SqlString Hash(SqlString input)

и вам все удается, как и должно. Вы можете выполнить следующий запрос:

IF EXISTS(SELECT * FROM Users WHERE HashedPassword = dbo.Hash(@userPassword) AND UserName = @userName)
BEGIN
    SELECT 'You''re alright, Jack.';
END
ELSE
BEGIN
    SELECT 'Bogus.';
END

Если вам удастся хэшировать поле гипотетического пароля в вашем приложении, лучше сделать это в приложении и передать хешированное значение в SQL Server для выполнения запроса, подобного следующему:

SELECT *
FROM User
WHERE UserName = @userName AND HashedPassword = @hashedPassword

Это лучше по нескольким причинам:

  1. Вы не помещаете бизнес-логику в SQL Server, где будет сложно протестировать.
  2. Сам запрос гораздо менее сложен, поэтому SQL Server будет выполнять меньше работы и, следовательно, будет быстрее.
  3. Установка SQLCLR может быть проблемой (SQLCLR по умолчанию выключен). Развертывание ваших сборок в SQL Server может быть проблематичным, особенно если у вас нет прямого доступа к производственному серверу.
  4. Если вы не используете SQLCLR, при обновлении / развертывании приложения вам не нужно будет обновлять / развертывать компоненты CLR в SQL Server. Это уменьшает ваши усилия по обслуживанию.
...