2016-05-29 3 views
1

Dans un système basé sur un événement, les données historiques sous la forme d'événements ne sont jamais perdues. Cela pourrait entraîner un état corrompu. Maintenant, imaginez qu'il y a une décision de justice, indiquant que certaines données doivent être supprimées (par exemple, les moteurs de recherche ont dû supprimer des données spécifiques de confidentialité). Comment allez-vous y parvenir?Comment gérer une demande de suppression de données exécutée par la loi dans un système d'origine d'événement?

Répondre

1

C'est un really good question.

Jusqu'ici, j'ai appris deux possibilités. Partie facile d'abord: si vous utilisez le sourcing d'événements, alors toutes vos vues de vos données devraient être dérivables des événements dans votre magasin d'événements. Par conséquent, toutes les données que vous avez stockées pour la lecture (caches, écrans, projections, rapports) peuvent être époustouflées et régénérées après avoir nettoyé les données contaminées du magasin d'événements.

Vous n'avez donc qu'à comprendre cette partie. D'abord, si les données corrompues ne pénètrent jamais dans le magasin, vous n'avez pas à vous soucier de les récurer. Par exemple, des informations sensibles peuvent être isolées dans un magasin de valeurs clés; les références à ces données dans le magasin d'événements sont toujours par clé de substitution. Lorsque vous devez effectuer un nettoyage, les données de la banque de valeurs clés sont numérotées, vous avez un tas d'événements qui pointent vers quelque chose de plus illisible et vous devez simplement vous assurer que vos modèles de lecture continuent à fonctionner si les données référencées ne le sont pas. disponible.

Si les données doivent entrer dans le magasin d'événements (car elles sont nécessaires au maintien de l'intégrité du modèle de domaine), l'idée d'agrégats peut être utile.

Agrégats est une idée tirée de , l'idée de base est que votre domaine peut être décomposé en éléments qui n'ont pas besoin de partager des données directement. Sur l'agrégat ne référence jamais les données dans un autre directement; à la place, vous utilisez des références indirectes par ID; l'identifiant lui-même étant une autre clé de substitution.

Puisque ces agrégats sont isolés les uns des autres, ils peuvent avoir leur propre historique d'événements. Dans ce cas, vous pouvez nettoyer les données contaminées en éliminant simplement les agrégats qui ont été contaminés. Vous venez de supprimer les flux d'événements.

Une telle réponse ne vous met pas dans un état corrompu, juste incohérent. Tout fonctionne toujours, il y a juste un tas de données manquantes.

Il y a aussi l'arme d'un "événement de compensation" disponible dans la boîte à outils; vous pourriez être en mesure d'introduire un nouveau flux d'événements qui ramène le système à un état cohérent. Par exemple, si le nettoyage d'un ensemble de transactions entraîne un déséquilibre, vous pouvez publier un événement qui crée une charge contre iCouldTellYouButThen ....