Главная страница
Навигация по странице:

  • Транзакция A Время Транзакция B

  • Появились строки, которых раньше не было

  • Сумма $250 по всем счетам неправильная - должно быть $300

  • Введение в системы управления баз данных. !Пушников Введение в системы управления базами данных. В системы управления базами данных 2 Оглавление 2 Глава


    Скачать 2.18 Mb.
    НазваниеВ системы управления базами данных 2 Оглавление 2 Глава
    АнкорВведение в системы управления баз данных
    Дата04.02.2020
    Размер2.18 Mb.
    Формат файлаdoc
    Имя файла!Пушников Введение в системы управления базами данных.doc
    ТипДокументы
    #107076
    страница23 из 26
    1   ...   18   19   20   21   22   23   24   25   26

    Фиктивные элементы (фантомы)


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

    Транзакция A дважды выполняет выборку строк с одним и тем же условием. Между выборками вклинивается транзакция B, которая добавляет новую строку, удовлетворяющую условию отбора.

    Транзакция A

    Время

    Транзакция B

    Выборка строк, удовлетворяющих условию .
    (Отобрано n строк)



    ---

    ---



    Вставка новой строки, удовлетворяющей условию .

    ---



    Фиксация транзакции

    Выборка строк, удовлетворяющих условию .
    (Отобрано n+1 строк)



    ---

    Фиксация транзакции



    ---

    Появились строки, которых раньше не было

     

     

    Транзакция A ничего не знает о существовании транзакции B, и, т.к. сама она не меняет ничего в базе данных, то ожидает, что после повторного отбора будут отобраны те же самые строки.

    Результат. Транзакция A в двух одинаковых выборках строк получила разные результаты.

    Собственно несовместимый анализ


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

    Длинная транзакция выполняет некоторый анализ по всей таблице, например, подсчитывает общую сумму денег на счетах клиентов банка для главного бухгалтера. Пусть на всех счетах находятся одинаковые суммы, например, по $100. Короткая транзакция в этот момент выполняет перевод $50 с одного счета на другой так, что общая сумма по всем счетам не меняется.

    Транзакция A

    Время

    Транзакция B

    Чтение счета и суммирование.




    ---

    ---



    Снятие денег со счета .


    ---



    Помещение денег на счет .


    ---



    Фиксация транзакции

    Чтение счета и суммирование.




    ---

    Чтение счета и суммирование.




    ---

    Фиксация транзакции



    ---

    Сумма $250 по всем счетам неправильная - должно быть $300

     

     

    Результат. Хотя транзакция B все сделала правильно - деньги переведены без потери, но в результате транзакция A подсчитала неверную общую сумму.

    Т.к. транзакции по переводу денег идут обычно непрерывно, то в данной ситуации следует ожидать, что главный бухгалтер никогда не узнает, сколько же денег в банке.
    1   ...   18   19   20   21   22   23   24   25   26


    написать администратору сайта