Event Sourcing - Как удалить данные в eventstore?
Как обойти проблему удаления данных в eventstore?
Мне нужно постоянно и полностью удалять некоторые данные, чтобы соблюдать законы о конфиденциальности.
Я нашел эти альтернативы:
-
Зашифруйте данные, которые вам нужно удалить, и сохраните ключ шифрования в своей собственной таблице. Когда данные нужно удалить, тогда вы удаляете только ключ шифрования.
-
Использовать источник событий для данных, которые не нуждаются в удалении, со ссылкой на базу данных CRUD для конфиденциальных данных, которые необходимо удалить.
Есть ли другие способы сделать это?
Ответы
Ответ 1
Я сделал это месяц назад. Пытался сделать это как можно проще. Я просто воспроизвел весь магазин событий, изменил данные событий и, наконец, сохранил событие в новом хранилище событий. Другими словами, миграция. Когда все закончится ОК, я удалил/выполнил резервное копирование старого хранилища. После этого я переиграл новое хранилище событий против прогнозов из-за изменений.
Если у вас нет внедренного шифрования, вам нужно как-то добавить его. Подобно воспроизведению всего хранилища событий.
PS: Просто хочу упомянуть для других читателей, что причины изменения хранилища событий действительно ограничены. Не используйте его, кроме случаев, когда соответствует законам о конфиденциальности или действительно неприятной ошибкой. Если вам нужно удалить данные пользователя, вы можете сделать одну из двух вещей:
- Шифровать все пользовательские данные, и когда вам нужно их удалить, вы просто получаете
избавиться от закрытого ключа.
- Поместите все пользовательские данные в отдельный магазин/базу данных, и при необходимости вы можете просто удалить его, не затрагивая другие части системы.
Ответ 2
Во-первых, измените обработчики событий, чтобы они не требовали данных, чтобы вещи не прерывались при его удалении.
Затем создайте небольшое приложение, чтобы прочитать все ваши события и записать новые события в новый магазин событий без необходимых данных.
Проверить, что ваша система все еще функционирует с использованием нового хранилища событий; может регидратировать все агрегаты и генерировать все прогнозы/представления/readmodels/whaterverycallthem.
Удалить старый хранилище событий.
Ответ 3
EventStore из geteventstore.net позволяет убирать события с истекшим TTL. Обычно это временные события, такие как статистика или что-то, что у вас есть, т.е. Должны быть удалены через некоторое время.
Чтобы не разорвать вашу модель, обычно можно использовать моментальный снимок для исправления состояния объекта в какое-то время, а затем предыдущие события можно удалить, не нарушая работу системы.