#java #mysql #jdbc #distributed-transactions
#java #mysql #jdbc #распределенные транзакции
Вопрос:
У меня есть две базы данных. Я должен зафиксировать свою транзакцию только тогда, когда обе записи доступны в этих двух базах данных. Для этого я планировал использовать двухфазный аналогичный алгоритм. Но реализация становится несколько сложной.
Я думал о реализации следующим образом:
- Я запрашиваю соответствующие записи в обеих базах данных, и если они доступны, я блокирую их, чтобы ни один другой пользователь не мог получить к ним доступ, и возвращаю успех.
- Если я получаю успех от обоих, я фиксирую их. иначе я сниму блокировку, если какая-либо запись заблокирована.
Мне также приходится обрабатывать ошибки, поэтому блокировку следует снимать по истечении времени ожидания, если явный запрос на освобождение не был отправлен.
Мой вопрос в том, как явно заблокировать строки без одновременного доступа к нескольким клиентам и есть ли какая-либо лучшая реализация, о которой мне следует подумать? Заранее спасибо за помощь.
Комментарии:
1. Это уже решаемая проблема. Используйте распределенную транзакцию с помощью диспетчера транзакций JTA.
2. Я планирую выполнить этот проект без какого-либо использования существующих библиотек. Если вы можете предложить какую-нибудь чистую реализацию java и sql, я был бы признателен. Кстати, спасибо за ответ
3. @Deadpool С какой стати ты хочешь это заново изобрести? Вы тоже будете писать свой собственный драйвер JDBC?
4. Я изучаю курс распределенных систем и, полагаю, хочу правильно усвоить основы: D
5. Если вы серьезно изучаете эту тему, я предлагаю вам прочитать исходный код существующего решения, а затем опубликовать здесь, когда у вас возникнет узконаправленный вопрос по очень конкретному техническому пункту. Если вы хотите, чтобы мы помогли вам заново обнаружить различные проблемы, связанные с известной решаемой проблемой, это неэффективное использование вашего и нашего времени.