Реляционная база данных: что такое «грязные записи»? Что произойдет, если они не разрешены? - PullRequest
0 голосов
/ 01 апреля 2020

В настоящее время я читаю об уровнях изоляции базы данных и транзакционных явлениях. Грязные чтения очевидны, но Я не уверен насчет "Грязных записей" .

Все описания «грязной записи» говорят примерно так:

«Грязная запись - это когда процесс сохраняет данные файла, которые уже были изменены на диске другим процессом. последний процесс перезапишет данные первого. " (https://gerardnico.com/data/property/dirty_write).

Некоторые другие описания используют примеры для демонстрации «грязной записи», но не то, что произойдет, чтобы решить эту проблему: https://esb-dev.github.io/mat/IsoLevel.pdf


Это грязная запись из примера:

  1. Saldo начинается с 100
  2. T2 начинается: обновить Acct set Saldo = 200, где Acct = 1
  3. T1 начинается: обновление Acct set Saldo = 250, где Acct = 1
  4. T1 коммит => Saldo = 250
  5. T2 коммит => Saldo = 200

Я не уверен, что произойдет, когда уровень изоляции не позволяет "грязных записей" ...

  • T1 не удается при фиксации , потому что изменение T2 не выполняется в это время
  • T1 фиксируется успешно, а T2 фиксируется неудачно , потому что T1 (еще не зафиксировано) перезаписывает это изменение
  • T1 и T2 фиксируются успешно, но T1 выигрывает молча (saldo 200 вместо 250)

Я действительно не уверен, чего ожидать от транзакции n management.


Пример, модифицированный:

  1. Saldo начинается с 100
  2. T1 начинается: update Acct set Saldo = 200, где Acct = 1
  3. T2 начинается: обновление Acct set Saldo = 250, где Acct = 1
  4. T2 фиксирует => Saldo =?
  5. T1 фиксирует => Saldo =?

У нас есть грязная запись здесь? И каков результат, если разрешена грязная запись?

  • Saldo = 250, потому что последнее обновление выигрывает
  • Saldo = 200, потому что последний коммит побед

И у меня есть дополнительный вопрос о Java / Spring JPA / Hibernate

Ранее я ожидал, что операторы write не будет отправлено в базу данных, пока hibernate не выполнит «commit». Я ошибаюсь? Некоторые уровни изоляции и явления имеют смысл только в том случае, если все операторы всегда мгновенно передаются в базу данных.

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