fsharp / dotnet и временная база данных - PullRequest
1 голос
/ 26 февраля 2012

Я ищу способ максимально интегрировать временную осведомленность в мои классы.Я имею дело с данными, которые меняются со временем довольно сильно, например, с ценами на акции, так что это, вероятно, потребует некоторого внимания и будет рассматриваться в одном месте, чтобы обеспечить «разделение интересов».

Был ли у вас подобный опыт?с временными данными / базами данных?

Что вы могли бы порекомендовать для чтения / знания?

(я думаю обернуть мои вычисления вокруг построителя выражений вычислений TimeSlice (date), чтобы получить возможность поиска в областиуказанная дата, которая составляет «горизонт» моих вычислений, например

let oldCEO = 
      historicaDate(Today() - 10 years)            {
          let! company = CompanyFinder("MSFT")
          company.CEO 
        }
let todayCEO = 
      historicaDate(Today() )            {
          let! company = CompanyFinder("MSFT")
          company.CEO 
        }

Ответы [ 3 ]

1 голос
/ 02 января 2014

Читая ваш вопрос, мне вспоминается база данных Datomic от изобретателя Clojure, которая явно «представляет собой базу данных гибких, основанных на времени фактов, поддерживающих запросы и объединения». http://www.datomic.com/ Возможно, идеи будут стимулировать ваше мышление F #, как и мои.

1 голос
/ 26 февраля 2012

Я считаю, что рассмотрение временного аспекта реальности, отраженного в вашей модели данных, должно начинаться с очень явного различия между действительным временем и временем транзакции измерениями;ваш пример подхода с генеральным директором «в определенный момент времени», имеющим «генеральный директор» состояние, сопровождаемое только одним общим состоянием временного измерения «Когда» может быть достаточно хорошим, если вы не учитываетемножество источников ваших захваченных «фактов» в точных временных масштабах.В противном случае, если вы перейдете к упомянутому в вашем вопросе вопросу о ценах на акции и их взаимосвязи, например, между значением индекса S & P 500 и ценами его составляющих, вы не сможете отделиться от этих двух измерений и зафиксировать их во внутренних данных .состояние : значение индекса S & P 500 имеет смысл только в отношении некоторого времени транзакции, так как вам нужно собирать составляющие цены в какой-то действительный момент времени и выполнять (не мгновенные) взвешивание и вычисления, чтобы получить значение индекса вкакой-то более поздний момент времени транзакции, который, по сути, является значением для прошедшего момента действительного времени.

Или, даже оставаясь в вашем примере, представьте, что какой-то полк соответствия обязывает вас проводить аудит в любое время каким был ваш ответ в какой-то момент в прошлом.Другими словами, ваш спецификатор времени

historicalDate(date: <time expression>)

является частным вариантом более общего случая

historicalDate(date: <valid time expression>,
               asOf: <transaction time expression>)

, поэтому historicalDate(Today() - 1yr), на самом деле, historicalDate(Today() - 1yr, Now()), но в принципе, может быть historicalDate(Today() - 1yr, Now() - 20days)

Работа с данными в двух местах не достаточно проста, чтобы дать краткий универсальный рецепт по укрощению его с помощью специальных языковых механизмов, таких как выражения для вычислений.Было бы неплохо почитать.Если меня спросят, какую книгу я могу порекомендовать на эту тему, мой ответ будет Управление временем в реляционных базах данных , в противном случае, если вы хотите провести исчерпывающее исследование, вы можете также рассмотреть классические Разработка приложений для работы с базами данных, ориентированных на времяв SQL и Временные данные и реляционная модель .

Возможно, кто-то еще может указать вам на подходы к обработке временного состояния данных вне механизма реляционной персистентности, но мой собственный опытограничивается только таким.

0 голосов
/ 28 февраля 2012

Я не уверен, получаю ли я достаточно из вашего описания, но звучит так, как будто вы хотите изучить Реактивное программирование , где зависимые значения могут изменяться со временем, в частности что-то вроде Функциональная реактивностьПрограммирование .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...