Hibernate: Как рассуждать об исключении оптимистической блокировки при конкуренции / высоком параллелизме? - PullRequest
1 голос
/ 16 марта 2019

У меня есть следующая структура в моей базе данных через Hibernate.Я работаю на MySQL.Эта структура представляет собой таблицу с простым счетчиком, описывающим, как часто (столбец count ) происходит событие в день (столбец day ).

@Entity
@Table(name="daily_log")
public class DailyLog {
    @Version
    @Column(name="opt_lock_v")
    protected Integer version;

    @Column(name="day")
    @Temporal(TemporalType.DATE)
    private Date day;

    @Column(name="count")
    private Integer count;
}

В моем приложенииЯ просто выполняю следующую операцию для приращения:

DailyLog log = dailyLogRepository.findLogEntry(new Date()); // get row by current day
log.setCount(log.getCount() + 1); // increment count by 1

И позже в моем приложении я считываю из базы данных обновленный счетчик, т.е. log.getCount().

При высокой нагрузке / высокойутверждение, код, который обновляет счетчик, выдает OptimisticLockException, что является проблемой из механизма управления версиями Hibernate.

Как можно избежать таких проблем параллелизма?Безопасно ли делегировать управление параллелизмом в MySQL, а не в Hibernate?Имеет ли смысл реализовать триггер или представление и позволить СУБД обрабатывать параллелизм?

Другой вариант, о котором я думал, - это асинхронная запись / обновление базы данных, но, поскольку мне нужно позднее прочитать этот счетчик, мне нужнонекоторые гарантируют, что СУБД успешно произвела обновление, поэтому я не уверен, является ли решение асинхронной операцией.Для пояснения: если я отправлю команду обновления в свою СУБД, я бы хотел прочитать это обновление, но я не хочу выполнять операции блокировки, которые могли бы уменьшить мою пропускную способность.

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

Я очень новичок в Hibernate, поэтому извиняюсь, если вопрос не ясен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...