LINUX.ORG.RU

time-series DB и дополнительная секунда

 , , , ,


0

1

Есть задача хранения и обработки измерений нескольких величин (тысячи измерений в секунду). По этим данным будут вычисляться другие величины. Данные собираются постоянно (день за днём, год за годом). Для удобства вычислений, планируется рассматривать временные метки с привязкой к TAI. Т.к. важно корректно обработать данные в момент дополнительной секунды.

Для отображении результатов хочется задействовать, что-то типа Grafana. При этом подписи на шкале времени графиков должны быть приведены к нужному часовому поясу (аля Europe/Moscow), т.к. рядовой пользователь ничего не знает о TAI.

Посмотрел в сторону InfluxDB, но что-то с дополнительной секундой у него совсем никак (или я что-то делаю не так). Мне надо, чтобы он нормально воспринимал «2016-12-31T23:59:60.125000000Z»

Итого: Храним и обрабатываем с привязкой к TAI, отображаем в нужном timezone.

Есть хоть что-то более менее готовое для этого? Или как всегда велосипедить?

★★★★★

Последнее исправление: AlexVR (всего исправлений: 1)

Что-то мне кажется что тебе не подойдёт ничего для чего явно не заявлена поддержка дополнительной секунды. Это же совершенно другой подход к хранению времени, с другой точностью, с другой точкой отсчёта и с другой конвертацией в wall clock. Я бы поискал leap second time series database и дальше кто и как умеет с ней работать или leap second aware time library и кто её использует. Если не найдётся, то да, придётся видимо патчить и/или костылять. Хранить время как число, конвертить в wallclock/epoch своими силами, при построении графиков терять 60-ю секунду которую нет возможности отобразить, или сдвигать временную шкалу в зависимости от того на какое время смотришь.

slovazap ★★★★★
()

А может все хранить в некоем подобии unix time? Два числа: число секунд и число наносекунд в секунде. А конвертацию в календарь делать руками. Или найти готовую либу.

pathfinder ★★★★
()
Ответ на: комментарий от pathfinder

А может все хранить в некоем подобии unix time?

Так это и понятно, что метка должна быть как timestamp (секунды плюс доли секунд). Только рассматриваться всё это будет во временной зоне TAI (аля std::chrono::tai_clock)

Или найти готовую либу.

Для своего кода либу я давно нашёл: https://github.com/HowardHinnant/date Она между прочим в C++20 проходит (только вот насколько).

В качестве основной информации по правилам преобразования времени в разных временных зонах и списка дополнительных секунд стандартом становится IANA Time Zone Database (см. пакет tzdata в Linux-дистрибутивах). Но он обновляется минимум 2 раза в год.

Именно его парсит data/tz: https://howardhinnant.github.io/date/tz.html (Интересное чтиво)

Но!!!

Какого фига создают все эти новомодные InfluxDB если в них заложено уничтожение данных в дополнительных секундах?

Или как всегда, разработчики вспоминаю о дополнительной секунде после выпуска продакшен версии, а потом как было с ГЛОНАСС.

AlexVR ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.