In einem ereignisbasierten System werden historische Daten in Form von Ereignissen niemals verworfen. Dies könnte zu einem beschädigten Zustand führen. Stellen Sie sich jetzt vor, es gäbe eine gerichtliche Entscheidung, in der einige Daten gelöscht werden müssen (zum Beispiel mussten Suchmaschinen datenschutzspezifische Daten löschen). Wie würdest du das erreichen?Wie behandelt man eine legal erzwungene Datenlöschanforderung in einem Event-Sourced-System?
Antwort
Das ist ein really good question.
Bis jetzt habe ich von zwei Möglichkeiten erfahren.
Leichter Teil zuerst: Wenn Sie Event Sourcing verwenden, sollten alle Ihre Ansichten Ihrer Daten von den Ereignissen in Ihrem Event Store ableitbar sein. Daher können alle Daten, die Sie zum Lesen gespeichert haben (Caches, Bildschirme, Projektionen, Berichte), weggeblasen und neu generiert werden, nachdem Sie die verdorbenen Daten aus dem Ereignisspeicher gelöscht haben.
So müssen Sie nur diesen Teil herausfinden.
Erstens, wenn die verdorbenen Daten nie in den Laden gelangen, müssen Sie sich keine Gedanken darüber machen, sie auszuwaschen. Zum Beispiel können vertrauliche Informationen in einem Schlüsselwertspeicher isoliert werden; Verweise auf diese Daten im Ereignisspeicher werden immer durch einen Ersatzschlüssel angegeben. Wenn Sie scrubben müssen, werden die Daten im Schlüsselwertspeicher aufgelöst, Sie haben eine Reihe von Ereignissen, die auf etwas nicht mehr lesbares zeigen, und Sie müssen nur sicherstellen, dass Ihre Lesemodelle weiterhin funktionieren können, wenn die referenzierten Daten nicht funktionieren verfügbar.
Wenn die Daten in den Ereignisspeicher gelangen müssen - weil sie benötigt werden, um die Integrität des Domänenmodells zu erhalten - dann kann die Idee von "Aggregaten" hilfreich sein.
Aggregate ist eine Idee aus ddd, die Grundidee ist, dass Ihre Domäne in Elemente zerlegt werden kann, die Daten nicht direkt teilen müssen. Aggregiert niemals direkt auf Daten innerhalb eines anderen; Stattdessen verwenden Sie indirekte Referenzen nach ID; Die ID selbst ist ein weiterer Ersatzschlüssel.
Da diese Aggregate voneinander isoliert sind, können sie ihre eigene Ereignishistorie haben. In diesem Fall können Sie die verdorbenen Daten bereinigen, indem Sie einfach alle verschmutzten Aggregate entfernen. Sie löschen nur die Ereignisströme.
Eine Antwort wie diese versetzt Sie nicht in einen fehlerhaften Zustand, nur einen inkonsistenten. Alles läuft noch, nur ein paar Daten fehlen.
Es gibt auch die Waffe eines "kompensierenden Ereignisses" im Toolkit verfügbar; Möglicherweise können Sie einen neuen Ereignisstrom einführen, der das System wieder in einen konsistenten Zustand versetzt. Wenn zum Beispiel das Bereinigen einer Reihe von Transaktionen die Bücher aus dem Gleichgewicht bringt, können Sie möglicherweise ein Ereignis veröffentlichen, das eine Gebühr für iCouldTellYouButThen ....
erstellt