(TL; DR)
Проблема, которую необходимо решить с помощью проекта:
быстрый поиск связанных временных рядов с различной частотой.
Инструмент:
Таблица сервера sql и дизайн индекса.
Более длинная версия:
Я хочу рассчитать различные функции в один или несколько раз или через определенные интервалы времени с использованием входных данных из временных рядов с различным разрешением. И моя интуиция подсказывает мне, что мне нужно подумать о дизайне таблиц / индексов, учитывая, что объект должен иметь быстрое соединение строк.
Советы по проектированию, которые я видел до сих пор, в основном касаются извлечения одного временного ряда по сравнению с проблемой, данной здесь, извлечения значений из разных временных рядов в один и тот же момент времени. Схема таблицы для данных нескольких временных рядов
Общая цель моего плана следующая:
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,1) NOT NULL,
[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,1) NOT NULL,
[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], так как рядравномерно пространство в пределах определенной серии.
Таким образом, с учетом этой схемы, какова наилучшая стратегия индекса / разбиения, позволяющая осуществлять быстрый поиск различных рядов в заданный промежуток времени или времени.