Хранить удаленные строки через deleted_at или отдельную таблицу?
Добрый день!
Вопрос к highload разработчиками, но не факт :)
Есть мульти пользовательское приложение, где состояние удаленных данных, нужно будет синхронизировать с конечными пользователями.
потребность в том что бы хранить удаленные данные возникает по следующей причине:
у пользователя в indexdb хранятся данные, которые потом синхронизируются с сервером.
При синхронизации нужно получить из таблиц данные по updated_at create_at deleted_at которые были после последней синхронизации.
Вопрос в том какие есть варианты хранения удаленных данных.
Вижу два варианта.
1. Иметь колонку deleted_at где будет хранится дата удаление. В таком случае при каждом запросе в табилцу или join нужно будет уточнять. where deleted_at is NULL .
Конечно движок позволить все это авмтомитизировать.
Но как быть с производительностью, когда есть миллионы строк в таблицах и разные другие "where"
Надо будет постоянно указывать в индексах deleted_at или как сделать что бы не было проблем со скоростью получения данных? Какие есть практики.
Партицирование?
2. Иметь зеркало базы, в которую будут перемещаться удаленные строки.
Плюсы, облегчаются запросы базу.
Минусы? ну разве что синхронизировать структуру таблиц.
3. Можно создать таблицу в которой бы хранились пары table_name id deleted_at. которые можно было бы использовать для синхронизации.
Буду очень благодарен за любую информацию по этому направлению, или ресурс где можно почитать об архитектуре!
С точки зрения бизнес-логики никаких «удалённых» строк. Если запись совершенно точно никому не нужна, то она удаляется безвозвратно.
Если она нужна для «истории», версионности или ещё каких-то целей, то её нужно выставить какой-то флаг, ЯВНО отражающий её состояние — archived_at, drafted_at, obsoleted_at и прочее.
Но как быть с производительностью
Индексы. Партицирование. Шардирование.
Надо будет постоянно указывать в индексах deleted_at или как
JhaoDa, потребность в том что бы хранить удаленные данные возникает по следующей причине:
у пользователя в indexdb хранятся данные, которые потом синхронизируются с сервером.
При синхронизации нужно получить из таблиц данные по updated_at create_at deleted_at которые были после последней синхронизации.
Как я понимаю для этого мне нужно какое то время хранить строки которые были удалены, что бы можно было потом синхронизироваться.
на ум пришел еще один вариант.
Можно создать таблицу в которой бы хранились пары table_name id deleted_at. которые можно было бы использовать для синхронизации. Что думаете по этому поводу?