如何有效地存储不断变化的数据集(搜索结果)以定期报告

时间:2010-08-18 20:36:18

标签: sql database database-design data-structures reporting

我无法想出一种存储不断变化的数据集的好方法。

我想跟踪并定期报告特定网站的内容。例如,对于某个网站,我想跟踪所有可用的PDF文档。然后我想定期(比如每季度)报告文件数量,PDF版本号和各种其他统计数据。此外,我想跟踪这些指标随时间的变化。例如。我想描绘一下网站上提供的PDF文档的增长情况。

我的输入基本上是一长串指向网站上所有PDF文档的网址。这些输入间歇性地到达,但它们可能与我想要运行报告的日期不一致。例如,在2010年第四季度,我可能会获得两个URL列表,相隔数周。在2011年第一季度,我可能会得到一个。

我无法弄清楚如何有效地将这些输入数据存储在某些类型的数据库中,以便我可以轻松生成正确的报告。

一方面,我可以在每次收到新列表时将完整列表插入表格,并附上导入日期。但是我担心这张桌子会在很短的时间内变大,而且大部分都是重复的网址。

但是,另一方面,我担心维护一个唯一的URL或文档列表可能会变得非常复杂。特别是当文档被添加,删除,然后随着时间的推移重新添加。我担心我可能会陷入创建temporal database的复杂性。我不禁想到文档本身更新后会发生什么,但URL保持不变(在这种情况下,元数据可能会发生变化,例如PDF版本,文件大小等)。

任何人都可以向我推荐一种存储这些数据的好方法,以便我可以从中生成报告吗?我特别希望能够追溯生成报告。例如,当我想在2011年第一季度追踪新网站时,我希望能够从2010年第四季度的数据中生成一份报告,即使2011年第一季度数据已经导入。

提前致谢!

2 个答案:

答案 0 :(得分:1)

为什么不只是一个表,称为URL_HISTORY:

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

将END_DATE设为NULL或合适的虚拟日期(例如31-Dec-9999),其中版本未被取代;将END_DATE设置为已取代版本的最后一个有效日期,并为新版本创建新记录 - 例如。

+------------------+-------------+--------------+---------+
|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   |
+------------------+-------------+--------------+---------+

答案 1 :(得分:0)

如何使用文档数据库而不是保存每个网址,而是保存包含网址集的文档。此时,无论何时执行遍历所有URL的任何进程,您都会获得存在时间范围的所有文档或您拥有的所有文档,然后运行每个文档中的所有URL。

这也可以在sql server中模拟,只需将对象序列化为json或xml,并将输出存储在拟合列中。