数据库中有大量的时间表

时间:2012-07-05 09:06:03

标签: database oracle compression

我有相当多的数据(约400万个数据点),这些数据被组织在一组约100,000个时间段中。这些数据可能每天都在变化,出于修订的原因,安全性必须每天存档。

显然我们正在谈论有效处理太多数据的方式,因此我对样本数据进行了一些分析。约。 60%到80%的课程在两天之内根本没有变化,其余的只有非常有限的元素变化。总而言之,我预计会有不到10百万的数据点变化。

问题是,我该如何利用这些知识?我知道像SVN使用的Delta-Trees和类似技术这样的概念,但我更喜欢,如果数据库本身能够处理这种语义压缩。我们正在使用Oracle 11g进行存储,问题是,有没有比自制解决方案更好的方法?

澄清

我在谈论代表每小时能量流的时间表。这样的时间段可能在过去开始(如2005年),每年包含8760个元素,并可能在2020年(目前)之前的任何时间结束。每个时间段都由一个唯一的字符串标识。

课程本身或多或少是无聊的: “Course_XXX:1.1.2005 0:00 5; 1.1.2005 1:00 5; 1.1.2005 2:00 7,5; ...”

我的任务是让这些课程的日常变化可见,并且这样做,每天在特定时间必须拍摄快照。我的希望是,一些无损语义压缩将使我免于每天存档~20GB。

1 个答案:

答案 0 :(得分:0)

基本上我的源数据如下所示:

Key | Value0 | ... | Value23

归档我需要添加一个额外维度的数据,该维度直接或间接地告诉我从源系统加载数据的时间,所以我的归档数据库是

Key | LoadID | Value0 | ... | Value23

LoadID或多或少是访问源数据库的时间。

现在,在我的场景中压缩很容易。 LoadID随着每次运行而增长,我可以给出一个范围,即

Key | LoadID1 | LoadID2 | Value0 | ... | Value23

其中,LoadID1给出了第一个负载的ID,其中24个值被观察到,而LoadID2给出了最后一个连续负载的ID,其中24个值被观察到。

在我的方案中,这会将数据库中存储的数据量减少到1/30