1

我正在寻找一种将时间意识尽可能直接地整合到我的课程中的方法。我处理的是随时间变化很大的数据,比如股价,所以这可能需要一些注意,并在一个地方处理以确保“关注点分离”。

您在时态数据/数据库方面有类似的经验吗?

你可以推荐阅读/了解什么?

(我正在考虑将我的计算包装在 TimeSlice(date) 计算表达式构建器中,以便将检索范围限定到构成我计算的“范围”的指定日期。像

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

3 回答 3

1

我相信考虑数据模型中捕获的现实的时间方面应该从有效时间事务时间维度之间非常明确的区别开始;只要您不考虑在细粒度时间上捕获的“事实”的多个来源,您的CEO 示例方法“在某个时间点”具有“CEO”状态伴随着一个通用的时间维度状态“何时”可能就足够了秤。否则,如果您在问题中提到股价及其关系的问题,例如标准普尔 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和时间数据和关系模型中开发面向时间的数据库应用程序.

也许其他人可以向您指出在基于关系的持久性机制之外处理时间数据状态的方法,但我自己的经验仅限于此。

于 2012-02-26T16:07:36.473 回答
1

阅读您的问题,我想起了 Clojure 发明者的 Datomic 数据库,它明确地“是一个灵活的、基于时间的事实的数据库,支持查询和连接”。http://www.datomic.com/ 也许那里的想法会激发你的 F# 思维,就像我的一样。

于 2014-01-02T17:32:30.530 回答
0

我不确定我是否从您的描述中得到足够的信息,但听起来您想研究Reactive Programming,其中依赖值可能会随着时间而变化,特别是诸如Functional Reactive Programming之类的东西。

于 2012-02-27T20:52:26.720 回答