我有一个每秒记录一些测量值的系统。存储趋势数据的最佳方法是什么?趋势数据是对应于特定秒值的。
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发布于 2010-07-28 20:23:05
我会改变保存数据的方法,而不是将“原始”数据保存为值,而是将5-20分钟的数据保存在一个数组(内存,BL侧)中,使用基于LZ的算法压缩该数组,然后将数据作为二进制数据存储在数据库中。另外,保存Max/Min/Avg/等也很好。该二进制块的信息。
当您想要处理数据时,您可以一个接一个地处理数据块,这样就可以为您的应用程序保持较低的内存配置文件。这种方法有点复杂,但在内存/处理方面可伸缩性很强。
希望这能有所帮助。
发布于 2010-07-29 03:39:06
您是否考虑过RRDTool -它为时间序列数据提供了循环数据库或循环缓冲区。您可以按任意时间间隔存储数据,然后定义合并点和合并函数,例如,给定时间段、1秒、5秒、2天等的合并点(sum、min、max、avg)。因为它知道您想要什么合并点,所以它不需要在聚合所有数据点之后存储所有数据点。
Ganglia和Cacti在幕后使用它,并且在许多语言中都很容易使用。
如果您确实需要所有数据点,请考虑仅将其用于聚合。
发布于 2010-07-20 16:10:02
问题出在数据库模式上吗?
对于许多趋势来说,1秒显然首先向您显示一个单独的表,其中包含一个秒表外键。或者,如果“许多趋势值”由列而不是行表示,则始终可以将列附加到秒表并产生空值。
你试过吗?性能是不是很差?
https://stackoverflow.com/questions/3288028
复制相似问题