2015-08-21 4 views
0

Читая этот вопрос есть несколько упоминаний о оптимистичным параллелизмом является более дорогостоящим при разрешении из-за ABORTING сделок:Требуется транзакция с оптимистичным параллелизмом?

Optimistic vs. Pessimistic locking

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

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

Вам нужна транзакция для одного оператора обновления с правильно сформированным выбором where where на основе исходного состояния строки (для оптимистического параллелизма)?

ответ

0

В общем, вам никогда не нужна транзакция для любого отдельного оператора DML (Insert, Update, Delete). Каждый отдельный оператор DML является атомарным. То есть, он преуспевает или терпит неудачу в целом. Сделка позволяет группировать несколько запросов DML в единую атомную единицу работы (чтобы они были успешными или не выполнялись как группа).

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

Сказав все это, я не думаю, что на самом деле это был ответ на ваш вопрос.

Большинство современных веб-приложений имеют аналогичную поток:

  1. Получить данные из базы данных и отображения его
  2. Пусть пользователь может делать свое дело.
  3. Обновление базы данных

Шаг 2 займет гораздо больше времени, чем другие два этапа. И модель параллелизма не помогает в этом потоке, потому что вы не можете открыть транзакцию на шаге 1 и закрыть ее на шаге 3. Итак, как вы убедитесь, что данные обновлены - это те же самые данные, которые были отображены. Хотя хорошо сформированное обновление может помешать обновлению, это только часть проблемы, потому что вы также должны сообщить пользователю, что их обновление не удалось.

параллелизм варианты только реально помочь с обработкой на шаге 3. Если этот процесс выглядит следующим образом:

  1. Считывание данных из базы данных
  2. чек, если данные изменились
  3. Если hasn» t изменено, обновите его.
  4. Сохраните изменения в базу данных

Пессимистический параллелизм гарантирует, что данные не изменились между шаге 1 и 4; оптимистичный параллелизм ничего не гарантирует.

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

+0

Я немного педантичен, но я думаю, что «оптимистичный параллелизм ничего не гарантирует» немного силен. Это гарантирует, что если между шагами № 1 и №4 будет одновременное редактирование другим пользователем, оно будет обнаружено. ** Пессимистично: ** * гарантирует, что никакое другое промежуточное редактирование не произойдет *, ** Оптимистично: ** * гарантирует, что промежуточные изменения будут обнаружены, а вторичные изменения завершатся неудачно (требуется явное разрешение). * Спасибо за подтверждение моего понимания роли транзакции , – AaronLS

+0

Вы правы, это было немного сильнее, чем я предполагал. Именно так, по моему опыту, модель параллелизма играет меньшую роль в управлении обновлениями, чем мы обычно ожидаем. Кроме того, отличное определение Pessimistic vs Optimistic в комментарии. –

Смежные вопросы