В чем разница между «повторяемым чтением» и «изоляцией моментального снимка»

#sql #database #isolation-level

#sql #База данных #уровень изоляции

Вопрос:

Повторяемое чтение определяется как

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

Что кажется очень похожим на изоляцию моментального снимка.

Чем повторяемое чтение отличается от уровня изоляции моментального снимка?

Ответ №1:

«Моментальный снимок» гарантирует, что все запросы в транзакции будут видеть данные такими, какими они были в начале транзакции.

«Повторяемое чтение» гарантирует только то, что если несколько запросов в транзакции прочитают одни и те же строки, то они будут видеть одни и те же данные каждый раз. (Таким образом, разные строки могут быть сняты в разное время, в зависимости от того, когда транзакция впервые извлекает их. И если будут вставлены новые строки, более поздний запрос может их обнаружить.)

Комментарии:

1. Из cockroachlabs.com/blog/consistency-model Я понимаю, что повторяемое чтение допускает фантомы, означающие, что «если транзакция дважды выполняет запрос, запрашивающий строки, соответствующие условию, второе выполнение может вернуть больше строк, чем первое. Например, что-то вроде select * from orders где значение > 1000 может возвращать заказы (a, b, c) в первый раз и (a, b, c, d) во второй раз «. Кажется, что несколько таблиц не требуются.

2. @Javier: Спасибо за ваш комментарий! Я вижу, как мое примечание в скобках могло сбить с толку. Сейчас я это скорректировал и включил ваш пример, который очень полезен. 🙂

Ответ №2:

Изоляция моментального снимка называется «повторяемым чтением» в PostgreSQL и в MySQL. В Oracle DB это называется «serializable». IBM DB2 использует «повторяемое чтение» для обозначения сериализуемости.

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

В результате никто на самом деле не знает, что означает повторяемое чтение. Но разумно предположить, что это одно и то же.