J'ai un projet impliquant un système de vote par Internet. Les valeurs actuelles et les données associées sont stockées dans plusieurs tables. Les données historiques seront un aspect important de ce projet. J'ai donc créé des tableaux d'audit sur lesquels les données actuelles seront régulièrement transférées. Je trouve cette stratégie très inefficace.Base de données avec contrôle de la version avec utilisation efficace de diff
Même si je n'archive les données que quotidiennement, le nombre de lignes deviendra énorme même si seulement 1 ou 2 utilisateurs font des mises à jour un jour donné.
L'alternative suivante que je peux penser est seulement de stocker les entrées qui ont changé. Cela signifie qu'il faudra construire une logique pour créer automatiquement une vue d'un jour donné. Cela signifie moins de lignes stockées, mais une complexité considérable.
Ma dernière idée est un peu moins conventionnelle. Étant donné que les données historiques serviront à des fins de rapport, les utilisateurs Web n'ont pas besoin d'avoir un accès rapide. Je pense que mon db pourrait ne pas avoir de données historiques. DB ne représente que l'état actuel. Ensuite, tous les jours, le db entier peut être chargé dans des objets (le nombre d'utilisateurs/données est relativement faible), puis sérialisé à quelque chose comme XML ou JSON. Ces fichiers peuvent être différenciés avec le jour précédent et stockés. En fait, SVN pourrait le faire pour moi. Quand je veux les données pour un jour passé, le système doit récupérer la version pour ce jour et la désérialiser en objets. C'est évidemment une opération coûteuse mais la performance n'est pas vraiment un problème ici. J'envisage d'utiliser LINQ pour cela, je pense que cela simplifierait les choses. La procédure de sérialisation devrait être assez organisée pour que le diff fonctionne bien.
Quelle approche adopteriez-vous?
Merci
une chose en cours. Les votes peuvent être supprimés par les utilisateurs ou renvoyés par les administrateurs. Les autres détails sur les éléments sur lesquels les utilisateurs votent changeront également avec le temps. Il y a 4 tables et un total d'environ 20 lignes de données à archiver. –
Ma question a été formulée d'une manière assez générale parce que je trouve que c'est un problème assez général: Quelle est la manière la plus élégante/intelligente de mélanger le contrôle de version et les opérations de ligne. –