Event Sourcing - Как удалить данные в eventstore?

Как обойти проблему удаления данных в eventstore?

Мне нужно постоянно и полностью удалять некоторые данные, чтобы соблюдать законы о конфиденциальности.

Я нашел эти альтернативы:

  • Зашифруйте данные, которые вам нужно удалить, и сохраните ключ шифрования в своей собственной таблице. Когда данные нужно удалить, тогда вы удаляете только ключ шифрования.

  • Использовать источник событий для данных, которые не нуждаются в удалении, со ссылкой на базу данных CRUD для конфиденциальных данных, которые необходимо удалить.

Есть ли другие способы сделать это?

Ответ 1

Я сделал это месяц назад. Пытался сделать это как можно проще. Я просто воспроизвел весь магазин событий, изменил данные событий и, наконец, сохранил событие в новом хранилище событий. Другими словами, миграция. Когда все закончится ОК, я удалил/выполнил резервное копирование старого хранилища. После этого я переиграл новое хранилище событий против прогнозов из-за изменений.

Если у вас нет внедренного шифрования, вам нужно как-то добавить его. Подобно воспроизведению всего хранилища событий.

PS: Просто хочу упомянуть для других читателей, что причины изменения хранилища событий действительно ограничены. Не используйте его, кроме случаев, когда соответствует законам о конфиденциальности или действительно неприятной ошибкой. Если вам нужно удалить данные пользователя, вы можете сделать одну из двух вещей:

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

Ответ 2

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

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

Проверить, что ваша система все еще функционирует с использованием нового хранилища событий; может регидратировать все агрегаты и генерировать все прогнозы/представления/readmodels/whaterverycallthem.

Удалить старый хранилище событий.

Ответ 3

EventStore из geteventstore.net позволяет убирать события с истекшим TTL. Обычно это временные события, такие как статистика или что-то, что у вас есть, т.е. Должны быть удалены через некоторое время.

Чтобы не разорвать вашу модель, обычно можно использовать моментальный снимок для исправления состояния объекта в какое-то время, а затем предыдущие события можно удалить, не нарушая работу системы.