Диго С.М. Базы данных проектирование и использование (1084447), страница 61
Текст из файла (страница 61)
В системах с «клиент-серверной» архитектурой (рис. 10.3) основная обработка данных проводится на сервере.
«Клиент-серверные» системы имеют следующие преимущества:
-
снижение сетевого трафика за счет выполнения запросов на сервере;
-
оптимизация выполнения запросов;
-
возможность хранения бизнес-правил на сервере (ограничения целостности, хранимые процедуры, отражающие логику обработки);
-
возможность использования CASE-средств для генерации кодов серверных объектов (триггеров, хранимых процедур, текстов SQL-запросов);
-
управление пользовательскими привилегиями и правами доступа;
-
широкие возможности резервного копирования и архивации данных.
Сравнительные характеристики технологий «файл-сервер» и «клиент-сервер» приведены в табл. 10.4.
Таблица 10.4
Характеристика | «Файл-сервер» | «Клиент-сервер» |
Интенсивность сетевого трафика | + | |
Обеспечение целостности данных | + | |
Обеспечение безопасности данных | + | |
Устойчивость к сбоям | + | |
Сложность проектирования | + | |
Сложность эксплуатации системы | + | |
Ограничения на число пользователей | + |
При обработке данных в сетевой среде выделяют следующие основные группы выполняемых функций:
-
презентационная логика (Presentation Layer - PL);
-
бизнес-логика (Business Layer - BL);
-
логика доступа к ресурсам (Access Layer - AL).
По характеру распределения функций между клиентом и сервером различают системы с тонким клиентом, толстым клиентом и системы с трехслойной (трехуровневой) архитектурой.
Модель с тонким клиентом стала активно использоваться в корпоративной среде в связи с распространением интернет-технологий, и в первую очередь Web-браузеров. В этом случае клиентское приложение обеспечивает реализацию PL, а сервер объединяет BL и AL.
Модель с толстым клиентом наиболее часто встречается в уже внедренных и активно используемых системах. Такая модель подразумевает объединение в клиентском приложении как PL, так и BL. Серверная часть при описанном подходе представляет собой сервер баз данных, реализующий AL. К описанной модели часто применяют аббревиатуру RDA - Remote Data Access.
В модели с трехуровневой архитектурой физически выделяется «сервер бизнес-логики», на котором и выполняются пользовательские приложения (блок BL).
Как видно из вышеизложенного, существует множество разнообразных технологий работы в распределенной среде.
Некоторые из них представляют собой реализацию на новом технологическом уровне ранее использовавшихся подходов к организации обработки информации.
РБнД могут быть реализованы на однородных элементах (гомогенные системы) или на разнородных (гетерогенные системы). Поскольку процесс создания информационной системы практически непрерывен, то обычно эти системы являются гетерогенными. Разнородными могут быть ЭВМ, ОС, СУБД.
Для обеспечения возможности работы в разнородной среде используются разнообразные категории программных средств:
-
собственные сетевые драйверы (native software drivers);
-
шлюзы (gateways);
-
промежуточное программное обеспечение (middleware).
10.3. Транзакции
10.3.1. Понятие транзакции
Транзакция представляет собой законченную совокупность действий над БД, которая переводит ее из одного целостного в логическом смысле состояния в другое.
Понятие транзакция широко используется в АИС и может относиться не только к распределенным банкам данных. Однако в РБнД оно становится особенно значимым.
К транзакциям предъявляется набор требований, известный под названием ACID (Atomicity, Consistency, Isolation, Durability). Эти требования вытекают из определения транзакции.
Атомарность (atomicity). Транзакция представляет собой некоторый набор законченных действий. Система обеспечивает их выполнение по принципу «все или ничего» - либо выполняются все действия, тогда транзакция «фиксируется»; либо, если возможность выполнить все действия отсутствует, например в случае сбоев, транзакция «откатывается» назад, а БД остается в исходном состоянии.
Согласованность (consistency). Предполагается, что в результате выполнения транзакции система переходит из одного корректного состояния в другое.
Изолированность (isolation). При выполнении транзакции данные могут временно находиться в несогласованном состоянии. Такие данные не должны быть видны другим транзакциям, пока изменения не будут завершены (т.е. пока все модификации не будут формально зафиксированы). Система обеспечивает каждой транзакции иллюзию того, что та выполняется изолированно, как если бы прочие транзакции либо завершились до ее начала, либо начнут выполняться после ее завершения.
Долговечность (durability). Если транзакция зафиксирована, то ее результаты должны быть долговечными. Новые состояния всех объектов сохранятся даже в случае аппаратных или системных сбоев.
Конкретные СУБД используют различные механизмы управления транзакциями. Некоторые СУБД для задания транзакции используют операторы BEGIN TRANSACTION-END TRANSACTION, и все команды, заключенные между ними, составляют транзакцию. В некоторых системах считается, что, инициируя сеанс работы с SQL, пользователь начинает транзакцию, которая будет продолжаться, пока не будет введен оператор COMMIT WORK, который сделает все изменения, проведенные в ходе транзакции, постоянными, или оператор ROLLBACK WORK, который отменяет все сделанные в транзакции изменения. После каждого оператора COMMIT или ROLLBACK начинается новая транзакция.
Во многих СУБД присутствует специальный параметр AUTO-COMMIT, который, находясь во включенном состоянии, приводит к автоматической фиксации изменений каждой нормально завершенной операции.
Транзакция может быть помечена как «только чтение» (READ ONLY). При выполнении такой транзакции попытка провести изменение данных будет вызывать сообщение об ошибке. Задание признака READ ONLY позволяет увеличить производительность как этой, так и параллельно исполняемых транзакций.
Существуют многочисленные модели транзакций, обеспечивающие соблюдение требований ACID. Ниже описаны некоторые из них.
10.3.2. Плоские транзакции
Модели плоских транзакций соответствует один управляющий слой, которому подчинено произвольное число элементарных действий.
Согласно правилам обработки плоских транзакций либо должны успешно завершиться все компоненты глобальной транзакции, либо не должна завершиться ни одна из них. Если неудачей завершилось изменение хотя бы одной удаленной базы данных из множества, то и все остальные компоненты должны быть возвращены в состояние, предшествовавшее началу транзакции. Учитывая количество узлов в сети крупной или даже средней организации, можно предположить, что вероятность отказа хотя бы одного узла весьма высока. Если применяется модель плоских транзакций, то придется заново выполнять все составные части транзакции, что существенно повышает требования к вычислительным ресурсам и отнимает значительную долю пропускной способности системы.
10.3.3. Контрольные точки
Модификация модели плоских транзакций, сохраняющая свойство атомарности, но снижающая потребность в повторном выполнении действий, основывается на понятии контрольных точек.
Контрольные точки устанавливаются в прикладной программе для того, чтобы отметить моменты, начиная с которых можно продолжить вычисления в случае возникновения проблем.
По достижении очередной контрольной точки в транзакции создается новое атомарное действие, которое запускается на выполнение. Только последнее атомарное действие всей последовательности может выполнить фиксацию (COMMIT WORK) транзакции; оператор COMMIT WORK передается всем предыдущим атомарным действиям, пока все они не будут зафиксированы. Контрольная точка не приводит к необратимой фиксации выполненной до этого момента работы.
Откаты (ROLL BACK) транзакции могут инициироваться из любого атомарного действия, а не только из последнего, хотя в любой заданный момент времени прерывание может инициировать только действие, запущенное последним. Это значит, что если для какого-то атомарного действия была достигнута контрольная точка, то для этого действия уже не может быть в дальнейшем принято решение об откате. Откат может быть проведен до любой из предыдущих контрольных точек, поэтому менеджер обработки транзакций должен воспринимать параметр, указывающий, до какой именно контрольной точки нужно провести откат.
10.3.4. Многозвенные транзакции
Модель многозвенных транзакций концептуально подобна модели контрольных точек, но она предполагает фиксацию части работы, сделанной до некоторого момента; возможность отката зафиксированных действий исключается. Приложение тем не менее остается в состоянии транзакции, т.е. при этом не происходит инициации очередной транзакции, ее завершения, инициации следующей и ее завершения и т.д. В рамках многозвенной транзакции сохраняются все необходимые элементы контекста выполнения (курсоры баз данных, открытые файлы и т.д.), хотя ресурсы, ставшие ненужными, можно освобождать.
Модель многозвенных транзакций включает оператор CHAIN WORK - неделимую комбинацию операторов BEGIN WORK и COMMIT WORK, которая неравноценна последовательному выполнению операторов BEGIN WORK и COMMIT WORK по отдельности. При выполнении этих операторов по отдельности контекст пропадает; некоторая другая транзакция может вклиниться и изменить значения в базе данных, которые нужны для выполнения следующего звена многозвенной транзакции, прежде чем это звено начнет выполняться. Таким образом, многозвенные транзакции концептуально эквивалентны транзакциям с контрольными точками с той разницей, что откат может проводиться только до последней зафиксированной точки, а не до любой предыдущей контрольной точки.
Обе модели транзакций - многозвенные и с контрольными точками - позволяют описывать последовательность действий; различия касаются лишь возможностей отката и устойчивости выполненных до заданной точки действий.
10.3.5. Вложенные транзакции
Модель вложенных транзакций включает понятие головной транзакции, которая управляет выполнением всей иерархии. В разках иерархии могут присутствовать транзакции разных уровней вложенности. Концевые узлы иерархии представляют собой плоские транзакции. Отдельные ветви иерархии могут иметь разную длину, т.е. концевые транзакции могут находиться на разном расстоянии от головной транзакции (корня дерева транзакций). Вложенные транзакции называются также гнездующимися.
10.4. Проблемы параллелизма и пути их решения
10.4.1. Параллелизм
При параллельном выполнении операций над базой данных могут возникать некоторые проблемы. Одна из них - проблема утраченных (потерянных) обновлений (Lost update) - заключается в том, что если пользователи параллельно обновляют одни и те же данные, то запомненным будет то обновление, которое было проведено последним. Остальные обновления будут потеряны (рис. 10.4).
Другая проблема - зависимость от незафиксированных обновлений - состоит в том, что пользователь А может увидеть данные, которые уже были обновлены пользователем В, но эти обновления еще не были окончательно зафиксированы. Далее пользователь В может в силу [различных причин, например из-за выявленных ошибок ввода, провести откат базы данных в исходное состояние (рис. 10.5). Пользователь А в этом случае будет предпринимать действия над ошибочными (данными. Иногда для такого рода проблем используется термин преждевременное чтение (Dirty read).
Еще одна проблема может возникнуть, если пользователь проводит какую-то групповую обработку данных, не связанную с корректировкой данных, например вычисляет сумму или среднюю величину, а какие-то значения обрабатываемого множества в этот момент претерпевают изменения в результате выполнения параллельной транзакции. Иногда разделяют ситуации, когда проводится изменение существующих записей и когда осуществляется вставка новой записи. Первая проблема называется неповторяющееся чтение, а вторая - фантомная вставка.