2017-10-14 6 views
0

Je souhaite stocker certaines de mes données dans des fichiers relativement gros (quelques Go par fichier). J'aimerais utiliser le sourçage d'événement et enregistrer les événements liés à ces fichiers, par ex. FileCreated: titre, description, timestamp, auteur, personal, encryptionkey, etc. Après un certain temps, certains fichiers ne seront plus nécessaires, et ils prennent beaucoup de place. Donc, pour libérer de l'espace, j'ai besoin de les supprimer. Cela est problématique, car je vais avoir l'historique dans le stockage des événements, mais pas le fichier dans le système de fichiers. Est-il possible de conserver l'intégrité et de supprimer les deux? Ou existe-t-il une meilleure pratique pour ce problème?Source d'événements - supprimer les fichiers associés aux événements

Répondre

0

Comme je n'ai pas eu de réponse, j'essaie d'y répondre moi-même.

Il est possible de supprimer un événement de l'historique, vous devez créer un nouveau stockage d'événements et filtrer les événements pour le même identifiant d'agrégat dont vous voulez vous débarrasser. Une fois que vous avez terminé, vous pouvez basculer vers le nouveau stockage d'événements et supprimer l'ancien. Vous devez probablement relire les projections également. C'est donc très similaire à une migration complète, cela prend beaucoup de temps. Dans le cas actuel, ce n'est pas un problème si je dois le faire seulement une fois par an. Un autre problème avec le stockage de ces données dans le stockage de l'événement que je diffuse à partir de là ou que j'ai besoin de le dupliquer pour le servir. Ce dernier n'est pas toujours une bonne solution, car il faut parfois trop de temps pour copier et pour enregistrer les données dont vous avez besoin pour le diffuser de toute façon, sinon vous aurez très peu de mémoire. Le stockage des événements doit donc prendre en charge les pièces jointes en streaming.

Une autre solution pour garder les grandes données relatives dans les fichiers et afficher quelque chose comme 404 non trouvé, ou le fichier a été supprimé car ceci et cela. Je le vois souvent. Dans ce cas, vous pouvez conserver l'événement dans le stockage et, par exemple, ajouter un événement ContentRemoved dans lequel vous pouvez sélectionner la cause. Une autre option pour cacher le fichier supprimé, de sorte qu'il ne sera pas répertorié par l'application, c'est habituel je suppose aussi. Cette solution a aussi des inconvénients. La migration est plus complexe avec cette approche, car vous devez déplacer à la fois le stockage des événements et les fichiers. Si vous supprimez accidentellement un fichier, vous ne pourrez plus l'annuler plus tard, sauf si vous avez le fichier dans la sauvegarde. Cela peut être corrigé en retardant la suppression réelle du fichier avec quelques jours, de sorte que vous pouvez l'annuler si vous changez d'avis. Une autre option pour créer une corbeille et des fichiers sera supprimée uniquement en vidant la corbeille.

Je pense que les deux solutions valent la peine d'être prises en compte et cela dépend probablement du projet réel auquel on est le mieux adapté.