» » » Хелен Борри - Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ


Авторские права

Хелен Борри - Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ

Здесь можно скачать бесплатно "Хелен Борри - Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ" в формате fb2, epub, txt, doc, pdf. Жанр: Программирование, издательство БХВ-Петербург, год 2006. Так же Вы можете читать книгу онлайн без регистрации и SMS на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
Хелен Борри - Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
Рейтинг:
Название:
Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
Автор:
Издательство:
БХВ-Петербург
Год:
2006
ISBN:
5-94157-609-9
Скачать:

99Пожалуйста дождитесь своей очереди, идёт подготовка вашей ссылки для скачивания...

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.

Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

Описание книги "Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ"

Описание и краткое содержание "Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ" читать бесплатно онлайн.



Рассмотрены вопросы, необходимые разработчику для создания клиент-серверных приложений с использованием СУБД Firebird, явившейся развитием СУБД Borland Interbase 6. Содержится обзор концепций и моделей архитектуры клиент/сервер, а также практические рекомендации по работе с клиентскими библиотеками Firebird. Детально описаны особенности типов данных SQL, язык манипулирования данными (Data Manipulation Language, DML), а также синтаксис и операторы языка определения данных ( Data Definition Language, DDL). Большое внимание уделено описанию транзакций и приведены советы по их использованию при разработке приложений. Описано программирование на стороне клиента и сервера написание триггеров и хранимых процедур, создание и использование событий базы данных, обработка ошибок в коде на сервере и многое другое. Материал сопровождается многочисленными примерами, советами и практическими рекомендациями.

Для разработчиков баз данных






Блокировка на уровне оператора

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

Пессимистическая блокировка строки или набора является противоположностью того способа работы, для которого был спроектирован Firebird. Короче говоря, если вы жили с пессимистической блокировкой и зависели от нее до знакомства с Firebird, то пришло время получить удовольствие от многоверсионной архитектуры и преимуществ оптимистической блокировки строки.

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

Для случаев, когда необходима пессимистическая блокировка на уровне строки, механизм пессимистической блокировки и поддерживаемый синтаксис SQL реализованы в версии 1.5. До этого сервер Firebird по существу этого не поддерживал. В данном разделе мы сначала посмотрим на стандартный "трюк", который выполняют клиентские приложения- когда для этого отсутствует языковая поддержка для получения пессимистической блокировки. Затем мы рассмотрим синтаксис и условия явного SELECT ... WITH LOCK, который осуществляет поддержку пессимистической блокировки для SQL в Firebird 1.5.


Трюк "фиктивное изменение"

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

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


UPDATE ATABLE

SET PKEY = PKEY

WHERE PKEY = PKEY;


Следовательно, сервер создает новую версию записи, в которой нет никаких отличий от последней подтвержденной версии, и задает блокировку этой строки. Когда пользователь сообщает, что он завершил редактирование строки, приложение посылает на сервер реальное изменение, например:


UPDATE ATABLE

SET COLUMN2 = 'Некоторое новое значение',

C0LUMN3 = 99,

. . .

WHERE PKEY = <значение первичного ключа>;


На сервер пересылается еще одна новая версия записи, перекрывая первую.

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


! ! !

ВНИМАНИЕ! Если вы используете эту технику, убедитесь, что триггеры условий BEFORE UPDATE и BEFORE DELETE, относящиеся к тем таблицам, которые используются в фиктивных изменениях, не помешают выполнению необходимых действий.

. ! .


! ! !

СОВЕТ. Может оказаться необходимым создание в вашей таблице специального скрытого столбца FLAG для специфического использования в качестве флага фиктивных изменений. Например, скрытый столбец типа данных INTEGER может увеличиваться на единицу вашим оператором, выполняющим фиктивное изменение. Тогда в триггерах можно задать выполнение "реальных" изменений только в случае IF (NEW.FLAG <> OLD.FLAG).

. ! .


О "дважды выполненных" изменениях

Не рекомендуется изменять одну и ту же строку более одного раза в одной транзакции, потому что это будет пересекаться как с автоматической целостностью данных (ссылочная целостность), так и с пользовательскими триггерами. Когда используются точки сохранения (savepoint), это приводит к сильному росту количества версий записей. Такое дублирование обычно является следствием небрежного проектирования логики приложения. При этом "дважды измененное изменение" является точной целью техники "фиктивных изменений". Если в этих транзакциях не используются точки сохранения, а в триггерах производится проверка на реальные изменения, все будет в безопасном состоянии.


Явная блокировка в версии 1.5 и более поздних

Синтаксис явной блокировки:


SELECT спецификация-выхода FROM имя-таблицы

[WHERE условие-поиска]

[FOR UPDATE [OF столбец1 [, столбец2 [, ...]]]]

WITH LOCK;


Как это работает

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

Поведение ожидания и сообщение о конфликте зависят от параметров транзакции, заданных в буфере параметров транзакции (TPB).

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

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

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

Если указано SELECT ... WITH LOCK и необязательное предложение FOR UPDATE опущено, то все строки в наборе будут предварительно заблокированы, неважно, изменяете вы их фактически или нет. При аккуратном конфигурировании транзакции и управлении буферизацией со стороны клиента блокировка будет предотвращать доступ по записи к любой из этих строк или к зависимым от них строкам другим транзакциям, пока не завершится ваша транзакция. Предварительная блокировка набора, содержащего много строк, приведет к росту конфликтов блокировок, и ваш код приложения должен быть готовым к их обработке.


Таблица 27.3. Взаимодействие установок транзакции и явных блокировок

Изоляция

Разрешение блокировок

Поведение

isc_tpb_consistency (SNAPSHOT TABLE STABILITY)

- - -

Игнорируется. Блокировки на уровне таблицы перекрывают явные блокировки

isc_tpb_concurency (SNAPSHOT)

isc_tpb_nowait (NO WAIT)

Если строка была изменена любой транзакцией и подтверждена после старта нашей транзакции, или уже активная транзакция изменила строку до того, как она была помещена в кэш строк, то немедленно возникает исключение по конфликту изменения

isc_tpb_concurency (SNAPSHOT)

isc_tpb_wait (WAIT)

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

isc_tpb_read committed (READ COMMITTED)

isc_tpb_nowait (NO WAIT)

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


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

Похожие книги на "Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ"

Книги похожие на "Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ" читать онлайн или скачать бесплатно полные версии.


Понравилась книга? Оставьте Ваш комментарий, поделитесь впечатлениями или расскажите друзьям

Все книги автора Хелен Борри

Хелен Борри - все книги автора в одном месте на сайте онлайн библиотеки LibFox.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Отзывы о "Хелен Борри - Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ"

Отзывы читателей о книге "Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ", комментарии и мнения людей о произведении.

А что Вы думаете о книге? Оставьте Ваш отзыв.