Оптимистичный и многоверсионный контроль параллелизма - различия? - PullRequest
15 голосов
/ 22 апреля 2011

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

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

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

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

Ответы [ 3 ]

17 голосов
/ 20 января 2012

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

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

8 голосов
/ 01 сентября 2016

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

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

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

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

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

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

0 голосов
/ 17 ноября 2017

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

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