Распределенная блокировка

У меня есть 3 процесса (P1, P2 и P3), каждый из которых работает на разных машинах. Эти процессы совместно используют 3 таблицы (T1, T2 и T3) в базе данных. При обновлении этих таблиц мне нужно поддерживать атомарность 3 таблиц одновременно (либо все таблицы должны быть изменены, либо ни одна из таблиц не должна быть изменена). Моя база данных не обеспечивает блокировку для обновления нескольких таблиц одновременно.

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

Я могу создать отдельную таблицу в базе данных, чтобы действовать как мьютекс. Запись 1, когда любой процесс запущен, и 0, когда процесс завершается. Но даже с этим решением, когда процесс 1 просто освобождает мьютекс, процесс 2 и процесс 3 могут одновременно войти в критическую секцию.

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

Есть ли более простое решение этой проблемы?
Есть ли уже какой-либо API в какой-либо библиотеке?

1

Решение

Если вы реализуете это с помощью мьютекса, хранящегося в БД, по моему мнению, это будет менее эффективно. так как запись в БД занимает больше времени, чем в вариациях ОС, таких как Mutexes.

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

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

0

Другие решения

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

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

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

0

По вопросам рекламы [email protected]