如果你在事后发现了一个事实,你如何使用 Datomic?
If you discover a fact after the fact, how do you Datomic?
我对EAVT的理解是,当事实被插入到Datomic中时,T必须是。在我的工作中,事实通常可以在发生几个月后插入到系统中。很明显,我可以向我的模式添加一个 "at" 属性,但这似乎破坏了 Datomic 的大部分价值。是否有方便地处理这种时间断开的模式或技术?
我想避免的主要问题是:
t=1: I receive a fact that at t=0 x=5
t=3: I receive a fact that at t=2 x=6
t=5: I receive a fact that at t=4 x=7
什么是 x @t=2.5?
要回答这个问题我想我必须查询x的整个历史,并遍历一个custom at字段。或者进行某种二进制 asof 搜索。两者似乎都不太吸引人。
原则上,:db/txInstant
是一个事实被系统知道的记录。如果众所周知的事实是 "when some event happened," 我认为为该知识添加属性没有问题,例如:person/birthday
或 :historical-event/date-time
.
我唯一避免添加日期属性的情况是 "when this became known to the system" 和 "when this occurred" 根据定义 相同 。例如,"when did the user create this todo item" 可以定义为,:db/txInstant
表示待办事项进入数据库的时间。
蒂姆波特是正确的。域时间(当 'real world' 中发生某些事情时)和系统时间(当 Datomic 发现它时)之间的区别是一个重要的区别,当它可能与系统不同时,显式建模域时间绝对是一个好方法时间.
我对EAVT的理解是,当事实被插入到Datomic中时,T必须是。在我的工作中,事实通常可以在发生几个月后插入到系统中。很明显,我可以向我的模式添加一个 "at" 属性,但这似乎破坏了 Datomic 的大部分价值。是否有方便地处理这种时间断开的模式或技术?
我想避免的主要问题是:
t=1: I receive a fact that at t=0 x=5
t=3: I receive a fact that at t=2 x=6
t=5: I receive a fact that at t=4 x=7
什么是 x @t=2.5?
要回答这个问题我想我必须查询x的整个历史,并遍历一个custom at字段。或者进行某种二进制 asof 搜索。两者似乎都不太吸引人。
原则上,:db/txInstant
是一个事实被系统知道的记录。如果众所周知的事实是 "when some event happened," 我认为为该知识添加属性没有问题,例如:person/birthday
或 :historical-event/date-time
.
我唯一避免添加日期属性的情况是 "when this became known to the system" 和 "when this occurred" 根据定义 相同 。例如,"when did the user create this todo item" 可以定义为,:db/txInstant
表示待办事项进入数据库的时间。
蒂姆波特是正确的。域时间(当 'real world' 中发生某些事情时)和系统时间(当 Datomic 发现它时)之间的区别是一个重要的区别,当它可能与系统不同时,显式建模域时间绝对是一个好方法时间.