Временные метки хранилища

Временные метки хранилища
Atom
11/3/2014
Mikhail Sukhov


Всех приветствую.

Провели в прошедшем месяце ревью нашего хранилища маркет-данных. Обнаружилась недоработка в плане хранения данных - отсутствует признак временной зоны. Проблема на текущий момент не сильно актуальная (большинство живет в зоне +3 и торгует на московской бирже, поэтому никакой сдвиг не нужен), но фиксить нужно сейчас.

Для тех, кто не совсем понял о чем речь приведу простой пример. Вы пишите данные торгов московской биржи. Время, что в Москве равно 10:00, будет записано как 10:00. Далее, вы переезжаете на Камчатку, прихватив с собой диск с историей. Запускаете программу, она рисует в истории 10:00 как локальное время. Но это неправильно. Вы уже в другой временной зоне, и записанные данные должны учитывать это.

Основная проблема, как это ни странно, вовсе не в хранилище. А в коннекторах к торговым системам. Сейчас отправляется DateTime, который в себе содержит только метку времени (без временной зоны). В хранилище понять уже невозможно в какой зоне получена метка времени. Вариантов решения два:

1. Для всех данных, что имеют метку времени (а это почти все) вместо DateTime использовать DateTimeOffset. Плюс в том, что внешне ничего не изменится. Минус - потребление памяти увеличиться.

2. Перейти на UTC. На истории все метки времени будут в UTC, поэтому время будет единым (и для Москвы и для Камчатки). Но будет несколько непривычно.

Мне лично нравится ваариант 2. Но пока переделки не вступили в силу, можно обсудить. Релиз будет через неделю. Отмечу особо - это не тот страшный релиз, о котором я писал в чате. Тот будет во второй половине ноября.

Tags:


Thanks:


< 1 2 
transdex

Avatar
Date: 11/11/2014
Reply


Ну так это практически то же самое, что хранить и локальное и UTC ;) Я бы еще добавил TAI, иначе как Вы собираетесь обрабатывать коррекционную секунду?
Thanks:

Mikhail Sukhov

Avatar
Date: 11/11/2014
Reply


transdex
Ну так это практически то же самое, что хранить и локальное и UTC ;)


Хранится время как раз в UTC. Но у локального и у UTC времени есть один недостаток - нет информации временной зоны источника. Другими словами, для корректной работы с датами нужно знать: зону назначения (локальная), зону UTC (общеизвестная) и зона источника.

transdex
Я бы еще добавил TAI, иначе как Вы собираетесь обрабатывать коррекционную секунду?


Я не знаю что такое TAI. Одна лишь ассоциация, но явно не та.
Thanks:

transdex

Avatar
Date: 11/11/2014
Reply


Во-первых: под " локальное время" я имел ввиду локальное время биржи, т.е. по Вашему - время источника.
Михаил Сухов

Другими словами, для корректной работы с датами нужно знать: зону назначения (локальная), зону UTC (общеизвестная) и зона источника.

Если немного переформулировать то необходимо знать время UTC, текущее смещение для зоны источника, и текущее смещение для зоны назначения. Но зона назначения в общем случае заранее неизвестна. Например я сидя в Москве записываю данные Чигагской CME,чтоб использовать (как "поводырь") в тестировании алгоритма, работающего на MICEX и использующего данные сграбленные и их ftp. А потом я решаю а не потестировать ли мне этот алгоритм на данных сграбленных с сервера Сингапурской биржи... А там вдруг стрелки перевели... Т.е. получается хранить надо UTC и текущие смещения по всем крупным биржевым площадкам.

Во вторых: с UTC есть один ньюанс - два раза в год одна из минут может законно иметь от 59 до 61 секунды. Известны случаи, когда солидные серверные OS падали от изумления...

C TAI ( фр. Temps Atomique International) - Международное атомное время - такого не бывает.

http://www.leapsecond.com/java/gpsclock.htm
Thanks: Mikhail Sukhov

transdex

Avatar
Date: 11/12/2014
Reply


Но если подойти с чисто теоретических позиций, при этом наплевав на прыгающую секунду, то достаточно сохранять время биржи и метку географического положения биржи. Все остальные оффсеты можно восстановить из этих данных и базы tz, имеющей копеечный размер.
http://www.iana.org/time-zones
http://zoneinfo.codeplex.com/


PS. https://ru.wikipedia.org/wiki/Tz_database

Thanks:
< 1 2 

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy