我们正在设计一个数据库(SQLServer 2005)来存储来自我们仪器的测量数据。每秒,每个仪器将返回5个不同的值(所有浮点数)-例如max、min、avg等。在设计数据库时,是将所有这些值存储在单个表中(每行包含一个时间戳、类型和值),还是将它们存储在单独的表中(即: avgtable、maxtable、mintable),每行包含一个时间戳和值?我们将存储多达100台仪器的数据,它们将一次运行数月,因此数据量将变得相当大。
其中一种设计是否提供了比另一种设计更好的性能?
谢谢
发布于 2011-04-21 23:38:58
存储每个测量值可能不是一个好主意。大多数(不是所有)时间序列数据都是高度重复的,通常只记录具有开始时间和结束时间的测量变化,或者采用其他压缩和编码方法就足够了。
查看进程历史记录和复杂事件处理(CEP)系统,以了解正在使用的不同系统以及可用的技术。有许多工具和技术用于支持您的场景类型。OSISoft、StreamBase和Oracle CEP是一些可用的软件包。由于您是微软的客户,因此您可能还会对微软针对SQL Server的CEP产品感兴趣: StreamInsight。
发布于 2011-04-21 23:00:50
您最好使用all in 1表,否则您将不得不将这些表连接在一起来查看单个度量,并重复日期、时间和可能的其他字段,这也将导致更大的数据库。连接表是最昂贵的部分。还建议使用主键字段,例如bigint IDENTITY(1,1),这样您就可以通过ID引用记录,以便更快地进行搜索。
https://stackoverflow.com/questions/5745815
复制相似问题