Источник событий - как удалить данные в хранилище событий?

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

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

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

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

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

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


person Jan-Terje Sørensen    schedule 31.07.2014    source источник
comment
Столкнувшись с той же проблемой, мы решили изменить исходные события, содержащие данные, подлежащие удалению, и заменить все вхождения данных, которые должны быть удалены, значениями-заполнителями. Однако, если ваш вариант 2 более элегантен и подвержен ошибкам, хотя в этом случае вы не можете сохранить историю изменений (что в данном случае может быть приемлемым, поскольку это личные данные)   -  person Alexander Langer    schedule 31.07.2014
comment
вариант 1 является наиболее подходящим, потому что вы достигаете двух целей. 1. Защита данных и 2. Когда придет время забыть о них, вы просто удалите закрытый ключ. Единственная альтернатива, которую я могу добавить в ваш список, - это сохранение конфиденциальных данных в собственном потоке. затем вы просто удаляете поток.   -  person Sarmaad    schedule 31.07.2014
comment
Список рассылки ddd-cqrs освещал это за последние 2 месяца (а до этого пробовал каждые 3 месяца :)   -  person Ruben Bartelink    schedule 14.08.2014
comment
@RubenBartelink, знаете, какой был вывод? Есть ли краткое изложение обсуждения в списке рассылки?   -  person Jan-Terje Sørensen    schedule 14.08.2014
comment
Это есть на @arcone groups.google.com. Это была длинная цепочка, много вариантов, отличных идей и хороших примеров. Мне не нужно тратить время на напрасный синопсис. Вы искали список рассылки? Список обязателен к прочтению для систем ES, так что вперед!   -  person Ruben Bartelink    schedule 14.08.2014
comment
привет, Рубен, не могли бы вы прислать копию статьи из списка рассылки электронной почты? Спасибо,   -  person    schedule 07.01.2018


Ответы (3)


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

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

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

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

person CaffGeek    schedule 08.08.2014

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

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

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

  • Зашифруйте все данные пользователя, и когда вам нужно их удалить, вы просто избавитесь от закрытого ключа.
  • Поместите все данные пользователя в отдельное хранилище / базу данных, и при необходимости вы можете просто удалить их, не затрагивая другие части системы.
person mynkow    schedule 31.07.2014
comment
что делал месяц назад? вариант 1 или 2 выше? - person ; 06.01.2018
comment
Я отвечал на вопрос - ›Как удалить данные в хранилище событий? - person mynkow; 07.01.2018

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

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

person Alexey Zimarev    schedule 24.11.2016