Я хотел бы рассказать коллегам SO'ers о своих мнениях о лучших структурах данных породы, которые будут использоваться для индексирования временных рядов (например, данных по столбцам, а также линейных).
Существуют два основных типа временных рядов, основанных на характеристике дискретизации/дискретизации:
-
Регулярная дискретизация (каждый образец берется с общей частотой)
-
Нерегулярная дискретизация (Образцы берутся в суровых временных точках)
Запросы, которые потребуются:
-
Все значения в диапазоне времени [t0, t1]
-
Все значения в диапазоне времени [t0, t1], которые больше/меньше v0
-
Все значения в диапазоне времени [t0, t1], которые находятся в диапазоне значений [v0, v1]
Наборы данных состоят из суммированных временных рядов (которые относятся к нерегулярной дискретизации) и многомерных временных рядов. Соответствующий набор данных имеет размер около 15-20 ТБ, поэтому обработка выполняется распределенным образом - поскольку некоторые из запросов, описанных выше, приведут к тому, что наборы данных будут больше, чем физический объем памяти, доступный в любой системе.
Распределенная обработка в этом контексте также означает отправку требуемого специфического вычисления данных вместе с запросом временного ряда, так что вычисление может происходить как можно ближе к данным, что возможно - чтобы уменьшить node до node коммуникация (несколько похожая на парадигму карты/уменьшения) - в непосредственной близости от вычислений и данных очень важно.
Другой проблемой, с которой должен справиться индекс, является то, что подавляющее большинство данных является статическим/историческим (99.999...%), однако на ежедневной основе добавляются новые данные, думают о "в поле senors" или "рыночные данные". Идея/требование состоит в том, чтобы иметь возможность обновлять любые текущие вычисления (в среднем, garch и т.д.) С минимальной задержкой, некоторые из этих выполняемых вычислений требуют исторических данных, некоторые из которых будут больше, чем то, что может быть достаточно кэшировано.
Я уже рассматривал HDF5, он работает хорошо/эффективно для небольших наборов данных, но начинает тащить, когда наборы данных становятся больше, также нет встроенных возможностей параллельной обработки из интерфейса.
Поиск предложений, ссылок, дальнейшего чтения и т.д. (C или С++-решения, библиотеки)