我们正在设计一个数据库(SQLServer 2005)来存储我们仪器的测量数据。每一秒,每个仪器将返回5个不同的值(所有浮点数) - 例如max,min,avg等。在设计数据库时,最好将所有这些值存储在一个表中(每行包含一个时间戳,类型和值),或将它们存储在各个表中(即:avgtable,maxtable,mintable),每行包含一个时间戳和值?我们将存储多达100台仪器的数据,它们将一次运行数月,因此数据将变得非常大。
一种设计是否提供了比另一种更好的性能?
由于
答案 0 :(得分:1)
存储每个测量值可能不是一个好主意。大多数(并非所有)时间序列数据具有高度重复性,通常仅记录测量中的开始时间和结束时间的变化,或采用其他压缩和编码方法。
了解Process Historian和复杂事件处理(CEP)系统,了解正在使用的不同系统以及可用的技术。有许多工具和技术可用于支持您的场景类型。 OSISoft,StreamBase和Oracle CEP是一些可用的软件包。由于您是Microsoft客户,您可能也对Microsoft的SQL Server CEP产品感兴趣:StreamInsight。
答案 1 :(得分:0)
你对1 in table中的所有内容都更好,否则你必须将这些表连接在一起以查看单个测量并重复日期时间以及可能还会导致更大数据库的其他字段。加入表是很昂贵的。建议使用主键字段,例如bigint IDENTITY(1,1),这样您就可以按ID引用记录,以便更快地搜索。