fsharp / dotnet и времева база данни

Търся начин да интегрирам възможно най-директно временно осъзнаване в моите класове. Работя с данни, които се променят доста с времето, като цените на акциите, така че това вероятно ще се нуждае от известно внимание и ще се обработва на едно място, за да се гарантира „разделяне на загрижеността“.

Имали ли сте подобен опит с временни данни/бази данни?

Какво можете да препоръчате да прочетете/знаете?

(Мисля да обвия моите изчисления около TimeSlice(date) конструктор на изчислителни изрази, за да обхвана извличането до определената дата, която съставлява „хоризонта“ на моето изчисление. като

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

person nicolas    schedule 26.02.2012    source източник
comment
какво точно имаш предвид Можете ли да публикувате как бихте си представили израза?   -  person svick    schedule 26.02.2012
comment
Очаквам да бъдат (historicalDate (Today() - 10 years)) { .. } и return company.CEO.   -  person Ramon Snir    schedule 26.02.2012


Отговори (3)


Вярвам, че разглеждането на времевия аспект на реалността, уловен във вашия модел на данни, трябва да започне с много ясно разграничение между валидно време и време за транзакция измерения; вашият примерен подход с главен изпълнителен директор „в даден момент“ със състояние „изпълнителен директор“, придружено само от едно общо състояние на времево измерение „кога“ може да е достатъчно добър, стига да го правите не вземайте под внимание множество източници на заснетите от вас „факти“ на фини времеви мащаби. В противен случай, ако се обърнете към споменатия във въпроса си въпрос за цените на акциите и техните взаимоотношения, като например между стойността на индекса 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 и Временни данни и релационен модел.

Може би някой друг може да ви насочи към подходи за обработка на състоянието на временните данни извън базирания на релация механизъм за устойчивост, но моят собствен опит е ограничен само до такъв.

person Gene Belitski    schedule 26.02.2012
comment
Наистина. 'value' дата и 'horizon' дата не са едно и също. Този проблем е доста фундаментален. Веднага след като имаме работа с данни, ние се сблъскваме с тях по един или друг начин. Благодаря за връзките, разглеждам го. - person nicolas; 26.02.2012
comment
@nicolas: Във времевата област на данни датата „хоризонт“ обикновено означава нещо напълно различно от датата на „транзакция“, а именно, бъдеща точка във времето. Например, целевата цена на акциите с обикновено едногодишен хоризонт е прогнозната цена на акциите след една година. За да избегнете объркване, винаги е по-добре да се придържате към установената терминология, която е валидна за времево измерение на реалността и транзакция за модел едно. - person Gene Belitski; 26.02.2012
comment
Не знаех за тази терминология. във финансите мисля, че установеният идиом за него би бил „историческа“ дата. и целевата цена на акциите ще има свързана дата, която бихте нарекли дата на падеж, срок или дата на стълб. За себе си намирам термина хоризонт за достатъчно описателен, ако мислите за хоризонта като за мястото, след което не можете да видите, защото е твърде далеч напред. тази употреба е пряка аналогия във времето на съществуваща концепция в пространството. - person nicolas; 27.02.2012
comment
Разбира се, хоризонтът се отнася до „използване“ на данни, а не на самите данни, но двете концепции са обвързани: за дадена дата на хоризонта имате достъп до всички събития, чиято дата на транзакция е по-ниска от датата на хоризонта - person nicolas; 27.02.2012

Четейки въпроса ви, си спомням за базата данни Datomic от изобретателя на Clojure, която изрично „е база данни с гъвкави, базирани на времето факти, поддържащи заявки и съединявания“. http://www.datomic.com/ Може би идеите там ще стимулират вашето F# мислене, както и моето.

person Alan Wostenberg    schedule 02.01.2014

Не съм сигурен дали разбирам достатъчно от вашето описание, но изглежда, че искате да разгледате Реактивно програмиране, където зависещите стойности могат да се променят с времето, по-специално нещо като Функционално реактивно програмиране.

person lysium    schedule 27.02.2012
comment
о, не, моля, не ми давайте друго извинение да се ровя в друга готина FP концепция! Имам достатъчно такива! ;) Благодаря ти, ще го разгледам. - person nicolas; 28.02.2012