Question

J'ai un projet impliquant un système de vote par Internet. Les valeurs actuelles et les données connexes sont stockées dans plusieurs tables. Les données historiques un aspect important de ce projet, donc j'ai aussi créé des tables de vérification auxquels les données actuelles seront transférées sur une base régulière.

Je trouve cette stratégie très inefficace. Même si je archiver les données sur une base quotidienne, le nombre de lignes deviendrai énorme, même si seulement 1 ou 2 utilisateurs font des mises à jour sur un jour donné.

L'alternative suivante je peux penser est que stocker les entrées qui ont changé. Cela signifie avoir à construire la logique pour créer automatiquement une vue d'un jour donné. Cela signifie moins de lignes stockées, mais une grande complexité.

Mon idée finale est un peu moins conventionnel. Étant donné que les données historiques seront à des fins de rapports, il n'y a pas besoin pour les internautes d'avoir un accès rapide. Je pense que mon db pourrait avoir aucune donnée historique en elle. DB ne représente que l'état actuel. Ensuite, tous les jours, l'ensemble db peut être chargé en objets (nombre d'utilisateurs / données est relativement faible), puis sérialisé à quelque chose comme XML ou JSON. Ces fichiers peuvent être mis au format avec la veille et stockés. En fait, SVN pourrait le faire pour moi. Quand je veux les données pour un jour passé donné, le système doit récupérer la version pour ce jour-là et désérialiser en objets. Ceci est évidemment une opération coûteuse mais les performances ne sont pas tellement une préoccupation ici. J'envisage d'utiliser LINQ pour ce que je pense simplifierait les choses. La procédure de sérialisation devrait être assez organisée pour la différence de bien travailler.

Quelle approche prendriez-vous?

Merci

Était-ce utile?

La solution

Tout ce que vous nous avez dit au sujet de votre système est qu'il implique votes. Tant que vous stockez horodatages pour quand vous votes ont été exprimés devriez être en mesure de générer un rapport décrivant le décompte de l'État de vote à tout moment ... non?

Par exemple, dire que j'ai un système qui cadre fonctionnalités préférées (les yeux, le sourire, les fesses, ...). Si je veux savoir combien de votes il y avait une caractéristique particulière à une date particulière, je voudrais simplement correspondre tous les votes pour la fonction avec un horodatage inférieur ou égal à cette date.

Si vous voulez avoir une histoire d'autres choses, alors vous suivre une approche similaire.

Je pense que c'est la façon dont il est fait.

Autres conseils

Si vous demandez comment essentiellement des révisions de données sont stockées dans des bases de données relationnelles, je regarderais la façon dont les wikis font.

Wikis sont tous de garder l'historique des révisions détaillées. Ils utilisent des bases de données relationnelles simples pour le stockage.

Tenez compte de la base de données de Wikipédia schéma .

Avez-vous envisagé d'utiliser un vrai système de contrôle de version plutôt que d'essayer de caser une base de données à sa place? Je me suis tout à fait partielle git, mais il y a beaucoup d'options. Ils ont tous un bon soutien pour les différences entre les versions, et ils ont tendance à être bien optimisé pour ce genre de travail.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top