База данных H2 - стратегия одновременных подключений - PullRequest
1 голос
/ 03 февраля 2012

У меня есть несколько одинаковых приложений, работающих независимо.Каждый читает строку из базы данных (основываясь на некоторых критериях), выполняет ряд операций и, наконец, обновляет эту строку.Поэтому я хочу убедиться, что строка, запущенная приложением, не будет обработана другим.Другими словами, я хочу, чтобы приложение выбрало следующую доступную строку.Как я могу это реализовать?

Я пытаюсь использовать разные стратегии, используя «выбрать ... для обновления», MVCC, другой тип изоляции транзакций, но на данный момент не повезло.

1 Ответ

1 голос
/ 03 февраля 2012

Распространенным решением является использование столбца 'state':

  • 0 не обработано
  • 1 обработка
  • 2 обработано

При обработке строки установите состояние на 1. После обработки установите на 2. Это будет работать во всех базах данных.

Если вы хотите защитить от зависания строк в состоянии «обработка» (например, из-за того, что сеанс / соединение было закрыто), то вы можете добавить столбец «обработка_сессия» и заполнить его текущим сеансом (функция SESSION_ID()) при обработке.Чтобы узнать, жив ли сеанс, используйте таблицу INFORMATION_SCHEMA.SESSIONS.

...