Я пытаюсь реализовать шаблон активной записи с использованием Java / JDBC и MySQL вместе с оптимистической блокировкой для обработки параллелизма.
Теперь у меня есть поле 'version_number' для всех записей в таблице, которое увеличиваетсяпосле каждого обновления.
Кажется, что есть стратегии 2 для реализации этого:
- Приложение, когда оно запрашивает данные, оно также сохраняет соответствующий номер версии каждого из объектов.(т.е. запись).При обновлении номер версии «отправляется» на уровень данных, который используется в запросе UPDATE ... SET ... WHERE для оптимистической блокировки
- Приложение НЕ сохраняет номер версии, а тольконекоторые части объекта (в отличие от целой строки данных).Чтобы оптимистическая блокировка была успешной, слой данных (активная запись) должен сначала получить «строку» из БД, получить номер версии, а затем запустить тот же запрос UPDATE ... SET ... WHERE для обновления записи.
В первом случае «первый выбор», а затем обновление.В последнем случае у вас есть «первая выборка», но также выборка прямо перед обновлением.
Вопрос в следующем: по замыслу,какой подход лучше ?Это нормально / безопасно / правильно, чтобы все данные, включая номер версии, были сохранены в интерфейсе веб-приложения (Javascript / HTML)?Или лучше оценить производительность чтения перед обновлением?
Есть ли «правильный» способ реализовать этот дизайн?Я не уверен, как нынешние реализации активной записи справляются с этим (Ruby, Play, ActiveJDBC и т. Д.). Если я собираюсь реализовать это в «сыром» виде в JDBC, каково правильное проектное решение в этом случае?