Задать вопрос
motto13
@motto13
Вечно молодой

Как держать в таблице только последние 10 записей?

Есть записи некоторых действий пользователей на сайте, эти действия записываются в базу (в минуту может быть до 30 записей и больше), но мне нужно только последние /n записей по дате добавления, как держать в таблице только эти последние /n записи? Добавить запись и удалить последнюю по дате, как правильно это сделать или есть другие решения?
  • Вопрос задан
  • 212 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 2
iMedved2009
@iMedved2009
Не люблю людей
1. По крону сносить не нужные записи, а в запросе пока не снеслись юзать лимит /n;
2. Через триггер который при каждом добавлении записи будет сносить не нужные;
3. Делать не insert а update где в качестве id записи выбирать подзапросом самую старую запись.

update event, (select id from event order by date limit 1) as s set value = 'changed', date = now() where t.id = s.id;

но предварительно придется нагнать туда 10 записей.

4. Сделать тоже самое через insert on conflict update. Тогда не придется нагонять

Но как то задача странная. На каждое внесение записи - делать еще процедуру удаления. Дополнительная нагрузка для чего?
Ответ написан
@Akina
Сетевой и системный админ, SQL-программист.
1. Создать сразу 10 записей с достаточно древней датой.
2. Вместо вставки записи обновлять самую старую:
UPDATE table
SET {columns} = {values}
ORDER BY created_at ASC LIMIT 1;

Само собой created_at - ON UPDATE CURRENT_TIMESTAMP. Ну или обновлять вручную, если больше заняться нечем.

Такая технология к тому же позволяет "на лету" изменять лимит записей. Надо больше? вставляем необходимое число записей с датой в далёком прошлом. Надо меньше? удаляем необходимое число самых старых записей.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
402d
@402d
начинал с бейсика на УКНЦ в 1988
странная задача. Может быть до 30 в минуту и больше. Блок Вы просматривали ?
тут такой момент посетители сайтов бывают двух типов
1) Случайно залетели в глубь сайта из поисковика (по прямой ссылке)
средняя глубина просмотра 1,5 страницы
2) Ведет себя как поисковый бот - смотрит кучу страниц

Предложение Akina разумно для авторизованных пользователей
В чистке по крону Дмитрий засада в случае редких просмотров. Как оставить именно не более 10 у каждого

И общая проблема такого хранения в муське. Квери кеш идет лесом.

Я бы задействовал хранение на стороне пользователя. И через аякс подтягивал блок по списку id
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы