代码之家  ›  专栏  ›  技术社区  ›  kerem

趋势超过1亿行

sql
  •  6
  • kerem  · 技术社区  · 14 年前

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

    1 day = 86.400 seconds
    1 month = 2.592.000 seconds
    

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

        TREND_TIME datetime (clustered_index)
        TREND_DATA1 real
        TREND_DATA2 real
        ...
        TREND_DATA20 real
    
    3 回复  |  直到 14 年前
        1
  •  2
  •   Gilad    14 年前

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

        2
  •  3
  •   Robert Christie    14 年前

    你考虑过吗 RRDTool -它为时间序列数据提供循环数据库或循环缓冲区。您可以按自己喜欢的时间间隔存储数据,然后定义合并点和合并函数,例如(sum、min、max、avg)在给定的时间段、1秒、5秒、2天等。因为它知道您需要什么合并点,所以它不需要在对所有数据点进行合并后存储它们。

    Ganglia Cacti

    如果您确实需要所有的数据点,请考虑仅将其用于聚合。

        3
  •  0
  •   Adam Houldsworth    14 年前

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

    你试过吗?表现差吗?