motto13
@motto13
Вечно молодой

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

Есть записи некоторых действий пользователей на сайте, эти действия записываются в базу (в минуту может быть до 30 записей и больше), но мне нужно только последние /n записей по дате добавления, как держать в таблице только эти последние /n записи? Добавить запись и удалить последнюю по дате, как правильно это сделать или есть другие решения?
  • Вопрос задан
  • 185 просмотров
Решения вопроса 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
начинал с бейсика на УКНЦ в 1988
странная задача. Может быть до 30 в минуту и больше. Блок Вы просматривали ?
тут такой момент посетители сайтов бывают двух типов
1) Случайно залетели в глубь сайта из поисковика (по прямой ссылке)
средняя глубина просмотра 1,5 страницы
2) Ведет себя как поисковый бот - смотрит кучу страниц

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

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

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

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
25 апр. 2024, в 14:44
10000 руб./за проект
25 апр. 2024, в 14:44
250 руб./в час