2010-08-18 8 views
0

J'ai de la difficulté à trouver un bon moyen de stocker un jeu de données qui change continuellement.Comment stocker efficacement des ensembles de données en constante évolution (résultats de recherche) pour les rapports périodiques

Je souhaite effectuer un suivi et publier périodiquement des rapports sur le contenu de sites Web spécifiques. Par exemple, pour un certain site Web, je veux garder une trace de tous les documents PDF qui sont disponibles. Ensuite, je veux signaler périodiquement (disons, trimestriellement) sur le nombre de documents, le numéro de version PDF et diverses autres statistiques. En outre, je veux suivre le changement de ces mesures au fil du temps. Par exemple. Je veux représenter graphiquement l'augmentation des documents PDF offerts sur le site Web au fil du temps.

Mon entrée est essentiellement une longue liste d'URL qui pointent vers tous les documents PDF sur le site Web. Ces entrées arrivent par intermittence, mais elles peuvent ne pas coïncider avec les dates auxquelles je veux exécuter les rapports. Par exemple, au quatrième trimestre 2010, je pourrais avoir deux listes d'URL, à plusieurs semaines d'intervalle. Au premier trimestre 2011, je n'en aurai peut-être qu'un.

Je n'arrive pas à trouver comment stocker efficacement ces données d'entrée dans une base de données de sorte que je puisse facilement générer les rapports corrects. D'une part, je pourrais simplement insérer la liste complète dans un tableau chaque fois que je recevrais une nouvelle liste, avec une date d'importation. Mais je crains que la table devienne assez grande en peu de temps, et la plupart seront des URL dupliquées.

Mais, d'un autre côté, je crains qu'il ne soit assez compliqué de maintenir une liste d'URL ou de documents uniques. Surtout lorsque les documents sont ajoutés, supprimés et ré-ajoutés au fil du temps. Je crains que je pourrais entrer dans les complexités de la création d'un temporal database. Et je frémis de penser à ce qui se passe quand le document lui-même est mis à jour mais l'URL reste la même (dans ce cas, les métadonnées peuvent changer, comme la version PDF, la taille du fichier, etc.).

Quelqu'un peut-il me recommander un bon moyen de stocker ces données afin que je puisse générer des rapports à partir de lui? J'aimerais surtout avoir la capacité de générer rétroactivement des rapports. Par exemple, lorsque je souhaite suivre un nouveau site Web au premier trimestre de 2011, j'aimerais pouvoir générer un rapport à partir des données du quatrième trimestre de 2010, même si les données du premier trimestre de 2011 ont déjà été importées.

Merci d'avance!

Répondre

1

Pourquoi ne pas simplement une seule table, appelée quelque chose comme URL_HISTORY: (. Par exemple, 31-Dec-de 9999)

URL   VARCHAR (PK) 
START_DATE DATE  (PK) 
END_DATE  DATE 
VERSION  VARCHAR 

Have END_DATE comme NULL ou une date fictive appropriée où la version n'a pas été remplacée; définissez END_DATE comme la dernière date de validité de la version et créez un nouvel enregistrement pour la nouvelle version, par exemple.

+------------------+-------------+--------------+---------+ 
|URL    | START_DATE | END_DATE | VERSION | 
|..\Harry.pdf  | 01-OCT-2009 | 31-DEC-9999 | 1.1.0 | 
|..\SarahJane.pdf | 01-OCT-2009 | 31-DEC-2009 | 1.1.0 | 
|..\SarahJane.pdf | 01-JAN-2010 | 31-DEC-9999 | 1.1.1 | 
+------------------+-------------+--------------+---------+ 
+0

Merci, c'est ce que je vais faire. Fondamentalement, il s'agit de la moitié d'une base de données temporelle, enregistrant uniquement les heures d'arrivée valides et non la transaction de/à l'heure. –

0

Qu'en est-il de l'utilisation d'une base de documents et au lieu de sauvegarder chaque URL, vous enregistrez un document qui contient une collection d'URL. À ce stade, chaque fois que vous exécutez un processus qui itère sur toutes les URL, vous obtenez tous les documents qui existent un délai ou des qualifications que vous avez sur cela, puis exécutez toutes les URL à travers chacun des documents.

Cela peut également être émulé dans le serveur sql en sérialisant simplement votre objet sur json ou xml et en stockant la sortie dans une colonne appropriée.

Questions connexes