Antonchik
@Antonchik
Программирую на HTML

Удалять ли данные из бд?

Здравствуйте. Не раз замечал что люди не удаляют данные из а просто создают поле del в котором помечают или удалена запись, для чего так делают и как лучше делать?
  • Вопрос задан
  • 4434 просмотра
Пригласить эксперта
Ответы на вопрос 7
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Удалять записи можно только если они гарантированно не понадобятся в будущем и на них не ссылаются другие записи.
Ну и если таблица большая и содержит много индексов, то быстрее пометить запись на удаление, а реальное удаление и, соответственно, перестроение индексов делать при периодическом обслуживании.
Ответ написан
Комментировать
romy4
@romy4
Exception handler
Если данные не моноширинные (числа и строки одинаковой длинны), то удаляя их получаете сильно дефрагментированную базу. Получится, что данных мало, а база большущего размера. Чтобы это избежать, необходимо делать её оптимизацию, а это очень и очень затратно и даже недопустимо на нагруженных базах. Поэтому, решением стаёт поле del. А ещё хитрости в виде партиций и т.д.
Ответ написан
@sAndreas
Юзер
Моя позиция, которая меня не раз выручала - если позволяют размеры - то лучше хранить всё. Я даже делал в отдельную таблицу запись кто удалил данные(потому что обычно автоматом пишется user_id того кто изменил данные, а если удалил - то и записи не оставалось кто именно удалил). Пару раз ставил на место особо хитро*опых, которые думали что если данные удалить, то потом никто и не узнает кто послал на удаление.
Ответ написан
Комментировать
TroL929
@TroL929
веб-программист
я рекомендую добавить поле del и в нем уже отмечать. На этом варианте работает много сервисов, те же соц сети когда можно удалить запись и восстановить
Ответ написан
Комментировать
@mtyurin
avito
ну как минимум, если данные не удалять, то база перестанет влазить в память:) вопрос может быт тут, только в размерах и сроке.

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

но рост данных можно и существенно замедлить поделив его скорость на кол-во баз-узлов, представляющих исходную базу.
Ответ написан
webinar
@webinar
Учим yii: https://youtu.be/-WRMlGHLgRg
Ответ на вопрос можно разделить на 2 части:
1. Понадобится ли эта запись в будущем? Например удалять пользователя нет смысла, он может вернуться.
2. Может ли это повлиять на seo или на работу сайта. Например удалив страницу - теряете сео, можно изъять ссылки на нее с сайта, но при этом оставив доступ по прямой ссылке. Некоторые вещи имеет смысл хранить для статистики.

Но имейте в виду, что чаще это лень. Например удаление категории форума, требует удаление всех форумов внутри и наверняка еще кучи связанных данных. И проще не удалять, чем прописать все зависимости - это лень.

Поэтому ответ удалять или нет зависит от конкретного случая. Иногда надо удалять иногда стоит оставить. А вопрос разрастающейся базы может решить архивирование.
Ответ написан
Комментировать
@Miron2
удалять против придать статус "удаленных" зависит от контекста. Если строка не нужна, то конечно удалять.

обычно есть таблица оперативных данных, где удаление строки происхоит в транзакции, а накопление строк с статусом "удалено" и временем операции происходит в накопителях. процедура записи в накопитель происходит либо в триггере, либо в линейке команд,

иногда происходит так что данные принимаются в накопитель, с целью максимизации скорости записи индивидуальных или небольших групп строк, после чего включается линия команд обрабатывающий значительный массив данных, чтобы максимизировать возможности субд, с целью обработки данных, и как результат операции удаляются / добавляются строки в конечной таблице для оперативной подачи высоко - интеллектуальных данных. так приходится строить архитектуру, когда субд дорогая, например Azure Parallel Data Warehouse, а её пиковая производительность для пользователя требует плоских полностью денормализованых строк, выбираемых по единому, стандартному ключу. эти сложности оправдываются когда стоимость хранлища и процессора отступает на второй план перед необходимостью одновременного доступa к огромным массивам данных

в последнем случае, представьте себе завод, где допустим сначала шлют в субд строку "кран под номером один, учесть для трубы номер 2..." через час на стенде кран лопается во время испытаний. кран меняют, в базуи шлют "удалить зпись кран №1". В этом случае статус "удалить" несет нагрузку сродни команды.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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