Sql 趋势为1亿+;排

Sql 趋势为1亿+;排,sql,Sql,我有一个每秒记录一些测量值的系统。存储趋势数据(对应于特定秒数的值)的最佳方法是什么 1 day = 86.400 seconds 1 month = 2.592.000 seconds 大约1000个值,每秒钟跟踪一次 目前有50个表将趋势数据分组,每个表有20列。这些表包含超过1亿行 TREND_TIME datetime (clustered_index) TREND_DATA1 real TREND_DATA2 real ... TREND_DA

我有一个每秒记录一些测量值的系统。存储趋势数据(对应于特定秒数的值)的最佳方法是什么

1 day = 86.400 seconds
1 month = 2.592.000 seconds
大约1000个值,每秒钟跟踪一次

目前有50个表将趋势数据分组,每个表有20列。这些表包含超过1亿行

    TREND_TIME datetime (clustered_index)
    TREND_DATA1 real
    TREND_DATA2 real
    ...
    TREND_DATA20 real

问题出在数据库模式上吗

1秒到多个趋势显然首先会显示一个单独的表,其中包含一个秒表外键。或者,如果“多个趋势值”由列而不是行表示,则始终可以将列附加到秒表中,并产生空值


你试过了吗?性能差吗?

我会改变数据保存方法,而不是将“原始”数据保存为值,而是将5-20分钟的数据保存在一个数组中(内存,BL端),使用基于LZ的算法压缩该数组,然后将数据作为二进制数据存储在数据库中。另外,最好保存Max/Min/Avg/等。。该二进制块的信息

当您想要处理数据时,您可以一块接一块地处理数据块,从而为应用程序保持较低的内存配置。这种方法稍微复杂一些,但在内存/处理方面非常可扩展

希望这有帮助。

您考虑过吗?它为时间序列数据提供循环数据库或循环缓冲区。您可以按自己喜欢的时间间隔存储数据,然后定义合并点和合并函数,例如,给定时间段、1秒、5秒、2天等的合并点和合并函数(总和、最小值、最大值、平均值)。因为它知道您需要什么样的合并点,所以在数据点被合并后不需要存储所有数据点

在封面下使用这个,它很容易从多种语言中使用


如果你确实需要所有的数据,考虑使用它只是为了聚合。

趋势数据会被读取或更新很多吗?你应该指定RDBMS——这是一个物理数据库实现而不是逻辑设计的问题,RDBMS在这里很重要。它将被大量阅读以显示多种图形。使用Microsoft SQL Server Standard 2005。我绝对支持这种方法,我使用Ganglia多年来跟踪许多数据系列,效果非常好!谢谢,神经节和仙人掌似乎很有用。但我找不到用于RRDTool的C#库。我认为这种方法不可扩展,因为当我想查看一个月的数据时,我必须进行大量解压缩。我知道你的意思。为了解决这个问题,如果可能的话,对一个月/一年的压缩数据进行汇总,并将该汇总存储在数据库中。您可能需要存储表示对基础数据执行的不同操作的各种摘要,但您将获得令人眼花缭乱的速度。