|
Свободные интерпретации феноменов встречаются в большем количестве историй, чем строгие интерпретации. Так как уровни изолированности определяются запрещенными феноменами, то из того факта, что в третьем разделе мы выступаем в пользу их свободных интерпретаций, следует, что мы агитируем за более ограничительные уровни изолированности (в которые не допускается большее количество историй). В третьем разделе показано, что даже если мы берем свободные интерпретации P1, P2 и P3 и запрещаем эти феномены, то мы все равно не получим истинной сериализуемости. Было бы проще оотказаться в [ANSI] от P3 и использовать для определения ANSI0-сериализуемости подраздел 4.28. В таблице 1 представлен только промежуточный результат, окончательный результат будет представлен в таблице 3. 2.3. Механизм
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
= Блокировочный уровень изолированности |
элементах данных и предикатах (одинаковы, если нет замечаний) |
элементах данных и предикатах (везде одинаковы) |
|
|
|
|
|
чтение незафиксированных данных (Locking READ UNCOMMllTED) |
|
Долговременные блокировки по записи |
|
чтение зафиксированных данных (Locking READ COMMITTED) |
Кратковременные блокировки по чтению (в обоих случаях) |
Долговременные блокировки по записи |
|
(Cursor Stability) |
Блокировка по чтению удерживается на текущем элементе курсора Кратковременные предикатные блокировки по чтению |
Долговременные блокировки по записи |
|
повторимое чтение (Locking REPEATABLE READ) |
Долговременные блокировки по чтению на элементах данных Кратковременные предикатные блокировки по чтению |
Долговременные блокировки по записи |
|
сериализуемость (Locking SERIALIZABLE) |
Долговременные блокировки по чтению (в обоих случаях) |
Долговременные блокировки по записи |
Во таблице 2 определяется несколько типов изолированности в следующих терминах: области действия блокировок (элементы или предикаты), режимы (по чтению или по записи) и продолжительность (кратковременные или долговременные). Мы полагаем, что блокировочные уровни изолированности, называемые блокировочным чтением незафиксированных данных (Locking READ UNCOMMITTED), блокировочным чтением зафиксированных данных (Locking READ COMMITTED), блокировочным повторимым чтением (Locking REPEATABLE READ) и блокировочной сериализуемостью (Locking SERIALIZABLE), подразумевались в определениях уровней изолированности ANSI SQL, но, как демонстрируется позже в этой статье, они существенно отличаются от тех, которые перечислены в таблице 1. Следовательно, необходимо различать уровни изолированности, определяемые в терминах блокировок, и уровни изолированности ANSI SQL, определяемые с помощью феноменов. Поэтому названия уровней изолированности в таблице 2 имеют префикс "Блокировочные", а в таблице 1 – "ANSI".
В [GLPT] определяется согласованность Степени 0, на которой разрешаются грязное чтение и запись (Dirty Reads and Writes). Требуется только атомарность операций. Степени 1, 2 и 3 аналогичны Locking READ UNCOMMITTED, Locking READ COMMITTED и Locking SERIALIZABLE соответственно. Ни одна степень согласованности не соответствует уровню изолированности Locking REPEATABLE READ.
Дейт и IBM [DAT, DB2] поначалу использовали термин "повторимые чтения" (Repeatable Reads) для обозначения сериализуемости или блокировочной сериализуемости.
Этот термин кажется более понятным, чем термин "третья степень
изолированности" [GLPT], хотя по значению они идентичны. Значение
Значение— ассоциативная связь между знаком и предметом обозначения. термина ANSI SQL REPEATABLE READ отличается
от значения оригинального определения, данного Дэйтом, и мы полагаем, что принятая в ANSI SQL терминология является неудачной. Поскольку аномалия P3 специальным образом не
исключается на уровне изолированности ANSI SQL REPEATABLE READ, из
определения P3 ясно, что чтения НЕ являются повторимыми! В таблице 2 мы продолжаем неправильно использовать этот термин в Locking REPEATABLE READ, чтобы соответствовать определению ANSI. Аналогично, Дейт ввел термин "устойчивость курсора" (Cursor Stability)
как более понятное название для второй степени изолированности с дополнительной
защитой от потерянных изменений через курсор, как объясняется ниже в подразделе 4.1
ниже.
Определение. Уровень изолированности L1 слабее (weaker) уровня
изолированности L2 (или L2 сильнее (stronger), чем L1; обозначим это как L1
<< L2), если все несериализуемые истории, удовлетворяющие критериям
уровня L2, также удовлетворяют критериям уровня L1, и существует хотя бы
одна несериализуемая история, возможная на уровне L1 и невозможная на
уровне L2. Два уровня изолированности L1 и L2 эквивалентны (equivalent), что
обозначается как L1 == L2, если множества допустимых несериализуемых историй
на уровнях L1 и L2 идентичны. L1 не сильнее (no stronger), L2, что обозначается
как L1 << L2, если L1 << L2 или L1 ==
L2. Два уровня изолированности
несравнимы (incomparable), что обозначается как L1 >><< L2, когда
каждый уровень изолированности допускает несериализуемую историю, недопустимую
на другом уровне.
Сравнивая уровни изолированности, мы различаем их только по несериализуемым историям, которые могут произойти на одном уровне и невозможны на другом. Два уровня изолированности могут также различаться по тем сериализуемым историям, которые они допускают, но мы считаем, что Locking SERIALIZABLE == Serializable, хотя хорошо известно, что блокировочный планировщик не допускает все возможные сериализуемые истории. Возможно, такие уровни изолированности несколько непрактичны, поскольку не допускают слишком много сериализуемых историй, но мы здесь этот вопрос не рассматриваем.
Эти определения приводят к слудующему замечанию.
Замечание 1.
Locking READ UNCOMMITTED
<< Locking READ COMMITTED
<< Locking REPEATABLE READ
<< Locking SERIALIZABLE
В следующем разделе мы сравним определения ANSI с блокировочными определениями.
Сначала сделаем
Сделаем! (англ.Let's do it!)— глобальная акция по очистке Эстонии от мусора в 2008 году, породившая мировое движение под общей целью. позитивное замечание с том, что блокировочные уровни
изолированности соответствуют требованиям ANSI SQL.
Замечание 2. Блокировочные протоколы во таблице 2 определяют
блокировочные уровни изолированности, которые, как минимум
Минимум— это наименьшее возможное количество чего-либо в данном контексте., сильны настолько
же, как и соответствующие основанные на феноменах
уровни изолированности
в таблице 1. Доказательство этого утверждения приводится
в [OOBBGH].
Поэтому блокировочные уровни изолированности обеспечивают, по крайней мере, не меньшую изоляцию, чем одноименные ANSI-уровни. Могут ли они обеспечивать большую изоляцию? Ответ – да, даже на самом нижнем уровне. Чтобы избежать феномена, который мы называем "грязной записью" (Dirty Write), на Locking READ UNCOMMITTED обеспечивается долговременная блокировка по записи, тогда как в определениях ANSI SQL, основанных на аномалиях, такое аномальное поведение не исключается на всех уровнях, кроме ANSI SERIALIZABLE. "Грязное чтение" определяется следующим образом.
P0 (Грязная Запись): Транзакция T1 модифицирует некоторый элемент данных. После этого другая транзакция
T2 тоже модифицирует этот элемент данных перед тем, как T1 выполнит COMMITT
или ROLLBACK. Если T1 или T2 после этого выполнит ROLLBACK, то становится
непонятным, каким должно быть корректное значение данных. Свободной
интерпретацией этого является следующая история:
P0: w1[x]...w2[x]... ((c1 или a1) и (c2 или a2) в любом порядке)
Одной из причин, по которым феномена грязной записи следует избегать, является то, что
он может нарушить согласованность базы данных. Предположим, что существует
ограничение на значения элементов данных x и y (например x = y). Обе транзакции, и T1, и T2,
поддерживают согласованность, если выполняются порознь. Однако ограничение легко может быть
нарушено, если транзакции параллельно производят операции записи в x
и y в разном порядке. Это может произойти, если не допускаются грязные
записи. Например, если возможна история
w1[x]...w2[x]...w2[y]...c2...w1[y]...c1то "выживут" изменения, сделанные
T1 в y, и изменения, сделанные
T2 в x. Если T1 записывает в оба элемента x и y 1, а T2 – 2, то
результатом будет x = 2, y = 1, что нарушает ограничение x=y.
В [GLPT, BHG] и других работах рассматривается необходимость защиты от феномена P0 для возможности автоматического отката транзакций. Без защиты от P0 система не может аннулировать изменения, просто восстановив предыдущие значения. Рассмотрим историю:
w1[x]w2[x]a1Аннулирование w1[x] и восстановление предыдущего значения x не являются удовлетворительными, потому что в результате такого восстановления уничтожится и изменение x w2[x], сделанное второй транзакцией. На если не аннулировать w1[x] путем восстанавления предыдущего значения x, и вторая транзакция тоже выполнит откат, то нельзя будет аннулировать изменение w2[x] путем восстановления его предыдущего значения x! Именно поэтому даже самые слабые блокировочные системы удерживают долговременную блокировку по записи. В противном случае не смогли бы работать их механизмы
Замечание 3. Изолированность в ANSI SQL должна быть изменена таким образом, чтобы исключить P0 на всех уровнях изолированности.
Теперь мы приведем доводы в пользу того, почему требуются именно свободные интерпретации всех трех ANSI-феноменов. Напомним, что строгие интерпретации выглядят следующим образом:
A1: w1[x]...r2[x]... ((a1 и c2) в любом порядке) (грязное чтение) A2: r1[x]...w2[x]...c2...r1[x]...c1 (размытое или неповторимое чтение) A3: r1[P]...w2[y in P] ...c2...r1[P]...c1 (фантом)
Согласно таблице 1, на уровне изолированности READ COMMITTED запрещаются аномалии A1, на уровне REPEATABLE READ – аномалии A1 и A2, и на уровне SERIALIZABLE – аномалии A1, и A2, и A3. Рассмотрим историю H1, в которой две транзакции производят перевод 40 долларов между строками x и y в банковском балансе:
H1: r1[x=50] w1[x=10] r2[x=10] r2[y=50] c2 r1[y=50] w1[y=90] c1
История H1 демонстрирует несериализуемую, классическую проблему анализа несогласованности
(inconsistent analysis), когда транзакция T1 переводит 40 долларов с x
на y, сохраняя размер общей суммы баланс
Баланс (фр.balance, буквально — весы, от лат.bilanx — имеющий две весовые чаши).а, равный 100, но транзакция T2
производит чтение в тот момент, когда баланс находится в несогласованном
состоянии при общей сумме равной 60. История H1 не подходит ни под одну
из аномалий A1, A2 и A3. В случае A1 одна из транзакций должна была бы завершиться аварийно; для A2 элемент данных должен был бы быть прочитан одной из транзакцией повторно; в случае A3 должна была бы измениться область истинности соответствующего предиката. Ни что из этого не
происходит в H1. Рассмотрим свободную интерпретацию A1, феномен P1:
P1: w1[x]...r2[x]... ((c1 или a1) и (c2 или a2) в любом порядке)
H1 действительно нарушает P1. Поэтому для того, что подразумевалось в стандарте ANSI SQL, следует выбирать интерпретацию P1, а не A1. Именно свободная интерпретация является корректной.
Аналогичные доводы показывают, что для интерпретации второго ANSI-феномена следует выбирать интерпретацию P2, а не A2. Различия между A2 и P2 видны на примере следующей истории:
H2: r1[x=50] r2[x=50] w2[x=10] r2[y=50] w2[y=90] c2 r1[y=90] c1
H2 является несериализуемой – это еще одна проблема
Проблема (др.-греч. ) — положение, причинность, условие, вопрос, объект, который создаёт затруднение, побуждает к действию и связан с избыточностью или недостатком чего либо для сознания субъекта,например: процессора (движителя, калькулятора, компьютера,специалиста), знаний, ресурсов, регламента (упорядоченности, алгоритма, программы) и побуждает к действию или ограничивает его и соответственно неразрешён или нежелателен. В природе, вне деятельности человека, проблемы находят естественное разрешение и в последовательности движения форм материи есть этап в наблюдениях формализуемый человеком. Отличие природного процесса, разрешение проблемы как результат законов природы. Сущность проблемы для человека такова, что требует анализа, оценки, формирования идеи, концепции для поиска ответа (решение проблемы) с проверкой и подтверждением опытом. В природе это: Вода течёт вниз. Ветер качает деревья. Вода камень точит. и др., что естественно и непротиворечиво. ПРОБЛЕМОЙ преимущественно называется вопрос, не имеющий однозначного решения (степень неопределённости). Неопределённостью проблема отличается от задачи. Совокупность возможных вопросов взаимосвязанных объектом рассмотрения называется проблематикой. анализа несогласованности, где
T2 видит общий баланс, равный 140. В этой истории ни одна транзакция не
читает грязные (т.е. незафиксированные) данные. Таким образом, история
не противоречит P1. Кроме того ни один элемент данных не читается дважды и нет
изменяющейся области истинности соответствующего предиката. Проблема с H2 состоит в том, что
T1 читает значение y, когда значение x уже устарело. Если бы T1 прочитала
значение x снова, то оно бы обновилось, но она этого не делает, и A2 к
этому случаю не подходит. Заменяя A2 на P2, т.е. свободную интерпретацию,
мы решаем эту проблему:
P2: r1[x]...w2[x]... ((c1 или a1) и (c2 или a2) в любом порядке)
H2 будет отвегнута при попытке второй транзакции
Транзакция (англ.transaction)— в информатике, группа последовательных операций, которая представляет собой логическую единицу работы с данными. Транзакция может быть выполнена либо целиком и успешно, соблюдая целостность данных и независимо от параллельно идущих других транзакций, либо не выполнена вообще и тогда она не должна произвести никакого эффекта. Транзакции обрабатываются транзакционными системами, в процессе работы которых создаётся история транзакций. (w2[x=10]) перезаписать
значение переменной, прочитанной до этого первой транзакцией r1[x=50].
И наконец, рассмотрим A3 и историю
H3:
A3: r1[P]...w2[y in P] ...c2...r1[P]...c1 (фантом) H3: r1[P] w2[insert y to P] r2[z] w2[z] c2 r1[z] c1
T1 осуществляет поиск по условию P=<> для получения
списка служащих. После этого T2 производит вставку нового служащего и потом обновляет
z – счетчик служащих в компании
Юридическое лицо— созданная и зарегистрированная в установленном законом порядке организация, которая имеет в собственности, хозяйственном ведении или оперативном управлении обособленное имущество и отвечает по своим обязательствам этим имуществом, может от своего имени приобретать и осуществлять имущественные и личные неимущественные права, нести обязанности, быть истцом и ответчиком в суде. Юридические лица должны иметь самостоятельный баланс или смету.. Затем T1 читает значение счетчика служащих,
проверяет и находит рассогласование. Ясно, что эта история несериализуема,
но она допустима, поскольку не подходит под A3: никакой предикат
Предикат (лат.praedicatum— заявленное, упомянутое, сказанное)— любое математическое высказывание, в котором есть, по меньшей мере, одна переменная. Предикат является основным объектом изучения логики первого порядка. не применяется дважды. Снова только свободная интерпретация решает проблему:
P3: r1[P]...w2[y in P]... ((c1 или a1) и (c2 или a2) в любом порядке)
Если запретить P3, то история H3 станет недопустимой. Ясно, что именно это подразумевалось в стандарте ANSI SQL. Дальнейшее обсуждение направлена на то, чтобы продемонстрировать полученные результаты.
Замечание 4. Строгие интерпретации A1, A2 и A3 имеют непредусмотренные недостатки. Правильными являются свободные интерпретации. Определяя P1, P2 и P3, мы полагаем, что в ANSI имелось в виду именно это.
Замечание 5. Множество феноменов ANSI SQL неполно. Может возникнуть ряд других аномалий. Чтобы сделать определение блокировок, необходимо определить новые феномены. Кроме того, необходимо переформулировать определение P3. В следующих определениях мы опускаем (c2 или a2), что не ограничивает возможные истории.
P0: w1[x]...w2[x]... (c1 или a1) (Dirty Write, грязная запись) P1: w1[x]...r2[x]... (c1 или a1) (Dirty Read, грязное чтение) P2: r1[x]...w2[x]... (c1 или a1) (Fuzzy or Non-Repeatable Read, размытое или неповторимое чтение) P3: r1[P]...w2[y in P]... (c1 или a1) (Phantom, фантом)
Заметим, что определение P3, приведенное выше, отличается от определения P3 в ANSI SQL. Определение P3 в ANSI SQL запрещает только операции вставки (и модификации в соответствии с некоторыми интерпретациями), попадающие под область действия предиката, когда определение P3, приведенное выше, запрещает любую операцию записи (вставки, модификации, удаления), попадающую под предикат, по которому была произведена операция чтения.
Определения предложенных ANSI уровней изолированности в терминах этих феноменов приведены в таблице 3.
Таблица 3. Уровни изолированности ANSI, определенные в терминах четырех феноменов
|
|
грязная запись (Dirty Write) |
грязное чтение (Dirty Read) |
размытое чтение (Fuzzy Read) |
фантом (Phantom) |
|
|
|
|
|
|
|
(READ COMMITTED) |
|
|
|
|
|
(REPEATABLE READ) |
|
|
|
|
|
(SERIALIZABLE) |
|
|
|
|
В одноверсионных историях оказывается, что феномены P0, P1, P2 и P3 являются замаскированными версиями блокировок. Например, запрещая P0, мы устраняем возможность записи второй транзакцией элемента, до этого записанного первой транзакцией. Это эквивалентно долговременной блокировке по записи на элементах данных или предикате. Следовательно, грязная запись невозможна на всех уровнях. Подобно этому, запрет P1 эквивалентен наличию правильно построенного чтения элементов данных. Запрещет P2 означает долговременную блокировку элементов данных по чтению. И наконец, запрет P3 эквивалентен долговременной предикатной блокировке по чтению. Таким образом, уровни изолированности, определенные в таблице 3 с помощью этих феноменов, обеспечивают то же поведение, что и блокировочные уровни изолированности, определенные в таблице 2.
Замечание 6. Определения блокировочных уровней изолированности в таблице 2 эквивалентны феноменологическим определениям в таблице 3. Другими словами, P0, P1, P2 и P3 являются замаскированнымии определениями блокировочного поведения.
В дальнейшем мы будем ссылаться на уровни изолированности, перечисленные в таблице 3, по их именам из этой таблицы, подразумевая их эквивалентность блокировочным уровням изолированности из таблицы 2. Когда мы будем употребляем термины ANSI READ UNCOMMITTED, ANSI READ COMMITTED, ANSI REPEATABLE READ и ANOMALY SERIALIZABLE, будут иметься в виду определения ANSI из таблицы 1 (недостаточной, т.к. она не включает P0)
В следующем разделе показывается, что в ряде коммерческих реализаций изолированности обеспечиваются уровни изолированности, которые попадают между уровнями READ COMMITTED и REPEATABLE READ. Для получения осмысленных уровней изолированности, которые позволили бы четко различить эти реализации, мы примем P0 и P1 в качестве базиса, а затем добавим новые зарактерные феномены.
Тип изолированности "устойчивость
Устойчивость— способность системы сохранять текущее состояние при наличии внешних воздействий. курсора" (Cursor Stability) вводится для того, чтобы предотвратить
феномен потерянных изменений (Lost Update).
P4 (потерянные изменения, Lost Update): Аномалия
Аномалия от греч. — отклонение от нормы, от общей закономерности, неправильность. потерянных изменений
происходит в том случае, когда транзакция T1 читает элемент данных, после
чего T2 изменяет этот элемент (на основе его предыдущего чтения), а затем T1 (основываясь на ранее прочитанном ею значении) модифицирует тот же элемент данных и фиксируется. В терминах историй это будет выглядеть следующим образом:
P4: r1[x]...w2[x]...w1[x]...c1 (Lost Update)
Как иллюстрируется в истории H4, проблема заключается в том, что даже
если транзакция T2 зафиксируется, ее изменения будут
потеряны.
H4: r1[x=100] r2[x=100] w2[x=120] c2 w1[x=130] c1
В конечном значении элемента x отражается только приращение 30, добавленное транзакцией T1.
Феномен P4 возможен на уровне изолированности READ COMMITTED, поскольку история H4 допустима,
если запрещены феномен P0 (фиксация транзакции, осуществляющей первую
запись, происходит до второй записи) и P1
(в котором требуется чтение после записи). Однако запрет феномена P2 устранит и
P4, поскольку w2[x] происходит после r1[x] и перед фиксацией или откатом
T1. Поэтому аномалия P4 полезна для различия промежуточных уровней изолированности
между уровнями READ COMMITED и REPEATABLE READ.
Уровень изолированности Cursor Stability расширяет блокировочное
поведение уровня READ COMMITED для SQL-курсоров, добавляя новую
операцию чтения (Fetch) по курсору rc (означает read cursor,
т.е. чтение по курсору) и требуя, чтобы блокировка устанавливалась на текущем элементе курсора. Блокировка удерживается до тех пор, пока курсор не будет перемещен (пока не изменитьтся его текущий элемент)
или закрыт, возможно, операцией фиксации. Естественно, транзакция, читающая по курсору, может изменить текущую строку (wc – запись по курсору), и в этом случае блокировка
по записи этой строки будет сохраняться до тех пор, пока транзакция не зафиксируется,
даже после передвижения курсора с последующей выборкой следующей строки
Строки (укр. Строки) — село в Теофипольском районе Хмельницкой области Украины.. Между
rc1[x] и последующей wc1[x] не может вклиниться w2[x]. Следовательно, в этом случае предотвращается
феномен P4, переименованный ниже в P4C
P4C: rc1[x]...w2[x]...wc1[x]...c1 (Lost Update) (потерянные изменения)
Замечание 7. READ COMMITTED << Cursor Stability << REPEATABLE READ
Режим Cursor Stability широко применяется в SQL-ориентированных системах для предотвращения потери изменений строк, читаемых через курсор. В некоторых системах режим READ COMMITTED в действительности является более сильным, чем Cursor Stability. Стандарт ANSI это допускает.
Техника установки курсора на элемент данных для сохранения его значения неизменным может использоваться для нескольких элементов за
счет применения нескольких курсоров. Таким образом, программисты могут использовать режим Cursor
Курсор— ссылка на контекстную область памяти. В некоторых реализациях информационно-логического языка SQL (Oracle, Microsoft SQL Server)— получаемый при выполнении запроса результирующий набор и связанный с ним указатель текущей записи. Stability для обеспечения изоляции Locking REPEATABLE READ для любых транзакций, оперирующих с небольшим,
фиксированным числом элементов данных. Однако этот метод неудобен и совсем не универсален. Поэтому всегда существуют истории, соответствующие
феномену P4 (и, конечно, более общему P2) и не устранимые на уровне Cursor Stability.
Транзакция, выполняемая на уровне изолированности на основе моментальных снимков (Snapshot Isolation), всегда читает
данные из моментального снимка (зафиксированных) данных, произведенного в момент начала
транзакции, который называется стартовой временной меткой (Start-Timestamp). В качестве этого момента может быть выбран любой момент до выполнения этой транзакцией первого чтения. Транзакции, выполняемая
на уровне Snapshot Isolation, никогда не блокируется при попытке произвести чтение до тех пор, пока можно поддерживать данные моментального снимка, соответствующего стартовой временной метке. В этом моментальном снимке также отражаются результаты всех операций записи (модификация
Мод (сокр. от «модификация») — модификация или дополнение к компьютерной игре, написанное, как правило, сторонними разработчиками или любителями с помощью SDK, прилагающегося к игре или специальных, разработанных для модифицирования игр любительских программ. В отличие от адд-она, при его разработке часто радикально изменяет баланс сил (в стратегических играх) или набор оружия и возможности героя (в 3D-шутерах)., вставка и удаление) данной транзакции, используемые при повторном обращении этой транзакции (по чтению или записи) к тем же элементам данных. Изменения, производимые другими транзакциями после момента стартовой временной метки, для данной транзакции являются невидимыми.
Snapshot Isolation является разновидностью многоверсионных механизмов управления параллельными транзакциями (multiversion concurrency control
Ctrl (сокращение от Control, произносится /kntrl/)— системная кнопка (клавиша) на компьютерной клавиатуре.). Он расширяет многоверсионный
смешанный метод (Multiversion Mixed Method), описанный в [BHG], в котором допускается чтение данных из моментального снимка для только читающих транзакций.
Когда транзакция T1 становится готовой к фиксации, она получает временную метку
фиксации (Commit-Timestamp), которая должна быть больше любой существующей Start-Timestamp и Commit-Timestamp. Транзакции T1 успешно фиксируется только в том
случае, если ни одна другая транзакция T2 c Commit-Timestamp, попадающей в интервал [Start-Timestamp, Commit-Timestamp] транзакции T1, не записала в те же элементы данных, что и T1.
В противном случае T1 завершается аварийно. Этот метод, называемый "Выигрывает
первая зафиксированная транзакция" (First-committer-wins), устраняет потерянные
«Остаться в живых» (англ.Lost— букв. рус. Пропавшие/Потерянные)— культовый американский телесериал в жанре робинзонады, лауреат премий «Эмми» и «Золотой глобус». В центре сюжета— история пассажиров рейса 815 компании Oceanic Airlines, летевших из Сиднея, Австралия в Лос-Анджелес, США, потерпевших катастрофу и оказавшихся на полном загадок и тайн тропическом острове где-то в Океании. Каждая серия содержит как основную сюжетную линию на острове, так и второстепенную, рассказывающую о ключевом персонаже серии в другой момент жизни (в первых трёх сезонах— из прошлого, в четвёртом— из прошлого и будущего). Серии пятого сезона также содержат две сюжетные линии, первая из которых развивается на острове непосредственно после событий четвёртого сезона, а вторая— спустя три года в США. Сериал был создан Дж. Дж. Абрамсом, Деймоном Линделофом и Джеффри Либером и снимался главным образом на острове Оаху, Гавайи. Пилотная серия была показана на канале ABC 22 сентября 2004 года и собрала у экранов почти 19 миллионов человек. С тех пор было показано шесть сезонов. Исполнительными продюсерами сериала являлись Абрамс, Линделоф, Карлтон Кьюз, Брайан Бёрк, Джек Бендер и другие. Композитором был Майкл Джаккино. Из-за большого актёрского ансамбля и стоимости съёмок на Гавайях сериал является одним из самых дорогих на телевидении. Успешный и среди критиков, и среди публики, «Остаться в живых» собирал среднюю аудиторию в 16 миллионов человек во время показа первого сезона в США. Он завоевал множество наград, включая «Эмми» за лучший драматический сериал в 2005 году, приз за лучший американский сериал Британской академии телевизионных наград в 2005, «Золотой глобус» как лучшая драма в 2006 и награду Гильдии актёров за выдающийся актёрский ансамбль в драматическом сериале. изменения (феномен
P4). Когда транзакция T1 фиксируется, ее изменения
становятся видны всем транзакциям, у которых Start-Timestamp больше, чем Commit-Timestamp транзакции T1.
Snapshot Isolation является многоверсионным (multi-version, MV) методом. Он мотивируется тем, что одноверсионные (single-version, SV) истории
не могут должным образом отображать временные последовательности операций.
В любое время для каждого элемента данных может иметься несколько версий,
созданных активными или зафиксированными транзакциями. Для операций чтения,
выполняемых транзакциями, должна выбираться подходящая версия. Рассмотрим
историю H1, приведенную в разд. 3, которая показывает потребность
Потребность, нужда— внутреннее состояние психологического или функционального ощущения недостаточности чего-либо и проявляются в зависимости от ситуационных факторов. в
P1 при одноверсионном выполнении. При применении Snapshot Isolation та же последовательность
операций привела бы к многоверсионной истории:
H1.SI: r1[x0=50] w1[x1=10] r2[x0=50] r2[y0=50] c2 r1[y0=50] w1[y1=90] c1
Но в H1.SI имеются потоки данных сериализуемого выполнения. В [OOBBGM] мы показываем, что все истории с уровня Snapshot Isolation могут быть отображены о одноверсионные истории с сохранением зависимостей потоков данных (говорят, что MV-истории эквивалентны по представлениям (View Equivalent) SV-историям; этот подход описывается в [BHG], Глава 5). Например, MV-история H1.SI может быть отображена в сериализуемую SV-историю.
H1.SI.SV: r1[x=50] r1[y=50] r2[x=50] r2[y=50] c2 w1[x=10] w1[y=90] c1
Отображение
Функция— математическое понятие, отражающее связь между элементами множеств. Можно сказать, что функция это «закон», по которому каждому элементу одного множества (называемому областью определения) ставится в соответствие некоторый элемент другого множества (называемого областью значений). MV-историй в SV-истории является единственным строгим
критерием, требуемым для помещения Snapshot Isolation
в иерархию изолированности.
Snapshot Isolation не является сериализуемой, потому что чтения транзакции происходят в один момент времени, а записи – в другой. Для примера
Примера Дивизион (исп.Primera Divisin) профессиональной футбольной лиги Испании (исп.Liga de Ftbol Profesional, LFP), известный также как Примера и Ла Лига (исп.La Liga), является профессиональным футбольным турниром клубов высшего уровня в системе футбольных лиг Испании. Ла Лига считается одной из лучших футбольных лиг в мире. рассмотрим следующую одноверсионную историю:
H5: r1[x=50] r1[y=50] r2[x=50] r2[y=50] w1[y=-40] w2[x=-40] c1 c2
H5 не является сериализуемой и имеет такие же межтранзакционные потоки данных, которые могут возникнуть на уровне Snapshot Isolation (нет выбора версии, читаемой транзакциями). Предполагается, что обе транзакции, записывающие новые значения x и y, поддерживают то ограничение, что сумма x + y всегда должна быть положительна. При полной изолированности обе транзакции поддерживают это ограничение, а в истории H5 нарушают его.
Нарушение ограничения (constrant violation) является типичным и важным
типом аномалий, возникающих при параллельном выполнении транзакций. Индивидуальные
базы данных удовлетворяют ограничениям, задаваемым на множествах элементов
данных (например уникальность ключей, целостность ссылок, репликация строк
в двух таблицах и т.д.). Все вместе они образуют неизменяемый ограничительный
предикат базы данных C(DB). Предикат
Предикат (лат.praedicatum— заявленное, упомянутое, сказанное)— любое математическое высказывание, в котором есть, по меньшей мере, одна переменная. Предикат является основным объектом изучения логики первого порядка. принимает значение True, если состояние
базы данных DB согласуется с ограничениями False в противном случае. Для
поддержки согласованности базы данных транзакции должны сохранять истинность
ограничительного предиката: если база данных является согласованным
до начала транзакции, то она останется согласованной и после ее
фиксации. Если транзакция читает содержимое базы данных, нарушающее ограничительный предикат, то она испытывает аномалию
нарушения ограничения из-за наличия параллельно выполняемой транзакции. Подобные нарушения ограничений называются
анализом несогласованности (inconsistent analysis) [DAT].
A5 (Нарушение ограничения на элементах данных). Предположим, что C() – ограничение между двумя элементами данных x и y из базы данных. Ниже приводятся две аномалии, возникающие при нарушении ограничения.
A5A (Искажение чтения, Read Skew). Предположим, что транзакция T1 читает
x, а затем другая транзакция T2 изменяет значения x и y и фиксируется.
Если теперь T1 прочитает значение y, она может обнаружить несогласованное состояние, и поэтому она произведет тоже несогласованное состояние.
В терминах историй мы имеем аномалию:
A5A: r1[x]...w2[x]...w2[y]... c2...r1[y]...(c1 или a1) (искажение
Дисторшн (англ.distortion— искажение)— звуковой эффект, достигаемый искажением сигнала путём его «жёсткого» ограничения по амплитуде, или устройство, обеспечивающее такой эффект. Наиболее часто применяется в музыкальных жанрах хард-рок, металл и панк-рок в сочетании с электрогитарой. Иногда этим термином обозначают группу однотипных звуковых эффектов (овердрайв, фузз и прочие), реализующих нелинейное искажение сигнала. Их также называют эффектами «перегруза», а соответствующие устройства— «искажателями». чтения, Read Skew)
A5B (Искажение записи, Write Skew). Предположим, что транзакция T1 читает
x и y, которые согласованы в соответствии с предикатом C(), а затем другая транзакция
T2 читает значения x и y, записывает x и фиксируется. После этого T1
записывает y. Если на x и y было какое-нибудь ограничение, то
оно может нарушиться. В терминах историй:
A5B: r1[x]...r2[y]...w1[y]... w2[x]...(c1 или c2) (искажение записи, Write Skew)
Феномен размытого чтения (P2) является частным случаем искажения чтения,
где x=y. Более часто в транзакции читаются два разных, но взаимозависимых элемента
(например, поддерживается целостность ссылок). Искажение
Дисторшн (англ.distortion— искажение)— звуковой эффект, достигаемый искажением сигнала путём его «жёсткого» ограничения по амплитуде, или устройство, обеспечивающее такой эффект. Наиболее часто применяется в музыкальных жанрах хард-рок, металл и панк-рок в сочетании с электрогитарой. Иногда этим термином обозначают группу однотипных звуковых эффектов (овердрайв, фузз и прочие), реализующих нелинейное искажение сигнала. Их также называют эффектами «перегруза», а соответствующие устройства— «искажателями». записи (Write Skew) (A5B) может
возникнуть при наличии ограничения в банке, когда балансам счетов разрешается быть отрицательными, пока сумма совместно поддерживаемых балансов остается положительной. Это приводит к такой аномалии, как в истории H5.
Понятно, что ни аномалия A5A, ни A5B не могла бы возникнуть в историях с исключенным феноменом P2, поскольку в обоих случаях транзакция T2записывает элемент данных, предварительно прочитанный незафиксированной транзакцией T1. Поэтому феномены A5A и A5B полезны только для классификации уровней изолированности, более слабых, чем REPEATABLE READ.
В ANSI SQL определение уровня REPEATABLE READ в строгой интерпретации позволяет поддерживать частные случаи ограничений на строках, но в нем отсутствует общая концепция. Более конкретно, Locking REPEATABLE READ из таблицы 2 обеспечивает защиту от нарушения ограничений на строках (row constraint violations), а определение ANSI SQL из таблицы 1, запрещая аномалии A1 и A2, – нет.
Возвращаясь к обсуждению уровня изолированности Snapshot Isolation, следует заметить, что он поразительно силен, даже сильнее, чем READ COMMITTED.
Замечание 8. READ COMMITTED << Snapshot Isolation
Доказательство. На уровне Snapshot Isolation механизм "выигрывает первая зафиксированная транзакция" устраняет феномен P0 (грязная запись), а механизм временных меток не допускает возникновение феномена P1 (грязное чтение). Отсюда следует, что Snapshot Isolation не слабее, чем READ COMMITTED. Кроме того, на уровне READ COMMITTED возможен феномен A5A, но он невозможен при использовании механизма временных меток на уровне Snapshot Isolation. Следовательно, READ COMMITTED << Snapshot Isolation.
Заметим, что в одноверсионной интерпретации сложно описать, как в историях на уровне
Snapshot Isolation можно избежать феномена P2. Аномалия
A2 произойти не может, так как транзакция
на уровне Snapshot Isolation будут читать одно и то же значение
Значение— ассоциативная связь между знаком и предметом обозначения. элемента данных даже в том случае, когда в промежутках между чтениями этот элемент изменяется другой
транзакцией. Очевидно,
что в истории на уровне Snapshot Isolation может произойти аномалия искажение
записи (A5B) (например, в истории H5), а в одноверсионной интерпретации историй запрещет феномена P2 устраняет A5B. Поэтому на уровне Snapshot Isolation допускаются истории с аномалиями, которые не допустимы на уровне
REPEATABLE READ.
На уровне Snapshot Isolation невозможна аномалия A3. При повторном чтении транзакции по предикату после изменения данных другой транзакцией будет всегда выдаваться тот же самый старый набор данных. Но на уровне REPEATABLE READ аномалии вида A3 возможны. Snapshot Isolation не допускает историй с аномалией A3, но допускает истории с аномалией A5B, а у REPEATABLE READ все наоборот. Следовательно:
Замечание 9. REPEATABLE READ >><< Snapshot Isolation
Однако Snapshot Isolation не устраняет P3. Рассмотрим следующее
ограничение: для множества рабочих заданий, определяемых предикатом, общая продолжительность этих заданий не должна превышать 8 часов. T1 читает по этому предикату, определяет,
что общая продолжительность равна 7 часам и добавляет новое задание продолжительностью 1 час.
Конкурирующая транзакция T2 делает то же самое. Поскольку обе транзакции вставляют разные элементы данных (а также разные значения ключей индексов, если таковые имеются), такой сценарий не устраняется механизмом "выигрывает первая зафиксированная транзакция" и может иметь место на уровне Snapshot Isolation.
Но в любой эквивалентной последовательной истории такой сценарий
Сценарий— литературно-драматическое произведение, написанное как основа для постановки кино- или телефильма. Сценарий в кинематографе, как правило, напоминает пьесу и подробно описывает каждую сцену и диалоги персонажей. Иногда сценарий представляет собой адаптацию отдельного литературного произведения для кинематографа, иногда в этом случае автор романа бывает и автором сценария (сценаристом). Сценарист-это человек, который пишет сценарий к фильму. Иногда многие сценаристы заняты в написании одного и того же сценария, прежде чем режиссер выберет лучший. Необязательно автор книги становится сценаристом при ее экранизации. Эта работа обычно отдается сценаристу. привел бы
к возникновению феномена P3.
Возможно
«Возможно» (фр.Peut-tre)— фильм режиссёра Седрика Клапиша 1999 года., наиболее замечательно то, что на уровне Snapshot Isolation отсутствуют
фантомы (в строгой интерпретации A3 определения ANSI). Каждая транзакция
никогда не видит изменений, производимых параллельно выполняемыми транзакциями.
Таким образом, без дополнительных ограничений в подразделе 4.28 в [ANSI]
можно сформулировать следующий поразительный результат: (напомним, что в таблице
1 ANOMALY SERIALIZABLE соответствует определению ANSI SQL SERIALIZABLE)).
Замечание 10. В историях на уровне Snapshot Isolation устраняются аномалии A1, A2 и A3. Следовательно, в аномальной интерпретации ANOMALY SERIALIZABLE из таблицы 1 ANOMALY SERIALIZABLE << Snapshot Isolation.
На уровне Snapshot Isolation разрешается выполняться транзакциям
с очень старыми временными метками, что позволяет им совершать путешествия
Путешествие— передвижение по какой-либо территории или акватории с целью их изучения, а также с общеобразовательными, познавательными, спортивными и другими целями. во времени, вопринимая исторические аспекты базы данных, не блокируя транзакции, изменяющие базу данных, и не блокируясь такими транзакциями. Конечно, если транзакции с очень старыми временными метками, попытались бы изменять данные, уже измененные более молодыми транзакциями
транзакциями, они были бы завершены аварийным образом.
Достаточно простая реализация механизма Snapshot Isolation была предложена
Ридом (Reed) в [REE]. Существует несколько коммерческих реализаций таких
многоверсионных баз данных. В InterBase 4 фирмы Borland
Borland Software Corporation (ранее Borland International, Inc., а также Inprise Corporation с 29 апреля 1998 по январь 2001 года, обозначение в списке NASDAQ: BORL)— компания по производству программного обеспечения, в настоящее время приобретена британской компанией Micro Focus. [THA] и
сервере, лежащем в основе Exchange
Microsoft Exchange Server— программный продукт для обмена сообщениями и совместной работы. System компании Microsoft, обеспечивается Snapshot Isolation с механизмом "Выигрывает первая зафиксированная транзакция". Этот
механизм заставляет систему помнить все изменения (блокировки по записи),
принадлежащие каждой транзакции, которая фиксируется после снятия стартовой временной
метки каждой активной транзакции. Транзакция завершается аварийным образом,
если ее изменения конфликтуют с запомненными изменениями других транзакций.
"Оптимистический" подход Snapshot Isolation к управлению параллельным выполнением транзакций имеет очевидное преимущество для только читающих транзакций, но его преимущества для изменяющих транзакций до сих пор обсуждаются. Возможно, этот метод не подходит для долговременных изменяющих данные транзакций, конкурирующих с высоко состязательными кратковременными транзакциями. Кратковременные транзакции будут фиксировать свои модификации быстрее и, следовательно, поскольку "выигрывает первая зафиксировавшаяся транзакция", долговременные транзакции, вероятнее всего, будут постоянно откатываться. (Заметим, что такой сценарий привел бы к реальной пролеме и в блокировочных реализациях, а если принять решение не использовать долговременные изменяющие транзакции, то будет применим и подход Snapshot Isolation.) Конечно, в случае, когда кратковременные транзакции конфликтуют минимально, а долговременные ndash; только читают данные, подход Snapshot Isolation должен дать хорошие результаты. В случае сильной конкуренции между транзакциями сопоставимой длины Snapshot Isolation представляет собой классический оптимистический подход. Мнения относительно его полезности расходятся.
Существуют другие модели многоверсионности. В некоторых коммерческих продуктах
поддерживаются версии объектов, но ограничивают область применения метода
Метод (от греч. — «способ»)— систематизированная совокупность шагов, действий, которые необходимо предпринять, чтобы решить определенную задачу или достичь определенной цели. В отличие от области знаний или исследований, является авторским, то есть созданным конкретной персоной или группой персон, научной или практической школой. В силу своей ограниченности рамками действия и результата, методы имеют тенденцию морально устаревать, преобразовываясь в другие методы, развиваясь в соответствии с временем, достижениями технической и научной мысли, потребностями общества. Совокупность однородных методов принято называть подходом. Развитие методов является естественным следствием развития научной мысли. Snapshot Isolation только читающими транзакциями. (Например, SQL-92, Rdb и SET TRANSACTION
READ ONLY в некоторых других базах данных [MS, HOB, DRA]; в Postgres
PostgreSQL (произносится «Пост-Грес-Кью-Эл», в профессиональной среде коротко называется «постгрес»)— свободная объектно-реляционная система управления базами данных (СУБД). и Illustra
[STO, ILL] такие версии поддерживаются долговременно (long-term), и обеспечивается возможность темпоральных запросов.) В других реализациях допускаются
изменяющие транзакции, но не поддерживается защита "Выигрывает первая зафиксированная транзакция" (например, уровень изолированности READ CONSISTENCY
в Oracle [ORA]).
На уровне READ CONSISTENCY в Oracle каждому SQL-оператору перед началом его выполнения дается самое свежее зафиксированное состояние базы данных. Это похоже на то, как если бы стартовая временная метка транзакции снималасьдля каждого SQL-оператора. Множество строк курсора формируется во время выполнения операции открытия курсора. Базовый механизм заново вычисляет подходящую версию строки на основе временной метки оператора. Операции вставки, модификации и удаления строк защищаются блокировками по записи, что приводит к политике "Выигрывает первая записавшая транзакция", а не к "Выигрывает первая зафиксированная транзакция". Уровень READ CONSISTENCY сильнее, чем READ COMMITTED (на нем исключается потеря изменений по курсору (P4C)), но допускает неповторимое чтение (P3), потерю изменений в общем случае (P4) и искажение чтения (A5A). Snapshot Isolation не допускает P4 и A5A.
Если пристально посмотреть на стандарт SQL, то можно сказать, что он трактует каждый оператор как атомарный. В начале каждого оператора имеется сериализуемая подтранзакция (или временная метка). Можно представить иерархию уровней изолированности, определяемых различными вариантами комбинации оператора и присоединенной к нему временной меткой. (Например, в Oracle, операция чтения по курсору имеет временнуя метку, снятую в момент открытия курсора.)
Подводя итоги, можно сказать, что оригинальные определения уровней изолированности в ANSI SQL имеют серьезные недостатки (как пояснялось в разд. 3). Словесные определения противоречивы и неполны. Не исключается феномен грязной записи (P0). В Замечании 5 мы даем рекомендации по тому, как модифицировать определения уровней изолированности ANSI SQL, чтобы сделать их эквивалентными блокировочным уровням изолированности в [GLPT].
В ANSI SQL уровень изолированности REPEATABLE READ мыслился как уровень,
на котором исключаются все аномалии
Аномалия от греч. — отклонение от нормы, от общей закономерности, неправильность., кроме фантомов. Определение, данное
в терминах аномалий в таблице 1, не достигает этой
цели, в отличие от блокировочного определения из таблицы 2. Выбор ANSI-термина REPEATABLE READ является вдвойне неудачным:
(1) повторяемые чтения не дают повторяемых результатов; (2)
в индустрии этот термин уже занят, и в некоторых продуктах
повторимое чтение означает сериализуемость. Мы рекомендуем найти для этого
уровня новое название.
Некоторые коммерчески популярные уровни изолированности, по степени
изолированности попадающие в интервал между уровнями REPEATABLE READ
и SERIALIZABLE из таблицы 3, в разд. 4 охарактеризованы
новыми феноменами и аномалия
Аномалия от греч. — отклонение от нормы, от общей закономерности, неправильность.ми. Все уровни изолированности,
о которых упоминается в этой статье, можно классифицировать, как показано
на рис. 1 и в таблице 4. Чем выше на рисунке расположен
уровень, тем он сильнее (см. определение в начале
подраздела 4.1). Уровни соединены линиями, помеченными
феноменами или аномалиями, которые отличают один уровень от другого.

Рисунок
Рисунок — изображение на плоскости, созданное средствами графики. 1. Диаграмма уровней изолированности и их взаимосвязей. Предполагается, что уровни изолированности ANSI SQL усилены в соответствии с замечанием 5 и таблицей 3. Дуги аннотированы названиями феноменов, отличающих уровни изолированности. Не показана потенциальная многоверсионная иерархия, расширяющая Snapshot Isolation на более слабые степени изолированности путем установки временных меток на пооператорной основе. Также не показаны исходные уровни изолированности ANSI SQL, основанные на строгой интерпретации феноменов P1, P2 и P3.
Таблица 4. Типы изолированности, характеризуемые возможными допустимыми аномалиями
|
изолированности |
Dirty Write |
Dirty Read |
Cursor Lost Update |
Update |
Fuzzy Read |
Phantom |
Read Skew |
Write Skew |
|
UNCOMMITTED == Степень 1 |
|
|
|
|
|
|
|
|
|
== Степень 2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
возможен |
возможен |
|
|
возможен |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
возможен |
|
|
|
SERIALIZABLE == Степень 3 == Repeatable Read Дейт, IBM, Tandem,... |
|
|
|
|
|
|
|
|
Заметим, что уровни ограниченной изолированности для многоверсионных систем никогда раньше не классифицировались, хотя реализованы в нескольких продуктах. Во многих приложениях состязания за блокировки избегаются путем использования уровней изолированности типа Cursor Stability или Read Consistency в Oracle. Snapshot Isolation имеет лучшие характеристики, чем любой из таких уровней: исключаются аномалия потерянных изменений, некоторые фантомные аномалии (например описанная в ANSI SQL), никогда не блокируются только читающие транзакции, и они не блокируют изменяющие транзакции.
Мы выражаем благодарность
Благодарность (от «благо дарить»)— чувство признательности за сделанное добро, например за оказанное внимание или услугу, а также различные способы выражения этого чувства, в том числе и официальные меры поощрения (например «объявление благодарности») . Крису Ларсону (Chris Larson) из Microsoft,
Алану Рейтеру (Alan Reiter), которые нашли несколько новых аномалий в ИЗОЛИРОВАННОСТИ
ОБРАЗА, Франко Путзолу (Franco Putzolu) и Анил Нори (Anil Nori) из Oracle,
Майку Убеллу (Mike Ubell) из компании Illustra и всем анонимным рефери
из SIGMOD за ценные предложения, которые улучшили эту статью. Сашил Джодиа
(Sushil Jajodia), V.Atluri и E.Bertino, которые прислали нам черновой вариант
своей работы [ABJ], касающейся уровней ограниченной изолированности для
многоверсионных историй.
[ANSI] ANSI X3.135-1992, American National Standart for Information Systems – Database Language – SQL, November, 1992.
[ABJ] V.Atluri, E.Bertino, S.Jajodia, "A Theoretical Formuation for Degrees of Isolation in Databases", Technical Report, George Mason Iniversity, Fairfax, VA, 1995.
[BHG] P.A. Bernstein, V. Hadzilacos, N. Goodman, "Concurrency Control and Recovery in Database Systems", Addison-Wesley, 1987.
[DAT] C.J. Date, "An Introduction to Database Systems", Fifth Edition, Addison-Wesley, 1990.
[DB2] C.J. Date and C.J. White, "A Guide to DB2", Third
Edition, Addison-Wesley
Addison–Wesley— американское издательство, специализирующееся на компьютерной литературе, ранее также выпускавшее литературу по естественным наукам. Принадлежит к медиа-концерну Pearson., 1989.
[EGLT] K.P. Eswaran, J. Gray, R. Lorie, I. Traiger, "The Notions of Consistency and Predicate Locks in a Database System", CACM V 19.11, pp. 624-633, Nov. 1978.
[GLPT] J. Gray, R. Lorie, G. Putzolu and, I. Traiger, "Granularity of Locks and Degrees of Consistency in a Shared Data Base", in Readings in Database Systems, Second Edition, Chapter 3, Michael Stonebraker, Ed., Morgan Kaufmann 1994 (ordinally published in 1997).
[GR] J. Gray and A. Reuter, "Transaction Processing
Processing— открытый язык программирования, основанный на Java. Представляет собой лёгкий и быстрый инструментарий для людей, которые хотят программировать изображения, анимацию и интерфейсы. Используется студентами, художниками, дизайнерами, исследователями и любителями, для изучения, прототипирования и производства. Он создан для изучения основ компьютерного программирования в визуальном контексте и служит альбомным программным обеспечением (имеется в виду то, что каждый *.pde файл визуальной оболочки Processing’а представляет собой отдельное изображение или анимацию, ит.д.) и профессиональным производственным инструментом.: Concepts
and Techniques", Corrected Second Printing, Morgan Kaufmann 1993,
Section 7.6 and following.
[HOB] L Hobbs and K. England
Англия (англ.England [lnd])— наиболее крупная историческая и административная часть Соединённого Королевства Великобритании и Северной Ирландии, страна (country) в его составе, занимающая юго-восточную часть большого острова Великобритания, известного как англ.mainland. Население Англии составляет 83% от общего числа населения Великобритании., "Rdb/VMS, A Comprehensive Guide",
Digital Press, 1991.
[ILL] Illustra Information Technologies, "Illustra User"s Guide", Illustra Information Technologies, Oakland, CA. 1994.
[MS] J. Meiton and A.R. Simon, "Understanding The New SQL: A Comlete Guide", Morgan Kaufmann, 1993.
[OOBBGM] P. O'Neil, E. O'Neil, H. Berenson, P. Bernstein, J. Gray, J. Melton, "An Investigation of Transactional Isolation Levels", UMass/Boston Dept. of Math &" C.S. Preprint.
[ORA] "PL/SQL User's Guide and Reference, Version 1.0", Part. 800-V1.0, Oracle Corp., 1989.
[PAR] C. Papadimitriou, "The Theory of Database Concurrency
Control", Computer
Компьютер (англ.computer— «вычислитель»)— многозначный термин, наиболее часто употребляется в качестве обозначения программно управляемого электронного устройства обработки информации. Термин «компьютер» и аббревиатура «ЭВМ», принятая в русскоязычной научной литературе, являются синонимами. Science Press, 1986.
[PON] P. O'Neil, "Database: Principles, Programming
Программирование— в обычном понимании, это процесс создания компьютерных программ., Performance",
Morgan Kaufmann, 1994, Section 9.5.
[REE] D. Reed, "Implementing Atomic Actions On Decentralized Data", ACM TOCS 1.1, 1981, pp. 3-23.
[STO] M.J. Stonebraker, "The Design of the POSTGRES Storage System", 13th VLDB, 1987, reprinted in Readings in Database Systems, Second Edition, M.J. Stonebraker, Ed., Morgan Kaufmann, 1994.
[THA] M. Thakur, "Transaction Models in InterBase 4", Proceedings of the Borland International Conference, June, 1994.