Как удалить кортеж из таблицы SQL после тайм-аута? - PullRequest
1 голос
/ 03 сентября 2010

Я столкнулся с особым требованием:
Работа с интенсивной сетью запускается на сервере несколькими клиентами через веб-интерфейс. Однако одновременно допускается только одна операция, и, следовательно, в таблице SQL делается запись (кортеж), указывающая, что операция выполняется. После завершения операции (независимо от успеха или неудачи) соответствующий результат отображается на клиенте (ах), и соответствующий кортеж удаляется из таблицы SQL.
Поскольку операция является интенсивной по сети, необходимо ввести сценарий, в котором операцию необходимо «рассмотреть», чтобы отменить, после некоторого времени ожидания (10 минут).
Есть ли ЛЮБОЙ способ связать время жизни строки в SQL со значением тайм-аута, то есть через некоторое время удалить его? Мое приложение в основном написано на Java 1.5 и EJB 3.0 с использованием JPA / Hibernate получить доступ к базе данных Oracle 10g.

Заранее спасибо.

С уважением,
Нагендра У М

Ответы [ 3 ]

1 голос
/ 06 сентября 2010

Я бы посоветовал вам использовать столбец отметки времени, содержащий время начала задачи.

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

Если вы хотите иметь несколько задач с разными тайм-аутами, вы даже можете добавить столбец с тайм-аутом в секундах. Просто запишите свой триггер соответственно.

0 голосов
/ 03 сентября 2010

Я не знаю, что у Oracle есть такая возможность, но я думаю, что нет движка БД, имеющей это.

Если вы хотите сделать это на уровне БД,

  1. у вас должен быть столбец datetime, например; 'CreatedDate' в таблице.В этом столбце будет дата и время создания записи.

  2. Напишите процедуру и поместите ее в задание по расписанию.Это задание будет запускаться через каждые 10 минут и удалять старые записи за 10 минут.Запрос будет выглядеть следующим образом.

T-SQL: преобразуйте его в соответствии с вашим механизмом БД.

DELETE FROM yourtable WHERE CreatedDate < DATEADD(mi, -10, GETDATE())

Это удалит все записи старше 10 минут.из таблицы.

Это просто, чтобы дать вам представление о графике работы.Это в SQL Server.Я не знаю о Oracle

step_by_step_guide_to_add_a_sql_job_in_sql_server_2005

0 голосов
/ 03 сентября 2010

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

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