(TL; DR)
设计要解决的问题:
快速检索不同频率的相关时间序列。
工具:
sql server表和索引设计。
更长的版本:
我希望使用来自不同分辨率的时间序列的输入数据,在一个或仅特定的时间或间隔上计算不同的函数。而且我的直觉告诉我,鉴于对象是行的快速连接,因此我需要对表/索引设计进行更多考虑。
到目前为止,我所看到的设计建议主要与检索单个时间序列有关,而不是在这里手动处理问题,在同一时间点从不同时间序列中检索值。 Table design for multiple time series data
我的目标总体设计如下:
CREATE TABLE [dbo].[time_series_definition](
[ID] [int] IDENTITY(1,1) NOT NULL,[data_type_description] [nvarchar](100) NULL,[duration_sec] [int] NOT NULL,CONSTRAINT [PK_time_series_definition] PRIMARY KEY CLUSTERED
(
[ID] ASC
))
CREATE TABLE [dbo].[time_series](
[ID] [int] IDENTITY(1,[start_date] [date] NOT NULL,[end_date] [date] NOT NULL,[time_series_definition_ID] [int] NOT NULL,[source] [nchar](30) NULL,[description] [nvarchar](100) NULL,[update_time] [datetime2](0) NOT NULL,CONSTRAINT [PK_time_series] PRIMARY KEY CLUSTERED
(
[ID] ASC
))
ALTER TABLE [dbo].[time_series] WITH CHECK ADD CONSTRAINT [FK_time_series_time_series_definition] FOREIGN KEY([time_series_definition_ID])
REFERENCES [dbo].[time_series_definition] ([ID])
CREATE TABLE [dbo].[data_values](
[ID] [int] IDENTITY(1,[date_time] [datetime2](0) NOT NULL,[time_series_ID] [int] NOT NULL,[value] [decimal](19,8) NULL,CONSTRAINT [PK_data_values] PRIMARY KEY CLUSTERED
(
[ID] ASC
))
ALTER TABLE [dbo].[data_values] WITH CHECK ADD CONSTRAINT [FK_data_values_time_series] FOREIGN KEY([time_series_ID])
REFERENCES [dbo].[time_series] ([ID])
[start_date],[end_date]值是多余的,但是相信在[data_values]表中查找之前知道序列的开始/结束时,这可能会提高查询速度。
[duration_sec]是为了节省[data_values]表中的空间,因为该系列在特定系列中是均匀的空间。
因此,鉴于此设计,最佳的索引/分区策略是在给定的时间或时间间隔内快速查找不同序列的最佳方法。