我有一个系统,每秒记录一些测量值。存储趋势数据的最佳方法是什么,这些数据是与特定秒对应的值?
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
答案 0 :(得分:3)
您是否考虑过RRDTool - 它为时间序列数据提供了循环数据库或循环缓冲区。您可以按照您喜欢的任何间隔存储数据,然后定义合并点和合并功能,例如(sum,min,max,avg)给定时间段,1秒,5秒,2天等等。因为它知道什么您想要的合并点,一旦它们被聚集,就不需要存储所有数据点。
Ganglia和Cacti在封面下使用此功能,并且可以很容易地使用多种语言。
如果确实需要所有数据点,请考虑仅将其用于聚合。
答案 1 :(得分:2)
我会更改数据保存方法,而不是将'原始'数据保存为值,我会在数组中保存5-20分钟的数据(内存,BL端),使用基于LZ的算法压缩该数组,然后存储数据库中的数据为二进制数据。此外,保存该二进制块的最大/最小/平均/等信息会很好。
如果要处理数据,可以在块之后处理数据块,并为此保留应用程序的低内存配置文件。这种方法稍微复杂一些,但在内存/处理方面具有很高的可扩展性。
希望这会有所帮助。
答案 2 :(得分:0)
问题是数据库架构吗?
1秒到多个趋势显然首先会显示一个带有秒表外键的单独表。或者,如果“许多趋势值”由列而不是行表示,则可以始终将列附加到秒表并产生空值。
你试过吗?表现不佳?