Как лучше переодически удалять данные из БД.

12
R
На сайте с 03.08.2012
Offline
131
679

Здравствуйте! У меня в БД записываються данные (не очень частно). Длительность жизни у этих данных - 1 час. После чего они должны быть удалены.

Я вот думаю, есть ли смысл делать CRON, чтобы каждые 5 минут скрипт удалял ненужные записи из БД (ктомуже их не много, чаще всего скрипту вообще не понадобиться удалять). Или есть более лучшие решения этой задачи, может както можно в бд записывать информацию, чтобы она автоматом удалялась через определенное время, при этом не имяя большой нагрузки.

P.S. PHP+MYSQL

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#1

Сделайте через крон и всё не нужно себе фантазировать что-то.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
R
На сайте с 03.08.2012
Offline
131
#2

А на крон можно навешевать по 20-30 скриптов на день? Норм будет? Там точно такая же нагрузка какбудто я в адресной строке запустил скрипт? и не боллее?

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#3
revered:
А на крон можно навешевать по 20-30 скриптов на день? Норм будет? Там точно такая же нагрузка какбудто я в адресной строке запустил скрипт? и не боллее?

Можно. Будет точно так же как вы их открываете в браузере. Сам крон НИКАКОЙ нагрузи не вызывает. Вызывает нагрузку, то что он выполняет. Если у вас с заданиями всё ок, то всё будет ок.

Solmyr
На сайте с 10.09.2007
Offline
501
#4

Сколько примерно записей нужно удалить за один запуск?

R
На сайте с 03.08.2012
Offline
131
#5

Чаще всего будет 0. А если и больше 0, то не на много...

Solmyr
На сайте с 10.09.2007
Offline
501
#6

Тогда как угодно. Можно например без крона, перед каждой записью в БД удалять старые записи.

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#7
Solmyr:
Тогда как угодно. Можно например без крона, перед каждой записью в БД удалять старые записи.

Лишний запросы, чтобы узнавать есть ли эти записи. Так же это будет происходить КАЖДЫЙ раз. Поэтому лучше крон.

SeVlad
На сайте с 03.11.2008
Offline
1609
#8
LEOnidUKG:
Так же это будет происходить КАЖДЫЙ раз. Поэтому лучше крон.

Не факт :):

revered:
У меня в БД записываються данные (не очень частно).

Мб крон будет работать чаще, чем записывается в БД. Даже скорее всего так и будет:

revered:
Чаще всего будет 0.
Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
R
На сайте с 03.08.2012
Offline
131
#9

Я просто думал, может когда запись добовляешь в БД, можно создать какое-нибудь поле со временем, и БД сама удалять будет через час. Ну ладно, сделаю крон, все равно нагрузки толком то и нет...

А вот ещё вопрос, чтобы тему не создавать...

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

Glueon
На сайте с 26.07.2013
Offline
172
#10

Если данные так быстро уходят, то может быть стоит подумать о переносе их в другое место? Например в key-value хранилище в котором можно задать время expire. Тогда записи будут сами когда надо отмирать, т.к. судя по всему вам известно когда запись должна быть удалена.

Если все-таки придерживаться вашего подхода - можно без cron-а обойтись, воспользовавшись MySQL Scheduler'ом.

https://dev.mysql.com/doc/refman/5.5/en/create-event.html

Например что-нибудь такое:


CREATE EVENT event_hourly
ON SCHEDULE
EVERY 1 HOUR
COMMENT 'Удаляем ненужные записи.'
DO
DELETE FROM sessions WHERE Expire < NOW();
Есть много IP-сетей в аренду под прокси, парсинг, рассылки (optin), vpn и хостинг. Телега: @contactroot ⚒ ContactRoot команда опытных сисадминов (/ru/forum/861038), свой LIR: сдаем в аренду сети IPv4/v6 (/ru/forum/1012475).
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий