@Alk90
php, mysql, jquery, css, html, api

Как удалять материалы с сайта?

Всем привет!
Допустим есть сайт, на котором пользователь может добавить пост, к этому посту можно добавлять комментарии, комментарии можно лайкать, пользователи получают уведомление о лайке и ответе на их комментарий. Плюс получает рейтинг за комментарии. В общем стандартный пост вконтакте, но лучше взять pikabu для примера.
Предположим к посту добавлено 1500 комментариев (пример пикабу, там есть столько комментов)

Но что делать если пользователь решает удалить пост?
Есть два варианта:
  • 1. Удаляем все лайки к посту и комментариям, удаляем все уведомления связанные с комментами и постом, удаляем все картинки в комментариях и все картинки в посте, удаляем все комментарии, удаляем пост.
  • 2. Отметить пост как удаленный и при любой выборке постов указывать добавлять WHERE `status` <> 'delete'


С первым вариантом проблема в том, что при удалении нужно сделать тысячи запросов, ну если оптимизировать, то меньше, но смысл один - это тяжелая операция...

А вот со вторым еще больше проблем... Если мы не удаляем попутные данные вроде комментариев, то в профиле остаются ссылки на "мои комментарии", где будут и комменты к удаленному посту. Такая же история и с уведомлениями...

Подскажите, как удаляются такие большие массивы данных?
  • Вопрос задан
  • 383 просмотра
Пригласить эксперта
Ответы на вопрос 4
@LemonFox
stateless mind
1. Foreign key + on delete cascade
2. Везде выводить данные где status =
Ответ написан
sim3x
@sim3x
Никто не удаляет ничего

Пост помечается не для выдачи и все
Ответ написан
Комментировать
@xtress
Web-dev
То, как сносятся данные - зависит от того, насколько они критичны (могут быть критичными для восстановления).
Для ваших вариантов:
1) Как вам уже написали - все ваши комментарии/лайки/уведомления связаны с постом через foreign key в бд, ключу выставляется - on delete cascade и данные сносятся автоматом, после удаления поста;
2) Safe delete - пост помечается как удалённый (через тот же status, как вы написали). А вот что делать с уведомлениями и т.д. - зависит от того, что вы хотите сделать. Вы сами привели в пример пикабу - там есть два варианта - а) такой же как и ваш первый вариант (хотя не факт, это может быть просто ещё более глубокий safe delete); б) пометка как удалённый, но при этом пост остаётся на сайте, как и все комменты/лайки и т.д.
Ответ написан
А где вы видели удаление постов на пикабу, который приведен в пример? Все оставляют "как есть" после первого же лайка.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы