
- •1. Классификация бд по доступу к данным
- •2. Особенности рбд
- •3. Преимущества и недостатки рбд
- •4. Сравнение рбд с бд централизованного хранения
- •5. Архитектура рбд с глобальной схемой хранения
- •6. Мультибазовые рбд
- •7. Компонентная архтектура рбд
- •8. Исходная информация для проектирования бд
- •9. Сравнение различных стратегий распределения данных
- •10. Фрагментация и репликация: понятия
- •11. Корректность фрагментации
- •12. Типы фрагментаций
- •13. Прозрачность размещения данных. Виды прозрачности
- •14. Прозрачность фрагментации
- •15. Прозрачность расположения
- •16. Прозрачность локального отображения
- •17. Прозрачность именования
- •18. Прозрачность параллельности и отказов
- •19. Прозрачность выполнения
- •20. Правила Дейта
- •21. Понятие транзакции, проблемы, возникающие при транзакции, свойства транзакции
- •22. Управление параллельностью, проблемы параллельности
- •23. Проблема несогласованной обработки
- •24. Проблема потерянного обновления
- •25. Проблема зависимости от нефиксированных результатов
- •26. Упорядочиваемость и восстанавливаемость
- •Восстанавливаемость
- •27. Упорядочивание по просмотру
- •28. Двухфазная блокировка
- •30. Взаимная блокировка - это
- •31.(????) Управление блокировками
- •32. Уровни детализации блокируемых элементов
- •33. Структура и назначение языка xml
- •34. Узлы, атрибуты и элементы на xml
- •35. Просмотр и обновление базы данных средствами xml
- •36. Обработка представленных на xml данных циклами
- •37. Навигация в данных средствами xml
- •38. Обработка представленных на xml данных операторами языка linq
- •39. Особенности создания интерфейсов на wpf
23. Проблема несогласованной обработки
В обоих приведенных выше примерах речь шла о транзакциях, выполняющих обновление данных в базе, наличие взаимовлияния между которыми и вызывало разрушение базы. Однако транзакции, которые только считывают информацию из базы данных, также могут давать неверные результаты, если им будут доступны для чтения промежуточные результаты одновременно выполняющихся и еще не завершенных транзакций, обновляющих информацию в базе. В некоторых случаях эту проблему называют чтением мусора или неповторяемостью чтения.
Проблема несогласованности обработки возникает в тех случаях, когда транзакция считывает несколько значений из базы данных, после чего вторая транзакция обновляет некоторые из этих значений непосредственно во время выполнения первой транзакции.
Например, транзакция, выполняющая суммирование выбранных из базы данных (скажем, вычисляющая общую сумму на счетах), получит неверное значение, если во время ее выполнения другая транзакция изменит считанные ею значения. Пример подобной ошибки приведен в следующей таблице. Здесь транзакция Т6 вычисляющая итоговое значение, выполняется параллельно с транзакцией Т5.
Транзакция Т6 вычисляет сумму остатков на счетах balx (100 единиц),baly (50 единиц) и balz (25 единиц). Однако в это же время транзакция Т5 осуществляет перенос десяти единиц со счета balx на счет balz. В результате вычисленное транзакцией Т6 значение оказывается неверным (завышенным на 10).
Пример проблемы несогласованной обработки
Эту проблему можно устранить, запретив транзакции Т6 считывать значения на счетах balx и balz до тех пор, пока транзакция Т5 не зафиксирует выполненные ею обновления.
24. Проблема потерянного обновления
Результаты вполне успешно завершенной операции обновления одной транзакции могут быть перекрыты результатами выполнения другой транзакции. Эта аномалия известна как проблема потерянного обновления. Суть ее мы проиллюстрируем примером, приведенным в таблице. В этом примере транзакция Т1 выполняется параллельно с транзакцией Т 2. Транзакция Т1 заключается в снятии 10 единиц со счета balx , на котором исходно находится 100 фунтов, а транзакция Т2 предполагает помещение 100 единиц на этот же счет. Если эти транзакции будут выполняться последовательно, одна за другой, без чередования их операций, то после завершения работы на счету будет находиться сумма 190 единиц; причем независимо от порядка выполнения транзакций.
Транзакции Т1 и Т2 начинаются практически одновременно, и каждая из них считывает исходное значение суммы на счету, равное 100 единицам. Затем транзакция Т 2 увеличивает сумму на 100 единиц и записывает результат, равный 200, в базу данных - на счет. Тем временем транзакция T1 уменьшает значение своей копии исходной суммы на счету и записывает полученное
значение, равное 90, в базу данных на тот же счет, перекрывая результат предыдущего обновления. В результате с балансового Счета исчезли 100 единиц, добавленных при выполнении предыдущей операции.
Избежать потери результатов выполнения транзакции Т2 можно, запретив. транзакции Т 1 считывать исходное значение на счету balx вплоть до завершения выполнения транзакции Т2.
Проблема потерянного обновления