Avoid Soft-Deletes

Sufir

Я не волшебник, я только учусь
Вот тут (любопытные слайды от Marco Pivetta) утверждают, что Soft Deletes - это "broken idea" и она "come from an era where keeping everything in a single DB was required". Я как-то не задумывался об этом никогда и использую постоянно. В принципе и реализуется оно достаточно прозрачно хоть с мапперами, хоть в AR, как мне казалось.
Хотелось бы услышать мнения на этот счёт. А главное, там тема подробно не раскрыта и если этот подход устарел, то что актуально на данный момент и как реализуется/применяется? Возможно ссылки на статьи или примеры?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Использую на основном проекте. Физически данных не удаляем, типа профиля пользователя и т.д. Только ставим флажок - deleted. Избавляет от гемора с связанными данными, а их у нас очень много =\
 

stalxed

Новичок
@Sufir, видел данный подход в SugarCRM последних версий.
Прикольная штука, у них реализовано так, что если удаляешь запись - ставится флаг удален.
А крон каждый день такие "удаленные" данные(если после удаления прошло n дней) уже реально удаляет и удаленные данные записывает в специальную папку в текстовом виде.
Я был в восторге от их идеи... Минусов реально не вижу.
 

fixxxer

К.О.
Партнер клуба
По слайдам непонятно, в чем проблемы. Наверное, doctrine-специфика.
 

Sufir

Я не волшебник, я только учусь
Вероятно, хотя и в doctrine можно вполне удобно и достаточно просто реализовать soft-delete без особых сложностей. Если в остальном всё понятно в слайдах, то этот момент меня смутил, в т.ч. "come from an era where keeping everything in a single DB was required", что как бы намекает, что этот подход в принципе устарел и имеются альтернативы.
 

fixxxer

К.О.
Партнер клуба
Ну, он типа предлагает разруливать это состоянием на уровне domain model. Makes sense, если предполагается, что это относится к уровню domain model (скажем, есть штатная процедура восстановления). Если же не предполагается, и на уровне domain это именно удаление - не вижу проблем с софт делитами, это такой infrastructure/maintenance hack, из инфраструктуры никак не протекающий при правильной реализации. Причем тут single db, непонятно вообще, какая разница?

Вообще у него там много спорного, местами похоже на легкий mongodb головного мозга.
 
Последнее редактирование:

hell0w0rd

Продвинутый новичок
В node есть ORM sequelize, это AR, но за неимением лучшего использую именно ее. В ней концепция soft deletes встроенна повсеместно.
То есть если для сущности включить soft delete, то вызов метода destroy просто вставит дату в deleted_at, все запросы прямо внутри ON джойна будут учитывать deleted_at.
Так что это скорее проблема исключительно доктрины. У нее вообще туча проблем, начиная от высокой, не оправданной сложности кода, заканчивая решением всех проблем кешированием где только можно. Но это мнение могло устареть на год - полгода.

А он вместо soft delete предлагает immutable? То есть только insert, никаких update, delete? На сколько я знаю это тоже подход, где-то он оправдан, а где-то нет. Так что странно развешивать ярлыки.
 

fixxxer

К.О.
Партнер клуба
В node есть ORM sequelize, это AR, но за неимением лучшего использую именно ее
bookshelf еще есть, мне показался вменяемее, DDL на уровне модели - какое-то совсем злое зло
 

hell0w0rd

Продвинутый новичок
bookshelf еще есть, мне показался вменяемее, DDL на уровне модели - какое-то совсем злое зло
ты код почитай. Когда я смотрел, там модели из backbone использовали для собственно моделей и коллекции для коллекций. Мне такой подход не сильно понравился.
DDL - это ты про что конкретно? Он там через всю ORM тоже протянут. Например вместо привычного квери-билдера там чем-то похожая на монгу конфигурация. Вроде
Код:
User.findAll({
  where: {
    foo: {$ne: bar}
  }
});
Но с этим можно более-менее жить.
 

WMix

герр M:)ller
Партнер клуба
если история нужна, insert select; delete; а так просто delete, ну те. проблем больше если удалил навсегда а через пол года инвойс нужно напечатать.
 

AnrDaemon

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

WMix

герр M:)ller
Партнер клуба
Да знаешь, на каждом уровне одинакого, для кого и удалить сообщение может быть роковым
 
Сверху