时间序列数据库设计

时间:2014-01-29 03:00:27

标签: sql-server database time

我是数据库设计的初学者,研究实现时间序列数据的方法。 基本上,我想设计一个存储电池指标的数据库,即用户的电流,电压和时间。 我想的越多,我就越开始迷惑自己。请帮我指出方向。到目前为止,我想出了以下伪代码:

   Table: User
    Column 1: UserID( Primary Key )
    Column 2: UserName

    Table: Battery 
    Column 1: BatteryID  ( Primary Key )
    Column 2: ManufactureSerial
    Column 3: ManufactureDate
    Column 4: UserID (Foreign Key )

    Table: BatteryLog
    Column 1: Voltage 
    Column 2: Current 
    Column 3: SOC 
    Column 4: DateTime 
    Column 5: BatteryID (Foreign Key)

现在,我的问题是:什么应该是BatteryLog表的主键? batterylog可以在内部的指定时间包含数百万个时间序列行。 我现在正在使用SqlServer关系数据库。它有优化设计吗?

感谢您对我的研究的帮助!

3 个答案:

答案 0 :(得分:1)

您可以为BatteryLog表格创建自动增量主键:

[BatteryLogID] [int] IDENTITY(1,1) NOT NULL

这将用于每条记录的唯一标识符。

或者,您可以在BatteryID[DateTime]上创建复合主键,如果它们对每条记录也是唯一的(通常情况下是时间序列)

答案 1 :(得分:0)

为什么不使用现成的时间序列数据库,这些数据库经过精心设计和优化,可以有效地存储和分析带时间戳的观测值。

初学者数据库列表:https://en.wikipedia.org/wiki/Time_series_database

答案 2 :(得分:0)

我可以为关系数据库建议的唯一优化是:

Table: BatteryLog
Column 1: SOC 
Column 2: DateTime 
Column 3: BatteryID (Foreign Key)
Column 4: Voltage00
Column 5: Current00
Column 6: Voltage01
Column 7: Current01
...
Column 124: Voltage59
Column 125: Current59

基本上,该表的每一行包含一分钟的电流和电压测量值。您可以将数据缓存在设备上,并仅在一分钟内将其发送到数据库。缺点是该方案仅适用于一种分辨率(在这种特定情况下为1秒)。它可以调整以支持可变分辨率,但它不支持可变分辨率或稀疏时间序列。

实时时间序列数据库更易于处理,而且它们具有更好的性能特征。

相关问题