|
Программирование >> Программирование баз данных
Приложение Б Обеспечение связи Очевидно, что эксплуатация каких-либо приложений, в которых используются данные из базы данных SQL Server, без создания соединений непосредственно с базой данных абсолютно невозможна. 1Сак правило, сами разработчики подключаются к базе данных в программе Management Studio и выполняют в ней необходимые запросы, однако подавляющее большинство пользователей любых приложений никогда фактически не получают прямой доступ к базе данных; им предоставляется лишь возможность работать с окнами ввода и формирования отчетов в приложении, написанном разработчиком. С учетом сказанного, по-видимому, имеет смысл разобраться в том, каким образом приложения фактичес1си взаимодействуют с базой данных. Исключительно этой теме посвящено очень много книг (к тому же, не считая описания простого соединения, сама тематика обеспечения взаимодействия с базой данных является очень обширной), поэтому в настоящем приложении будут приведены только самые основные сведения. Еще раз отметим, что приведенные здесь примеры демонстрируют только самые основные действия. В процессе решения задачи обеспечения взаимодействия с базой данных могут использоваться очень многие варианты и способы оптимизации. Безусловно, в самих примерах кода даны пояснения, касающиеся наиболее важных вопросов, но это лишь код, а не подробное описание. Поэтому автор настоятельно рекомендует дополнительно ознакомиться с книгой, посвященной исключительно проблемам обеспечения взаимодействия с базой данных. Некоторые общие понятия Прежде чем приступить к изучению кода, необходимо разобраться в некоторых наиболее важных понятиях. В процессе развития средств взаимодействия с базой данных было создано несколько различных моделей обеспечения связи, в том числе OLE-DB, ODBC, а также, безусловно, ADO. В наши дни наиболее широко применяется модель обеспечения связи ADO.NET. Но поскольку не исключено появление нововведений в этой области, не следует удивляться тому, что ко времени выхода следующей версии SQL Server будет предложена еще одна, новейшая модель. Таким образом, различные объектные модели обеспечения связи сменяют друг друга, но некоторые концепции остаются актуальными для каждой объектной модели. Ниже приведены краткие определения основных концепций. Соединение. Объект соединения в основном не требует пояснений. Это - объект, который определяет характеристики подключения и непосредственно выполняет подключение к базе данных. Объект соединения содержит информацию о таких параметрах, как имя пользователя, пароль, база данных и сервер, к которому должно быть выполнено подключение. В объекте соединения, как правило, реализованы методы наподобие connect и disconnect, позволяющие подключиться к базе данных и разорвать соединение. Команда. Объект команды содержит информацию о том, какие действия должны быть выполнены в базе данных. Некоторые объектные модели не включают этот объект (или по крайней мере не обнаруживают его явно), но, разумеется, концепция команды всегда должна быть реализована (хотя иногда команда скрывается под видом метода объекта соединения). Набор данных. Набор данных содержит результаты выполнена запроса (вернее, содержит их, если запрос возвращает данные). Некоторые выполняемые запросы не возвращают результаты (в качестве примера можно указать простой оператор INSERT), но если происходит возврат результатов, то должен быть предусмотрен какой-то набор данных (иногда называемый результирующим набором, или набором записей), в котором представлены полученные результаты. Объекты набора данных, как правило, предоставляют возможность обрабатывать в цикле содержащиеся в них записи (в основном допускается только однонаправленный просмотр, но не исключено, что будет предусмотрена возможность указывать положение искомой записи для обеспечения более надежного позиционирования). Кроме того, объекты набора данных обычно позволяют выполнять операции обновления, вставки и удаления данных. Общие вопросы обеспечения высокой производительности Изложению рекомендаций по повышению эффективности работы серверных приложений в целях обеспечения высокой производительности системы посвящена значительная часть настоящей книги. Но следует учитывать, что объем работы, выполняемой системой за единицу времени, зависит не только от того, насколько рационально организовано функционирование серверных компонентов, но и от многих других факторов. В частности, значительное влияние на производительность оказывают применяемые способы создания и поддержки соединений, а также продолжительность соединений. В следующргх разделах приведены некоторые общие рекомендации по повышению производительности соединений. Управление соединениями Для того чтобы иметь возможность выполнить любой запрос, необходимо иметь в своем распоряжении открытое соединение с базой данных. Если такое соединение отсутствует, то оно должно быть установлено, и на это расходуется значительная часть суммарного времени, требуемого для выполнения запроса. Безусловно, общие затраты времени на установление соединения изменяются в зависимости от многих факторов, но даже при наиболее благоприятном стечении обстоятельств для открытия соединения может потребоваться в несколько раз больше времени, чем на осуществление операций, предусмотренных в большинстве простых запросов. В связи с этим приходится прибегать к различным способам уменьшения указанных издержек. Ниже приведены простые рекомендации, которые позволяют успешно устранрггь основные проблемы, связанные с созданием и использованием соединений. Применение при любой возможности пулов соединений. В большинстве современных методов обеспечения связи предусмотрено использование пулов соединений, причем создание таких пулов предусмотрено по умолчанию. Пулом соединений называется совокупность заранее установленных и постоянно поддерживаемых соединений, которые могут использоваться в клиентских программах. Пулы включают соединения, соответствующие применяемой модели обеспечения взаимодействия с базой данных (ODBC, OLE-DB, SQL Native Client и т.д.). Это означает, что вьшолнение операторов открытия и закрытия соединений в коде клиентского компонента приложения фактически не приводит к открытию и закрытию соединений в серверном компоненте; вместо этого соединение берется из пула, а затем возвращается в пул для возможного повторного использования. После того как в клиентской программе (возможно, даже в другом процессе одной и той же программы) вызывается на выполнение оператор, требующий установления соединения с теми же свойствами (такими как имя сервера, имя пользователя, пароль, протокол), в этой программе повторно используется существующее открытое соединение, а не создается полностью новое соединение, что позволяет значительно сократить издержки, связанные с созданием и уничтожением соединений. Тем не менее применение пула соединений связано с определенным риском, поэтому данной теме будет посвящено несколько слов ниже в данном приложении. Обеспечение совместного использования соединений в пределах процесса. Если в приложении не выполняется одновременно несколько запросов, то велика вероятность того, что достаточно будет поддерживать только одно соединение с сервером. В таком случае может быть предусмотрена возможность использовать соединение, глобальное по отношению ко всему приложению или, по крайней мере, по отношению к определенной функциональной области (учитывая то, что чем крупнее приложение, тем сложнее обеспечить совместную эксплуатацию соединений, поскольку, кроме всего прочего, приходится координировать усилия разработчиков, связанные с передачей прав на использование соединения из одной части приложения в другую). При таком подходе соединение открывается только один раз, после того, как в этом возникает необходимость, а затем, при выполнении различных функций, требующих доступа к базе данных, применяется ссылка на это соединение. Благодаря этому исключается необходимость открывать и закрывать соединение в каждой функции, которая обращается к базе данных. Своевременное закрытие соединений. Любое соединение, независимо от того, создано ли оно как локальное или глобальное, после завершения его использования должно быть явно закрыто. Если в приложении открыто только одно соединение, которое используется глобально, то оператор закрытия этого
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |