Как непрерывно удалять что-либо старше 10 последних записей базы данных MySQL (возможно, в JPQL / JPA) - PullRequest
1 голос
/ 03 декабря 2011

Я ищу способ непрерывного мониторинга и удаления самых старых записей, чтобы база данных никогда не превышала определенного значения. Например, меня интересуют только последние 10, и все, что осталось за этим номером, должно быть удалено. База данных обновляется с помощью различных программ, но программа, которая выполняет мониторинг и удаление, вероятно, будет приложением Java EE с JPA. Я не знаю, на каком уровне реализации это будет сделано. Если MySQL имеет встроенную систему управления, которая делает это, если мне придется написать запрос, который делает это, или если есть функция Java, которая может сделать это.

Редактировать: я использую автоинкрементный идентификатор, который можно использовать для определения порога удаления.

Ответы [ 2 ]

3 голосов
/ 03 декабря 2011

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

Делать это «непрерывно» еще сложнее (читай: невозможно). Я бы сначала

  • проверьте, действительно ли это необходимо. Диски дешевы, и 10 записей в корпоративной базе данных на самом деле ничего.
  • реализует некоторый механизм очистки и выполняет его время от времени, когда база данных никем не используется.
1 голос
/ 03 декабря 2011

Я получу удар, не зная ничего о вашей схеме таблицы:

DELETE FROM MyTable WHERE Id NOT IN (SELECT TOP 10 Id FROM MyTable ORDER BY Date DESC)

Это довольно неэффективно для запуска все время, и, возможно, с помощью MySql-специфичного TRUNCATE, который делает работу лучше.Вероятно, вы получите более высокую производительность, если ограничите число операций чтения 10 нужными строками и фактически будете периодически архивировать / удалять посторонние данные.

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