Как заблокировать строку базы данных на фиксированный интервал времени?

#java #mysql #jdbc #distributed-transactions

#java #mysql #jdbc #распределенные транзакции

Вопрос:

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

Я думал о реализации следующим образом:

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

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

Мой вопрос в том, как явно заблокировать строки без одновременного доступа к нескольким клиентам и есть ли какая-либо лучшая реализация, о которой мне следует подумать? Заранее спасибо за помощь.

Комментарии:

1. Это уже решаемая проблема. Используйте распределенную транзакцию с помощью диспетчера транзакций JTA.

2. Я планирую выполнить этот проект без какого-либо использования существующих библиотек. Если вы можете предложить какую-нибудь чистую реализацию java и sql, я был бы признателен. Кстати, спасибо за ответ

3. @Deadpool С какой стати ты хочешь это заново изобрести? Вы тоже будете писать свой собственный драйвер JDBC?

4. Я изучаю курс распределенных систем и, полагаю, хочу правильно усвоить основы: D

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