Как делать запросы на временные ряды HDF5

StackOverflow https://stackoverflow.com/questions/5374447

  •  28-10-2019
  •  | 
  •  

Вопрос

Я сохраняю (не равноудаленные) временные ряды в виде таблиц в файлах HDF5, используя API H5TB. Формат такой:

time   channel1   channel2
0.0    x          x
1.0    x          x
2.0    x          x

Есть также вставки «подробные данные», как это:

time   channel1   channel2
0.0    x          x
1.0    x          x
1.2    x          x
1.4    x          x
1.6    x          x
1.8    x          x
2.0    x          x

Теперь я хочу сохранить данные в другом формате данных, и поэтому мне нравится «запросить» файл HDF5 так:

select ch1 where time > 1.6 && time < 3.0

Я думал о нескольких способах сделать этот запрос:

  1. Существует встроенная функция под названием B-Tree Index. Можно ли использовать это для индексации данных?
  2. Мне нужно выполнить двоичный поиск на канале времени, а затем прочитать значения канала
  3. Я сам создаю индекс (и обновляю его всякий раз, когда есть вставка деталей). Какой будет лучший алгоритм для использования здесь?

Основной мотивацией для индекса было бы иметь быстрые ответы на запросы.

Что бы вы здесь предложили?

Это было полезно?

Решение

Я нашел еще одно (очевидное) решение, наконец, сам. Самый простой способ - открыть файл HDF5 только прочитать канал времени и создать карту памяти, прежде чем читать каналы данных. Этот процесс может быть даже оптимизирован путем чтения канала временного уровня с редкой гиперслябом.

Когда индексы в определенное время известны, данные могут быть прочитаны.

Другие советы

Предполагая, что вы не спрашиваете о том, как проанализировать данные из файла HDF5, просто о том, как использовать данные после разбора ....

Данный class channel_data { ... };, а std::map<double, channel_data> должен соответствовать вашим потребностям, в частности std::map<>::lower_bound() а также std::map<>::upper_bound().

По -видимому, популярный подход к решению этой проблемы используется растровая индексация. Анкет Есть также документы, написанные на этом, но они, похоже, не опубликовали какой -либо код.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top