Книга: Обработка баз данных на Visual Basic®.NET
Повышение производительности приложений с помощью хранимых процедур
Разделы на этой странице:
Повышение производительности приложений с помощью хранимых процедур
Благодаря достоинствам платформы .NET многие разработчики стали полагаться на клиентскую часть приложения для реализации специализированных бизнес-правил. Хотя ASP-страницы на платформе .NET компилируются и выполняются быстрее, чем обычные ASP-страницы, все же для большинства организаций управление такой бизнес-логикой (или ее поддержка) остается достаточно сложным.
В большинстве случаев сервер базы данных оказывается недоступным для разработчиков, т.е. они не могут управлять количеством процессоров, размером оперативной и дисковой памяти, а также способом резервного копирования. Для большинства операций правильно сконфигурированный сервер базы данных является наименее требовательным к ресурсам компьютером. Ниже перечислены типичные рекомендуемые конфигурации компьютеров, которые могут использоваться для Web-сервера и сервера базы данных.
Компьютер | Спецификации |
---|---|
Web-сервер | Pentium 4, частота 800 МГц, 1 Гбайт оперативной памяти, массив RAID 5 дисков SCSI емкостью 18,1 Гбайт |
Сервер базы данных | Quad-Pentium 4 Xeon, частота 800 МГц, 4 Гбайт оперативной памяти ECC-RAM, массив RAID 5 дисков SCSI емкостью 72 Гбайт для базы данных и журналов регистрации транзакций, дополнительные сетевые платы и источники бесперебойного питания |
Часто для повышения производительности рекомендуется использовать хранимые процедуры. Вот что происходит при поступлении Web-запроса к базе данных.
1. Пользователь открывает Web-страницу, вводит данные, а затем передает их Web-серверу.
2. Web-сервер анализирует полученные данные и выполняет проверку и/или сбор данных, посланных пользователем.
3. Затем пользователю пересылается отклик, обычно в виде Web-страницы с уведомлением об успехе или неудаче запроса.
4. Пользователь продолжает работу с Web-приложением.
Основная задача заключается в том, чтобы сократить количество запросов к Web-серверу и не увеличивать размер Web-страниц. Ниже перечислены действия, которые выполняет компьютер при поступлении запроса.
1. От пользователя поступает запрос с некоторыми данными.
2. Имеют ли данные корректный формат? Если да, то поместить их в базу данных; в противном случае обработать возникшие исключительные ситуации.
3. Можно ли установить соединение с базой данных? Если да, то продолжить работу; в противном случае обработать возникшие исключительные ситуации.
4. Может ли база данных получить данные? Если да, то продолжить работу; в противном случае обработать возникшие исключительные ситуации.
5. Подключен ли клиент или уже нет? Если да, то послать отклик; в противном случае закрыть подключение к базе данных.
Очевидно, что Web-сервер должен выполнить множество операций, помимо обработки кода в Web-страницах. Более того, в предыдущих перечнях операций не учитывается возможность манипулирования создаваемыми объектами.
Попробуем теперь изменить код в листингах 11.1 и 11.2 для применения хранимой процедуры, предназначенной для возвращения данных Web-странице. Для этого нужно создать саму хранимую процедуру, которая, по сути, создает основу для двухуровневого приложения.
ВНИМАНИЕ!
При работе с любым приложением ASP.NET для сбора данных из формы нужно использовать метод Server.HTMLEncode(Request.Form("objectName")), который позволяет предотвратить межузловые атаки на основе сценариев. Этот метод кодирует информацию в виде строкового литерала, понятного SQL Server, что позволяет исключить риск применения злоумышленных операций, например вставки команды в виде подстроки "; TRUNСАТЕ TABLE MASTER" в текстовое поле txtFileName Web-страницы и выполнения ее со стороны SQLServer.
Некоторые разработчики опасаются использовать хранимые процедуры в Web-приложениях. Эти опасения вызваны сложностями использования объектов Command и SQLCommand в технологиях ADO и ADO.NET вместе с хранимыми процедурами. Как отмечается в главе 4, "Модель ADO.NET: провайдеры данных", указание параметров в коде необходимо для "предварительной квалификации" данных за счет установки их типа. При этом SQL Server и платформа .NET избавлены от излишних затрат времени на определение типа передаваемых данных (целое число, строка и т.д.). В данном примере рассматривается хранимая процедура без параметров, код которой показан в листинге 11.4.
НА ЗАМЕТКУ
С помощью типов, описанных в разделе о включении учетной записи ASPNET в список учетных записей SQL Server, необходимо конфигурировать роль public с указанием разрешения EXEC на выполнение процедуры. В листинге 11.4 показан код процедуры, а в листинге 11.5 — способ ее применения.
ЛИСТИНГ 11.4. Код процедуры sp_GetCustomersOrders
CREATE PROCEDURE sp_GetCustomersOrders
SELECT tblCustomer.LastName, tblCustomer.FirstName, tblOrder.OrderDate
FROM tblOrder
INNER JOIN tblCustomer ON tblCustomer.ID = tblOrder.CustomerID
ORDER BY tblCustomer.LastName
GO
Обратите внимание, что в запросе используются только действительно нужные а не все поля таблицы tblCustomer, как показано в листинге 11.3. Вообще говоря, никогда не следует запрашивать поля таблицы, которые не будут использоваться. Это особенно важно при расширении масштаба приложения.
Рассмотрим теперь измененный код подпрограммы ShowCustomers, который показан в листинге 11.5. Обратите внимание, что в него включена еще одна строка для обработки даты, возвращенной хранимой процедурой.
Листинг 11.5. Обращение к хранимой процедуре из подпрограммы ShowCustomers
Private Sub ShowCustomers()
' Это простой пример использования функции,
' которая извлекает данные из таблицы tblCustomer
' Инициализация объекта подключения строкой
' подключения.
Dim conn As New SqlConnection(connString)
' Затем инициализация объекта-команды строкой выполняемой команды SQL.
Dim с As New SqlCommand("exec sp_GetCustomersOrders", conn)
conn.Open()
Dim dReader As SqlDataReader = _
cmd.ExecuteReader(CommandBehavior.CloseConnection)
While dReader.Read
Response.Write(dReader.GetString(0))
Response.Write(" " & dReader.GetString(1))
Response.Write(" " & dReader.GetDateTime(2))
Response.Write("<BR>")
End While
dReader.Close()
conn.Close ()
End Sub
(Учтите, что для работы этого приложения в базу данных Novelty должна быть включена хранимая процедура sp_GetCustomersOrders, как описывается в главе 3, "Знакомство с SQL Server 2000". — Прим. ред.)
С помощью хранимых процедур, как правило, удается значительно повысить производительность работы Web-приложений с базами данных. Дело в том, что хранимые процедуры компилируются на сервере баз данных и выполняются гораздо быстрее по сравнению с динамически создаваемыми запросами. В листинге 11.1 команда SELECT должна интерпретироваться перед каждой операцией извлечения данных из базы данных SQL Server. Поэтому компилированные версии Web-страницы и хранимой процедуры выполняются гораздо быстрее. В аспекте повышения производительности эти особенности технологии ASP.NET и платформы .NET Framework являются их несомненным преимуществом.
- 1.22. Показ изображений с помощью UIImageView
- ЧАСТЬ 5 УДАЛЕННЫЙ ВЫЗОВ ПРОЦЕДУР
- Глава 17 Программирование в KDE с помощью Qt
- Доступ к документам Word с помощью VBA
- Программирование с помощью атрибутов
- Процедуры
- Глава 2 Кодирование информации с помощью систем счисления
- Сериализация объектов с помощью XmlSerializer
- Настройка Web-приложения ASP.NET с помощью Web.config
- 1.6. Реализация инструмента для выбора временных рамок с помощью UISlider
- 1.8. Группирование компактных параметров с помощью UISegmentedControl
- Тестирование Web-сервиса XML с помощью WebDev.WebServer.exe