2012-02-26 25 views
1

我正在尋找一種方法來儘可能直接地將時態意識集成到我的類中。我處理的數據隨時間變化很大,比如股價,所以這可能需要一些關注,並在一個地方處理以確保「關注點分離」。fsharp/dotnet和時態數據庫

你有沒有類似的時間數據/數據庫的經驗?

你能推薦閱讀/知道什麼?

(我想纏繞的一個時間片(日期)計算表達式生成器我的計算,以範圍檢索到構成我計算的「水平」指定的日期。 像

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

你到底是什麼意思?你能發表你如何想象表達? – svick 2012-02-26 13:30:43

+0

我期望它是''(historicalDate(Today() - 10 years)){..}''和'return company.CEO''。 – 2012-02-26 14:01:05

回答

1

我認爲,考慮你的數據模型捕獲的現實的時間方面應該具有非常明顯的區別開始valid timetransaction time維度之間,與CEO的例子辦法「在時間點上」有「CEO」狀態伴隨只是一個普通的時間維度狀態「當」「可能足夠好時,只要您不考慮細粒度時間尺度上捕獲的」事實「的多個來源。否則,如果你轉股價的你的問題物質和它們之間的關係,最喜歡S &普500指數的價值及其成分的價格之間提到的,你不能從你的內部數據區分這兩個維度和捕捉他們逃脫狀態:S & P 500指數的價值僅在某些交易時間方面有意義,因爲您需要在某個有效時間點收集組成價格並執行(而不是即時)權重和計算,以便在一些後來的交易時間時刻,實際上,它是過去有效時間的價值。

或者,即使在你的例子中,想象一下你需要某個合規團隊隨時進行審計什麼是你在過去的某個時候的迴應。換句話說,你的時間specificator

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)

雙時態處理數據並不是一件足夠簡單的事情,它可以通過特定的語言機制來調整它,例如計算表達式sions。做一些閱讀絕對是一個好主意。如果被問一本書我可能會建議關於這個問題,我的答案是Managing Time in Relational Databases,否則,如果您想徹底的研究,你也可以考慮經典 Developing Time-Oriented Database Applications in SQLTemporal Data & the Relational Model

也許別人可以指向你的處理的基於關係的持久性機制以外的臨時數據狀態的方法,但是我自己的經驗僅限於這樣的。

+0

確實。 '價值'日期和'時間'日期不一樣。這個問題是相當重要的。只要我們處理數據,我們就會面對這種或那種方式。感謝我正在查看的鏈接。 – nicolas 2012-02-26 18:13:55

+0

@nicolas:在時間數據領域'時間範圍'日期通常意味着與'交易'日期完全不同的事物,即**未來**時間點。例如,通常具有一年期限日期的「股票目標價格」是從現在開始的一年內股票的預測價格。爲了避免混淆,它總是更好地堅持已建立的術語,對於現實時間維度是**有效**,對於模型一**是**事務**。 – 2012-02-26 19:34:08

+0

我不知道這個術語。在金融方面,我認爲它的既定習慣是'歷史'日期。而股票目標價格會有一個相關的日期,稱爲到期日,期限或支柱日期。對我自己而言,如果你認爲地平線是你看不到的地方,我覺得這個術語足夠描述性,因爲它太遙遠了。這種用法是對現有空間概念的直接比喻。 – nicolas 2012-02-26 20:37:14

0

我不確定自己的描述是否足夠,但這聽起來像是您想要查看Reactive Programming,其中取決於值可能隨時間而改變,特別是像Functional Reactive Programming

+0

不,請不要給我另一個藉口來挖掘另一個很酷的FP概念!我有足夠的那些! ;)謝謝,我會研究它。 – nicolas 2012-02-27 21:25:13

1

讀了你的問題,我從Clojure的發明者其中明確「是靈活的,基於時間的事實數據庫,支持查詢和加入」提醒Datomic數據庫。 http://www.datomic.com/也許那裏的想法會刺激你的F#思維,因爲他們有我的想法。