Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Транзакции. Свойства ACID транзакций. Управление параллельностью. Блокировки. Строгий протокол двухфазной блокировки.




Под транзакцией понимается неделимая с точки зрения воздействия на БД последовательность операторов манипулирования данными (чтения, удаления, вставки, модификации), приводящая к одному из двух возможных результатов: либо последовательность выполняется, если все операторы правильные, либо вся транзакция откатывается, если хотя бы один оператор не может быть успешно выполнен. Обработка транзакций гарантирует целостность информации в базе данных. Таким образом, транзакция переводит базу данных из одного целостного состояния в другое.

Одним из наиболее распространённых наборов требований к транзакциям и транзакционным системам является набор ACID. ACID - атомарность, согласованность, изолированность, долговечность - описывает требования к транзакционной системе (например, к СУБД), обеспечивающие наиболее надёжную и предсказуемую её работу.

- Атомарность гарантирует, что никакая транзакция не будет зафиксирована в системе частично. Будут либо выполнены все её подоперации, либо не выполнено ни одной. Поскольку на практике невозможно одновременно и атомарно выполнить всю последовательность операций внутри транзакции, вводится понятие «отката» (rollback): если транзакцию не удаётся полностью завершить, результаты всех её до сих пор произведённых действий будут отменены и система вернётся в исходное состояние.

- В соответствии с требованием согласованности, система находится в согласованном состоянии до начала транзакции и должна остаться в согласованном состоянии после завершения транзакции.

- Требование долговечности: независимо от проблем на нижних уровнях (к примеру, обесточивание системы или сбои в оборудовании) изменения, сделанные успешно завершённой транзакцией, должны остаться сохранёнными после возвращения системы в работу. Другими словами, если пользователь получил подтверждение от системы, что транзакция выполнена, он может быть уверен, что сделанные им изменения не будут отменены из-за какого-либо сбоя.

- Требование изолированности: во время выполнения транзакции другие процессы не должны видеть данные в промежуточном состоянии. Например, если транзакция изменяет сразу несколько полей в базе данных, то другой запрос, выполненный во время выполнения транзакции, не должен вернуть одни из этих полей с новыми значениями, а другие с исходными.

Различают последовательные (обычные), параллельные и распределённые транзакции. Термин параллельность обозначает такое свойство СУБД, которое, как правило, позволяет одновременно обращаться с помощью многих транзакций к одной и той же базе данных. Очевидно, что в системе, обладающей таким свойством, требуется определенный механизм управления, который позволяет добиться того, чтобы параллельно выполняемые транзакции не нарушали работу друг друга.

При параллельном использовании транзакций могут возникать следующие проблемы:

§ потерянное обновление (lost update);

§ «грязное» чтение (dirty read) — чтение данных, которые были записаны откатанной транзакцией;

§ неповторяющееся чтение (non-repeatable read);

§ фантомная вставка (phantom insert).

Рассмотрим ситуации, в которых возможно возникновение данных проблем. Предположим, имеется две транзакции, открытые различными приложениями, в которых выполнены некоторые SQL-операторы.

Потерянное обновление

Транзакция 1 Транзакция 2
SELECT f2 FROM tbl1 WHERE f1=1; SELECT f2 FROM tbl1 WHERE f1=1;
UPDATE tbl1 SET f2=20 WHERE f1=1;  
  UPDATE tbl1 SET f2=25 WHERE f1=1;

В транзакции 1 изменяется значение поля f2, а затем в транзакции 2 также изменяется значение этого поля. В результате изменение, выполненное первой транзакцией, будет потеряно.

«Грязное» чтение

Транзакция 1 Транзакция 2
SELECT f2 FROM tbl1 WHERE f1=1;  
UPDATE tbl1 SET f2=f2+1 WHERE f1=1;  
  SELECT f2 FROM tbl1 WHERE f1=1;
ROLLBACK WORK;  

В транзакции 1 изменяется значение поля f2, а затем в транзакции 2 выбирается значение этого поля. После этого происходит откат транзакции 1. В результате значение, полученное второй транзакцией, будет отличаться от значения, хранимого в базе данных.

Неповторяющееся чтение

Транзакция 1 Транзакция 2
SELECT f2 FROM tbl1 WHERE f1=1; SELECT f2 FROM tbl1 WHERE f1=1;
UPDATE tbl1 SET f2=f2+1 WHERE f1=1;  
COMMIT;  
  SELECT f2 FROM tbl1 WHERE f1=1;

В транзакции 2 выбирается значение поля f2, затем в транзакции 1 изменяется значение поля f2. При повторной попытке выбора значения из поля f2 в транзакции 2 будет получен другой результат. Эта ситуация особенно неприемлема, когда данные считываются с целью их частичного изменения и обратной записи в базу данных.

Фантомная вставка

Транзакция 1 Транзакция 2
  SELECT SUM(f2) FROM tbl1;
INSERT INTO tbl1 (f1,f2) VALUES (15,20);  
  SELECT SUM(f2) FROM tbl1;

В транзакции 2 выполняется SQL-оператор, использующий все значения поля f2. Затем в транзакции 1 выполняется вставка новой строки, приводящая к тому, что повторное выполнение SQL-оператора в транзакции 2 выдаст другой результат. Такая ситуация называется фантомной вставкой и является частным случаем неповторяющегося чтения. При этом, если выполняемый SQL-оператор выбирает не все значения поля f2, а только значение одной строки таблицы (используется предикат WHERE), то выполнение оператора INSERT не приведет к ситуации фантомной вставки.

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

В его основе лежит простая идея — если для некоторой транзакции А требуется гарантия, чтобы определенный объект, в котором она заинтересована, не изменился каким-то образом без ее ведома, она приобретает блокировку на этот объект.

Неформально выражаясь, следствием приобретения блокировки является то, что к рассматриваемому объекту, «блокируются доступ других транзакций», и поэтому, в частности, предотвращается возможность внесения ими изменений.

Принцип работы блокировок

  1. Прежде всего, предположим, что в системе поддерживаются блокировки двух типов: исключительные блокировки (X — exclusive) и разделяемые блокировки (S — shared). Блокировки X и S иногда именуются, соответственно, блокировками записи и блокировками чтения.
  2. Если транзакция А владеет исключительной блокировкой (X), то запрос от некоторой другой транзакции В на получение блокировки кортежа t любого типа не может быть немедленно удовлетворен.
  3. Если транзакция А владеет разделяемой блокировкой (S) кортежа t, то выполняются следующие условия:

· запрос некоторой другой транзакции В на получение блокировки X кортежа t не может быть немедленно удовлетворен;

· запрос некоторой другой транзакции В на получение блокировки S кортежа t может и должен быть немедленно удовлетворен (это означает, что с этого времени транзакция В также будет владеть блокировкой S кортежа).

X
S
-
X
 
N
N
N
S
-
Y
Y
Y
Y
Y
Y
 
А
Данные правила можно успешно подытожить с помощью матрицы совместимости типов блокировок.

В этой матрице «N» указывает на конфликт(запрос транзакции Вне может быть немедленно удовлетворен), а «Y» указывает на совместимость(запрос транзакции В может и должен быть немедленно удовлетворен). Очевидно, что эта матрица является симметричной.

 

 

Строгий протокол двухфазной блокировки

Теперь перейдем к описанию протокола блокировки, который позволяет использовать только что описанные блокировки X и S для решения возникающих проблем.

1) Транзакция, в которой требуется выполнить выборку кортежа, должна вначале приобрести блокировку S на этот кортеж.

2) Транзакция, в которой требуется выполнить обновление кортежа, должна вначале приобрести X блокировку на этот кортеж. В ином случае, если она уже владеет блокировкой S на этом кортеже, то эта транзакция должна расширить, или повысить уровеньблокировки S до уровня X.

3) Если запрос на блокировку от транзакции Вне может быть немедленно удовлетворен из-за того, что он конфликтует с блокировкой, которой уже владеет транзакция А, то В переходит в состояние ожидания.Транзакция Вожидает до тех пор, пока не появится возможность удовлетворить ее запрос на блокировку, а это может произойти не раньше, чем транзакция А освободит блокировку.

Система должна обеспечить, чтобы транзакция В не ожидала до бесконечности (такая ситуация называется активным тупиком— livelock, или истощением ресурсов— starvation).

4) Блокировки X освобождаются по завершении транзакции (COMMIT или ROLLBACK). Блокировки S также обычно освобождаются в это же время.

 

Возможна ситуация возникновения взаимоблокировок. Взаимоблокировка представляет собой такую ситуацию, в которой две или несколько транзакций одновременно находятся в состоянии ожидания, причем каждая из них ожидает, пока одна из остальных транзакций не освободит блокировку, чтобы получить возможность продолжить свою работу. Если произошла взаимоблокировка, желательно, чтобы система обнаружила ее и разорвала.

Для обнаружения взаимоблокировки необходимо определить наличие цикла в графе ожидания(Wait-ForGraph). Так называется граф, который, неформально выражаясь, показывает «кто кого ожидает». Чтобы разорвать взаимоблокировку, необходимо выбрать одну из транзакций, участвующих во взаимоблокировке (т.е. одну из транзакций, которые входят в состав цикла в графе ожидания), в качестве «жертвы» и выполнить ее откат, что позволяет освободить ее блокировки и дать возможность другим транзакциям продолжить свою работу.

 


 

44. Технологии удалённого доступа и системы БД, тиражирование и синхронизация в распределённых системах БД.

В технологиях распределенных ИС в наст. время существуют следующие направления:

- технологии «Клиент-сервер»;

- технологии реплицирования (тиражирования);

- технологии объектного связывания.

Распределенные ИС , как правило, построены на основе сочетания всех трех технологий.

В основе клиент-серверных технологий лежат две основные идеи:

- общие для всех пользователей данные на одном или нескольких серверах;

- много пользователей (клиентов) на различных выч. установках, совместно (параллельно и одновременно) обрабатывающих общие данные.

Под сервером понимается любая система, процесс, компьютер, владеющие каким-либо вычислительным ресурсом (памятью, временем, производительностью процессора и т.д.). Клиентом называется также любая система, процесс, компьютер, пользователь, запрашивающие у сервера к.-л. ресурс.

В структуре СУБД выделяют три компонента:

- компонент представления, реализующий функции ввода и отображения данных;

- прикладной компонент, включающий набор запросов, событий, правил, процедур и др. вычислительных функций;

- компонент доступа к данным, реализующий функции хранения, извлечения, физического обновления и изменения данных.

Исходя из особенностей реализации и распределения в системе этих компонентов, различают четыре модели технологий «Клиент-сервер»:

- модель файлового сервера (FS);

- модель удаленного доступа к данным (RDA);

- модель сервера базы данных (DBS);

- модель сервера приложений (AS).

Модель файлового сервера. Один из компьютеров сети определяется файловым сервером (общим хранилищем данных), а все основные компоненты СУБД размещаются на клиентских установках. В ОП клиентской установки на время сеанса работы полностью или частично копируется файл БД. Достоинства модели: простота и отсутствие высоких требований к производительности сервера. Недостатки: высокий сетевой трафик, отсутствие специальных механизмов СУБД по обеспечению безопасности данных.

Модель удаленного доступа к данным. В данной модели компонент доступа к данным реализуется в виде самостоятельной программной части СУБД, называемой SQL-сервером, и размещается на сервере. SQL-сервер выполняет низкоуровневые операции по организации, размещению, хранению и манипулированию данными. Недостатки. Высокие требования к клиентским выч. установкам, т.к. на них выполняются прикладные программы обработки данных. Значительный трафик сети, поскольку с сервера направляются клиентам наборы данных, которые могут иметь существенный объем.

Модель сервера БД. На клиентских установках размещается только интерфейсный компонент, а все остальные компоненты СУБД размещаются на сервере. Достоинства. Разгрузка сети.

Модель сервера приложений. Перенос прикладного компонента СУБД на специализированный в отношении повышенных по быстродействию ресурсов дополнительный сервер системы – сервер приложений.

На практике используются смешанные модели, когда простые прикладные функции и обеспечение ограничений целостности данных поддерживаются процедурами, хранимыми на сервере, а более сложные функции – бизнес-правила – реализуются программами, расположенными на клиентских установках или на сервере приложений.

Мониторы транзакций. Под транзакцией понимается неделимая с точки зрения воздействия на БД последовательность операций манипулирования данными (чтения, удаления, вставки, модификации) такая, что, либо результаты всех операций, входящих в транзакцию, отображаются в БД, либо воздействие всех этих операций полностью отсутствует.

Механизм обработки транзакций обеспечивает практическую реализацию одного из основополагающих принципов распределенных ИС – принципа изолированности пользователей.

Технологии тиражирования (реплицирования) данных.

Основная идея тиражирования: пользователи работают автономно с одинаковыми (общими) данными, растиражированными по локальным БД.

Реплика – тиражируемая копия данных, предназначенных для общего пользования.

При реализации технологии тиражирования данных возникает проблема обеспечения согласованного состояния данных.

Решение проблемы обеспечения согласованного состояния количества и значений общих данных основывается на реализации одного из двух принципов:

- принципа непрерывного размножения обновлений (любое обновление данных в любой реплике должно быть немедленно размножено). Данный принцип реализуется при построении систем реального времени.

- принципа отложенных обновлений (обновления реплик могут откладываться до специальной команды или ситуации). Накопленные в реплике изменения данных специальной командой пользователя направляются для обновления всех остальных реплик системы. Такая операция называется синхронизацией реплик.

Наряду с техникой главной реплики существует возможность создания частичных реплик. Частичной репликой называется база данных, содержащая ограниченное подмножество записей главной (полной) реплики. Распространенным способом создания частичных реплик является использование фильтров, устанавливаемых для таблиц главной реплики. Такой подход позволяет решать некоторые проблемы по разграничению доступа к данным, повысить производительность обработки данных и снизить затраты на синхронизацию реплик за счет ограничения количества передаваемых по сети изменений данных.


 


Поделиться:

Дата добавления: 2015-04-18; просмотров: 137; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты