- •Разработка многопользовательских баз данных
- •1. Многопользовательские базы данных.
- •If транзакция выполнена успешно then
- •2. Совместное использование данных предприятия
- •3. Применение представлений, хранимых запросов и хранимых процедур для работы в многопользовательской среде
- •Системные хранимые процедуры
- •Расширенные хранимые процедуры
- •Создание хранимой процедуры.
If транзакция выполнена успешно then
COMMIT TRANSACTION
ELSE
ROLLBACK TRANSACTION
END IF
Далее выполняются другие действия, не входящие в эту транзакцию...
Согласованные транзакции
Иногда встречается аббревиатура ACID, относящаяся к транзакциям. Она расшифровывается так: «atomicity, consistency, isolation, durability» ( «атомарность, согласованность, изолированность и устойчивость»). Таким образом, ACID-транзакция – это транзакция, обладающая всеми перечисленными свойствами. Устойчивая транзакция – это транзакция, в которой все сохраненные изменения остаются в базе данных. СУБД не будет удалять эти изменения даже в случае ошибки. Если транзакция устойчивая, СУБД при необходимости предоставит возможность для восстановления изменений, произведенных всеми записанными действиями.
Однако термины согласованная и изолированная не являются столь же определенными, как термины атомарная и устойчивая. Рассмотрим следующий обновляющий SQL-оператор:
UPDATE КЛИЕНТ
SET КодРегиона = '425'
WHERE Индекс = '98050'
Предположим, что в таблице КЛИЕНТ имеется 500 000 строк, и в 500 из них атрибут Индекс имеет значение «98050». Чтобы найти все эти 500 строк, СУБД потребуется некоторое время. Будет ли на протяжении этого времени разрешено другим транзакциям обновлять поля КодРегиона и Индекс таблицы КЛИЕНТ? Если SQL-оператор является согласованным, такие обновления будут запрещены. Обновление будет применено к набору строк в том виде, в каком они существовали в момент запуска SQL-оператора. Такая согласованность называется согласованностью на уровне оператора (statement level consistency).
Теперь рассмотрим транзакцию, которая содержит два оператора обновления:
BEGIN TRANSACTION
UPDATE КЛИЕНТ
SET КодРегиона = '425'
WHERE Индекс = '98050'
{прочие действия этой транзакции}
UPDATE КЛИЕНТ
SET Скидка =0.05
WHERE КодРегиона = '425'
{прочие действия этой транзакции}
COMMIT TRANSACTION
Что в данном контексте означает термин согласованность? Согласованность на уровне оператора означает, что каждый из операторов независимо обрабатывает согласованные строки, но в интервале между двумя операторами указанные строки могут изменяться другими пользователями. Согласованность на уровне транзакции (transaction level consistency) означает, что все строки, затронутые любым из SQL-операторов, защищены от изменений на протяжении всей транзакции.
2. Совместное использование данных предприятия
Данные являются важным активом организации – активом, который можно использовать не только для упрощения работы, но и для управления, планирования, прогнозирования, стратегического анализа и т. п.
Для обработки данных в масштабе предприятия используются несколько различных архитектур. В прошлом наиболее распространены были системы удаленной обработки данных. Но по мере того как микрокомпьютеры стали появляться в офисах и выросла их мощь в качестве серверов данных, возникли новые архитектуры многопользовательских систем обработки данных: системы удаленной обработки данных, клиент-серверные системы, системы совместного использования файлов и системы обработки распределенных баз данных.
Системы удаленной обработки
Классическим методом поддержки многопользовательской базы данных является удаленная обработка (teleprocessing), при которой используется один компьютер и один процессор. Вся обработка производится этим единственным компьютером (рис.1) (teleprocessing system).
Рис. 1. Связи между программами в системе
удаленной обработки данных
Пользователи работают с неинтеллектуальными терминалами (или с микрокомпьютерами, эмулирующими такие терминалы), которые передают сообщения о транзакциях и данные центральному компьютеру. Часть операционной системы, отвечающая за управление связью, принимает сообщения и данные и передает их соответствующим прикладным программам. Программы обращаются к СУБД, а СУБД выполняет операции с базой данных, используя ту часть операционной системы, которая отвечает за обработку данных. Когда транзакция завершается, подсистема управления связью возвращает результаты пользователям, сидящим у терминалов. Системы, подобные этой, называются системами удаленной обработки, поскольку связь между всеми входами и выходами осуществляется через находящийся на расстоянии центральный компьютер, ведущий обработку.
Клиент-серверные системы
На (рис. 2) изображена схема одной из таких систем, которая носит название клиент-серверной системы (client-server system). В отличие от системы удаленной обработки, в которой имеется только один компьютер, клиент-серверная система состоит из множества компьютеров, объединенных в сеть. Одни компьютеры, называемые клиентами (clients), занимаются обработкой прикладных программ. Другие компьютеры, называемые серверами (servers), занимаются обработкой базы данных.
Рис. 2. Клиент-серверная архитектура
На рисунке показан пример, в котором каждый из п пользователей имеет свой клиентский компьютер, обрабатывающий приложения. Второй компьютер – это сервер базы данных.
Тип компьютеров может быть совершенно разным. Теоретически, в роли клиентских компьютеров могут выступать большие ЭВМ или микрокомпьютеры.
Однако из соображений стоимости функции клиентов почти всегда выполняют микрокомпьютеры. Точно так же в роли сервера может выступать компьютер любого типа, но по экономическим причинам функции сервера чаще всего выполняет микрокомпьютер. Клиенты и серверы соединяются в локальную (LAN) или глобальную (WAN) сеть.
Хотя редко случается, чтобы в качестве клиентских машин использовалось что-либо иное, кроме микрокомпьютеров, роль сервера иногда выполняется большой ЭВМ, особенно когда сервер должен иметь большую вычислительную мощность или когда из соображений безопасности и для большего контроля за базой данных размещение ее на микрокомпьютере представляется неуместным.
Если обработкой базы данных занимаются несколько серверов, то чтобы такая система могла считаться клиент-серверной, каждый из серверов должен обрабатывать свою базу данных. Если же два сервера обрабатывают одну базу данных, такая система уже не может претендовать на название клиент-серверной, а назвать ее следует системой распределенной обработки базы данных.
Системы совместного использования файлов (рис. .3). В этой архитектуре (file-sharing), на пользовательских компьютерах находятся не только прикладные программы, по и СУБД. В этом случае сервер является файловым сервером, а не сервером базы данных. Почти во всех системах с совместным использованием файлов применяются локальные сети из микрокомпьютеров.
Рис. 3. Архитектура с совместным использованием файлов
Архитектура с совместным использованием файлов была разработана до клиент-серверной архитектуры и во многих отношениях является более примитивной. При совместном использовании файлов СУБД каждого пользовательского компьютера посылает запросы на обработку файлов подсистеме обработки данных операционной системы файлового сервера. Это означает, что при такой архитектуре трафик в локальной сети гораздо больше, чем при клиент-серверной архитектуре.
Рассмотрим, например, запрос, возвращающий столбцы Name и Address всех строк таблицы CUSTOMER, где столбец Zip имеет значение 98033. В клиент-серверной системе прикладная программа послала бы следующую SQL-команду:
SELECT NAME.ADDRESS
FROM CUSTOMER
WHERE ZIP=98033
Сервер возвратил бы столбцы Name и Address всех строк, удовлетворяющих критерию отбора.
В системе с совместным использованием файлов СУБД находится на локальном компьютере, поэтому программы на файловом сервере не способны обработать SQL-запрос. Подобная обработка должна происходить на пользовательском компьютере, поэтому СУБД вынуждена запрашивать у файлового сервера всю таблицу CUSTOMER целиком. Если эта таблица имеет индексы или другие связанные с ней избыточные данные, они также должны быть переданы клиенту. Ясно, что при совместном использовании файлов по локальной сети передаются гораздо большие объемы данных.
Системы с совместным использованием файлов имеют приложения в системах, где требуется хранить большие файлы (звук, графику и анимацию) на высокоскоростных дисках большого объема. С помощью таких систем организуется также совместное использование дорогих принтеров, плоттеров и другого периферийного оборудования.
Системы обработки распределенных баз данных (рис. 4) – это системы обработки распределенных баз данных, в которых база данных распределена по множеству компьютеров.
Рис.4. Архитектура распределенной БД
Пунктирная линия, которой обведены файлы, означает, что база данных включает в себя все сегменты, хранящиеся на всех п компьютерах. Эти компьютеры могут физически размещаться в одном помещении, а могут – в разных концах планеты.
Типы распределенных баз данных.
Есть несколько типов распределенных баз данных:
неразделенная, нереплицированная;
разделенная, нереплицированная;
неразделенная, реплицированная;
разделенная, реплицированная;
В первом случае все сегменты БД располагаются в автономном компьютере и дублирование данных отсутствует.
Во втором случае база данных может располагаться на нескольких компьютерах.
В третьем случае вся база данных продублирована (реплицирована) на двух компьютерах.
В четвертом случае база данных разделена, и один из ее сегментов продублирован на другом компьютере.
По отношению к разделению баз данных иногда употребляются два термина. Вертикальным разделом (vertical partition), или вертикальным фрагментом (vertical fragment), называется таблица, разделенная на две или более совокупности столбцов. Например, таблица R (Cl, С2, СЗ, С4) может быть разделена на два вертикальных фрагмента: Р1 (С1, С2) и Р2 (СЗ, С4). В зависимости от приложения и от причины, по которой производится разделение, ключ отношения R, скорее всего, будет помещен в отношение Р2, которое примет вид Р2 (С1, СЗ, С4). Горизонтальный раздел (horizontal partition), или горизонтальный фрагмент (horizontal fragment), — это фрагмент таблицы, представляющий собой совокупность строк. Например, если первые 1000 строк отношения R помещаются в отношение R1 (С1, С2, СЗ, С4), а оставшиеся строки помещаются в отношение R2 (С1, С2, СЗ, С4), то отношения R1 и R2 образуют два горизонтальных фрагмента. Иногда база данных разбивается и на горизонтальные, и на вертикальные разделы, и результат такого разделения называется смешанным разделом (mixed partition).
Методы распределенной обработки.
В разных СУБД применяются различные способы распределенной обработки. Простейшим способом обработки распределенной базы данных является загрузка данных только для чтения. В этом случае обновлением всех данных в базе занимается только один компьютер, но копии данных только для чтения могут посылаться на множество (возможно, тысячи) компьютеров. В SQL Server эти копии называются моментальными снимками (snapshots). При более сложном способе распределенной обработки запросы на обновление данных могут приходить со множества компьютеров, но на обработку они передаются одному специализированному компьютеру. Например, компьютер А может быть определен как единственный компьютер, который может обновлять таблицу СОТРУДНИК (и основанные на ней представления), а компьютер Б может быть определен как единственный компьютер, которому разрешено обновлять таблицу КЛИЕНТ (и ее представления). Время от времени обновления должны передаваться обратно на все компьютеры в распределенной сети, и базы данных должны синхронизироваться.
Наиболее сложный способ заключается в том, чтобы разрешить множественное обновление одних и тех же данных в различных местах. В этом случае могут возникнуть три вида конфликтов распределенных обновлений (distributed update conflicts). Во-первых, может быть нарушена уникальность. Другая возможность напоминает проблему потерянного обновления: на двух компьютерах может обновляться одна и та же строка. Третий конфликт возникает в ситуации, когда на одном компьютере обновляется строка, удаленная на другом компьютере.
Для разрешения конфликтов обновлений выделяется специальный компьютер. Он следит за всеми обновлениями, и возникающие конфликты разрешаются либо собственными средствами СУБД, либо приложениями, подобно тому, как это делается в триггерах. В самых крайних случаях делается запись о конфликте в журнале, и он разрешается вручную. Последний способ не рекомендуется, поскольку до устранения конфликта множество строк в работающих базах данных могут зависнуть в неопределенном положении, что приведет к неприемлемому снижению пропускной способности информационной системы предприятия.
Если оставить в стороне конфликты распределенных обновлений, остается еще один сложный вопрос – координация распределенных транзакций. Чтобы транзакция была атомарной, ни одно обновление в распределенной транзакции не должно быть сохранено, пока не будут сохранены все действия транзакции. Это означает, что каждый компьютер должен записать свои обновления условно и ожидать от диспетчера распределенных транзакций уведомления о том, что действия всех остальных компьютеров также записаны. Для этой цели используется алгоритм, называемый двухфазной фиксацией (two-phase commit). У компании Microsoft имеется служба OLE под названием Distributed Transaction Service (служба распределенных транзакций), или DTS, реализующая двухфазную фиксацию.
