Оптимистичный и многоверсионный контроль параллелизма — различия?

Я пытаюсь выяснить, в чем разница между оптимистическим контролем параллелизма (OCC) и контролем параллелизма нескольких версий (MVCC)?

Пока я знаю, что оба основаны на проверке версий на наличие обновлений.

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

В MVCC в принципе то же самое или нет? В чем разница?


person chris polzer    schedule 22.04.2011    source источник
comment
это хранение нескольких версий до уплотнения?   -  person chris polzer    schedule 22.04.2011
comment
да, MVCC — это механизм реализации, используемый механизмами баз данных, кэшами и т. д. для обеспечения изолированного чтения без блокировки записи.   -  person Binil Thomas    schedule 04.05.2011
comment
@Binil Томас да, occ имеет ту же цель, как я понял. Вот поэтому и возник вопрос :)   -  person chris polzer    schedule 06.05.2011


Ответы (3)


Я думаю, что иногда они взаимозаменяемы, и если транзакция включает только один объект, то они по сути одинаковы, но MVCC — это расширение оптимистического параллелизма (или его версия), которое обеспечивает гарантии, когда задействовано более одного объекта. Скажем, у вас есть два объекта, A и B, которые должны поддерживать некоторый инвариант между собой, например. это два числа, сумма которых постоянна. Теперь транзакция T1 вычитает 10 из A и прибавляет к B, в то время как другая транзакция T2 одновременно считывает два числа. Даже если вы оптимистично обновите A и B независимо (CAS их), T2 может получить противоречивое представление о двух числах (скажем, если он читает A до того, как оно было изменено, но читает B после того, как оно было изменено). MVCC гарантирует, что T2 считывает согласованное представление A и B, возможно, возвращая их старые значения, то есть он должен сохранять старые версии.

Подводя итог, можно сказать, что оптимистическая блокировка (или оптимистическое управление параллелизмом) — это общий принцип синхронизации без блокировок. MVCC — это оптимистичный метод, который позволяет проводить изолированные транзакции, охватывающие несколько объектов.

person pron    schedule 20.01.2012

Непосредственно отвечая на вопрос, многоверсионный контроль параллелизма (MVCC) — это метод контроля параллелизма, (обычно) относящийся к категории оптимистического контроля параллелизма (OCC).

Существует 2 основных подхода к управлению параллелизмом:

  • Пессимистический контроль параллелизма: этот подход предполагает, что конфликтующие операции происходят чаще (поэтому он называется пессимистическим). Поскольку конфликты распространены, этот подход использует блокировки для предотвращения выполнения конфликтующих операций, предполагая, что их использование не вызывает значительных накладных расходов.
  • Оптимистический контроль параллелизма: этот подход предполагает, что конфликтующие операции происходят редко и не так часто. Согласно этим предположениям, блокировки будут накладывать значительные и ненужные накладные расходы на производительность. По этой причине этот подход обычно избегает блокировки и пытается выполнить операции, проверяя (при фиксации каждой транзакции), не возник ли конфликт с другой транзакцией во время ее работы. Если возник какой-либо конфликт, этот подход продолжается с отменой транзакций, которые имели конфликтующие операции.

Одним из широко известных алгоритмов пессимистического контроля параллелизма является двухфазная блокировка.

Два широко известных алгоритма оптимистического управления параллелизмом:

Основное различие между этими двумя алгоритмами заключается в следующем. Алгоритм, основанный на метках времени, присваивает каждому объекту единственную (вернее, по одной для каждого вида операций, чтения и записи) метку времени, обозначающую последнюю транзакцию, обратившуюся к нему. Итак, каждая транзакция проверяет во время операции, не конфликтует ли она с последней транзакцией, обратившейся к объекту. Подход с несколькими версиями поддерживает несколько версий каждого объекта, каждая из которых соответствует транзакции. В результате при подходе с несколькими версиями удается добиться меньшего количества прерываний, чем при первом подходе, поскольку в некоторых случаях потенциально конфликтующая транзакция может записать новую версию вместо прерывания. Однако это достигается за счет увеличения объема памяти, необходимого для всех версий.

Строго говоря, MVCC в основном касается того, как хранятся данные, то есть того факта, что может быть несколько физических версий для каждого элемента данных. В результате теоретически возможно совмещать его и с пессимистическими методами (например, с блокировкой), но его многовариантность лучше всего сочетается с оптимистическими методами.

person Dimos    schedule 01.09.2016

Просто чтобы исправить ответ Димоса: управление параллелизмом на основе временных меток по-прежнему является пессимистичным методом (он все еще может прерывать/блокировать транзакции на этапе их выполнения).

person Adriana    schedule 17.11.2017